VBAデバッグの鬼

VBA ファイルの操作とDir()

【今回の問題】
マクロVBA練習問題 練習問題18(Dir関数の練習)
excel-ubara.com

ファイルの中にあるファイルのファイル名をセルに転記していきます

今回も、いきなり回答をみることはせず、試行錯誤。

まず、C:\Userの中にあるファイルのファイル名をA列に転記していくコードから書いていきました。

ファイル名の取得はディレクトリ関数Dir()を使います。

変数 = Dir("ファイルへのパス&拡張子")

これで変数を代入するとファイル名になります。

ファイル名を取得してDo WhileでC:\Userの中にある全部のファイルの名前を取得すればいいんだよな。
ということで、こういうコードを書きましたが、無限ループしました💦

Sub 練習問題18_1()
'注意!無限ループします!
Dim memo As Worksheet
Dim file As Variant
Dim wb As Workbook
Dim folderPath As String
Dim fileExtension As String

Set memo = Worksheets("練習18")
folderPath = "C:\User"
fileExtension = "*.xls"

file = Dir(folderPath & "\" & fileExtension)

i = 3
Do While file <> ""

    Set wb = Workbooks.Open(folderPath & "\" & file)
   memo.Cells(i, 1) = wb.Name
   
   wb.Close SaveChanges:=False
   i = i + 1
Loop


End Sub

ファイルを次々に読み込ませていくにはどうしたらよいのだろう?

はてさて、セルはi = i + 1でどんどん次に行ってくれますが、ファイルをどんどん次のものを読ませるにはどうしたらよいのだろう?

ということで、あきらめて回答をみました。

なんてことはない。i = i + 1のあとに file = Dir()としてやれば次のファイルを読んでくれるらしい。

このコードで、ようやくファイル名だけは転記できました。

Sub 練習問題18_1()
Dim memo As Worksheet
Dim file As Variant
Dim wb As Workbook
Dim folderPath As String
Dim fileExtension As String

Set memo = Worksheets("練習18")
folderPath = "C:\User"
fileExtension = "*.xls"

file = Dir(folderPath & "\" & fileExtension)

i = 3
Do While file <> ""

    Set wb = Workbooks.Open(folderPath & "\" & file)
   memo.Cells(i, 1) = wb.Name
   
   wb.Close SaveChanges:=False
   i = i + 1
   
   '肝心なのはこの子
    file = Dir()
Loop


End Sub


不思議ですよね。fileだけではダメなのかな?と思い、実際にfileだけでやってみたらアラート出ました💦
f:id:vba-tokepi:20210608165228j:plain

二回目以降はDir()←パスは省略。

この file = Dir() というのはファイルが存在するかどうかを確認する呪文のようなものみたいですね。

解答にも書いてありますが

これはもう、基本中の基本の組み合わせです。
なんの迷いもなく、一気にかけるようなるまで練習して下さい。

ですって。

今回はファイル名の取得のお話なので横列にシート名のコードは省いています。