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だけでやってみたらアラート出ました💦
二回目以降はDir()←パスは省略。
この file = Dir() というのはファイルが存在するかどうかを確認する呪文のようなものみたいですね。
解答にも書いてありますが
これはもう、基本中の基本の組み合わせです。
なんの迷いもなく、一気にかけるようなるまで練習して下さい。
ですって。
今回はファイル名の取得のお話なので横列にシート名のコードは省いています。