指定したフォルダ名の中に、指定されたファイルの存在を確認するプログラムを作成したいのですが・・・


ZERO  2008-01-31 08:12:16  No: 100185

エクセルで、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週間という学習期間しかないため、おかしなプログラム構成を作っているかもしれません。
無駄なプログラムなども含めて簡潔に出来るアドバイスもありましたら、お願いします!


しんご  2008-01-31 08:36:36  No: 100186

エクセルから特定のセルの値を読込むことはできるのを
前提として書きます。プログラムはできているとのことなので

> 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つに対して
メッセージボックスを出すのですか?そんなことしたら
大変だと思いますが・・・

リストボックスかテキストボックスに列挙するのがよいかも
しれません。


Yukidaruma  2008-02-24 10:10:18  No: 100187

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

こんな感じで?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加