エクセルで、A列にフォルダ名、B列にファイル名を記載しています。
A列のフォルダの中にB列のファイルがあった場合は「ファイルは存在します」と表示、ファイルが無ければ「○○.txtが見つかりませんでした」と表示するプログラムを作りたいのですが、上手くいきません。
エクセルのA列に記載しているフォルダ名は複数あります。B列のファイル名も同様です。
例: A列 B列
aaa\bbb 1.txt
aaa\ccc 2.txt
aaa\ccc 3.txt
aaa\bbb 4.txt
今現在、ひとまずプログラムが出来ているつもりですが、このプログラムだと一つ一つのフォルダごとにプログラムを作らなければなりません。
Private Sub CommandButton1_Click()
Dim FileName As String
FileName = Dir("A列のフォルダ名+B列のファイル名を入力")
If FileName <> "" Then
MsgBox "ファイルがあります"
Else
MsgBox "ファイルがありません!"
End If
FileName = Dir
End Sub
複数のフォルダ&複数のファイルを一括でファイルの存在を検索することは可能でしょうか?アドバイスを頂けたらと思います。
VBを触ってからまだ1週間という学習期間しかないため、おかしなプログラム構成を作っているかもしれません。
無駄なプログラムなども含めて簡潔に出来るアドバイスもありましたら、お願いします!
エクセルから特定のセルの値を読込むことはできるのを
前提として書きます。プログラムはできているとのことなので
> FileName = Dir("A列のフォルダ名+B列のファイル名を入力")
のDirの引数は、セルから読み込んで入力していると解釈した次第です。
まず
1.エクセルファイルに登録されているファイル名の個数を
取得すること
2.ファイル名が始まっている先頭の行番号を取得すること
3.1と2が取得できたら、その回数分だけ For 〜 Next
TotalFile = ここに1の回答
StartRow = ここに2の回答
For i = 0 to TotalFile - 1
Filename = (StartRow + i)行A列の文字列 & (StartRow + i)行B列の文字列
If Dir(Filename) <> "" then
Msgbox Filename & "はあります。"
Else
Msgbox Filename & "はありません。"
End If
Next
みたいな感じで。変数の型宣言は適宜に。
これって、リストにあるファイル1つ1つに対して
メッセージボックスを出すのですか?そんなことしたら
大変だと思いますが・・・
リストボックスかテキストボックスに列挙するのがよいかも
しれません。
Private Sub CommandButton1_Click()
'ファイルの名前
Dim FileName As String
'カウンタ領域
Dim i As Integer
Dim retu As Integer
'初期値
retu = 1 'A列
i = 1 '1行
Do While Cells(i, retu) > ""
'セルAとBの結合
FileName = Dir(Cells(i, retu) & Cells(i, retu + 1))
'存在の有無をセルCに書き込み
If FileName <> "" Then
Cells(i, retu + 2) = "○"
Else
Cells(i, retu + 2) = "×"
End If
i = i + 1
Loop
ActiveSheet.AutoFit
MsgBox ("処理終了")
End Sub
こんな感じで?
ツイート | ![]() |