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

[Visual Basic Q & A 掲示板] [過去ログの一覧]


ZERO 2008/01/30(水) 23:12:16 <初心者>
エクセルで、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/30(水) 23:36:36 <中級者>
エクセルから特定のセルの値を読込むことはできるのを
前提として書きます。プログラムはできているとのことなので

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

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

毎週金曜日はポイント最大3倍!さらに4倍のチャンスも!

Programming Library