いつもは写真台帳しか作っていない私が、珍しくフォルダとを取り扱ったので備忘録としてメモしておきます。
とりあえずコードから・・・
Sub フォルダ指定()
Dim folder, filepath, path, エクセル名 As String
Dim i As Integer
Dim フォルダー(100) as Variant
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = True Then
path = .SelectedItems(1)
End If
End With
If path = "" Then
MsgBox ("キャンセルしました")
End
End If
i = 0
path = path & "\"
folder = Dir(path, vbDirectory)
Do While Len(folder) > 0
If GetAttr(path & folder) And vbDirectory Then
If folder <> "." And folder <> ".." Then
フォルダー(i) = folder
i = i + 1
End If
End If
folder = Dir()
Loop
i = 0
Do While フォルダー(i) <> ""
エクセル名 = Dir(path & フォルダー(i) & "\" & "*" & "ここに検索したいエクセルの名前を指定する" & "*")
filepath = path & フォルダー(i) & "\" & エクセル名
If エクセル名 <> "" Then
Workbooks.Open Filename:=filepath
"何か開いたエクセルで処理をしたければここに処理を記述する"
End If
i5 = i5 + 1
Loop
End Sub
ざっと要点としては
1.application.filedialog(msofiledialogfolderpicker)にてフォルダを指定する。
2.dir関数で指定したフォルダの中にあるファイルorフォルダをすべてチェックしに行く
└dir関数でフォルダを指定すると一番最初に呼び出されるフォルダの名前がなぜか"."と".."と順に呼び出されるためif文で回避
└ひたすらフォルダー()という配列に呼び出した名前を格納する。
3.Do While の次の文のエクセル名=というところは Dirのプロパティを見てもらった方が早いかも
とりあえずはまったのがDirを複数回するとフォルダがもどれねぇ!!!戻るすべは有るのだろうけどもChDirとかでごり押さなきゃだめかも?やり方を詳しく調べていないのであしからず・・・。
ここに検索したいエクセルの名前を指定するの前後に"*"がある理由としては拡張子がエクセル以外フォルダに絶対はいらない仕様で作っていたので必要に応じて変えてクレメンス。
下手するとメモ帳とかの名前も引っ張ってきちゃうかも
相変わらずfor文が使えずDoLoopでゴリ押していますが恐らくFor分の方がすっきりしそう
以上はまった部分のメモと備忘録でした。
※色々とコードの中に表に出しちゃいけない部分があったため、一部Qiita上で書き直しているので変数の宣言とか間違ってたらごめんなさい!