つかえるExcelマクロ[9-全てのファイル名を書きだす](エクセルマクロ)対象フォルダを選ぶところから
この記事は9-全てのファイル名を書きだす(エクセルマクロ)で書いたマクロにコードを追加して、より実用的に使えるマクロにしました。
9-全てのファイル名を書きだす(エクセルマクロ)では特定のフォルダ内のファイル名を全て書き出すマクロを作りました。
◆イメージ
◆実行したマクロ
変数宣言を強制せずに書きました。
中身を書出したいフォルダは上の図のようにmypathという変数に直接パスを書いて入れるという書き方です。
今回は、フォルダをその都度選択できるように書いてみたいと思います。
ついでに変数宣言も書いてみましょう!
◆その都度フォルダを選択したい!
マクロを実行したら、次の図のようなダイアログボックスを開いてフォルダを選択できるようにしましょう!
◆書くコード
白抜きの部分が前回書いたコードです。
緑の線が入っているmypathに、直接パスを書き込んで入れていましたので、今回は
mypath=”C:¥ ~ ¥取引先ファイル”
というコードはありません。
緑点線の矢印の先でmypathを取得しています。
それでは、フォルダ選択の画面を表示させてフォルダのパスを取得する書き方を見ていきましょう!
◆テキスト
⑤Dim mypath As String
⑤Dim myFile As String
⑤Dim cnt As Long
①With Application.FileDialog(msoFileDialogFolderPicker)
②If .Show = True Then
③mypath = .SelectedItems(1)
②Else
④Exit Sub
②End If
①End With
--------------------------------ここからは前回の解説をご確認ください
myFile = Dir(mypath & "\*")
cnt = 1
Do While myFile <> ""
Range("A" & cnt).Value = myFile
cnt = cnt + 1
myFile = Dir()
Loop
-----------------------------------------------------
◆書く順番で解説
①With Application.FileDialog(msoFileDialogFolderPicker)
①End With
このWithからEnd Withの書き方を思い出してください。
ワンポイントマクロ5-省略して書くでご紹介しました。
Withの次に書いたオブジェクトを次の行から省略して書けるという便利なステートメントです。
省略しないで書いた場合と比べてみましょう。
↓↓★省略せずに書く
↓↓★Withステートメントを使って書く
If文全体をWith - End Withで挟んでます。
もちろん、どちらの書き方でもマクロは同じように動きます。
最初は自分が好きな方で書けばいいと思います。
★Application.FileDialog(msoFileDialogFolderPicker)はフォルダを選択できるダイアログボックスのことです。必要になったら検索して使うくらいに覚えておきます。(このまま暗記する必要はないということです。)
②If .Show = True Then
➡If Application.FileDialog(msoFileDialogFolderPicker).Show = True Then
のことですね。
意味
ダイアログボックスを表示して(Show)フォルダが選択されたならば(True)
★ここで②のIf文に当てはまれば③へ、当てはまらなければ(フォルダが選択されなかったら)②Elseへスキップします。
③mypath = .SelectedItems(1)
★SelectedItems(1)で選択フォルダのパスを取得します。
➡mypath = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1)
意味
変数(mypath)にダイアログボックスで選択されたフォルダパスを入れます。
②Else (⇦ ”②If .Show = True Then” じゃなかった場合、
フォルダが選ばれなかった場合やキャンセルボタンを押した場合)
④Exit Sub (⇦ マクロの終了)
②End If (⇦ If文の終了)
ここまでが今回新しくご紹介したコードの書き方になります。
--------------------------------ここからは前回の解説をご確認ください
myFile = Dir(mypath & "\*") ⇦③で取得したmypathがここで使われます。
cnt = 1 ⇦書き込み先の行番号の初期値です。
Do While myFile <> "" ⇦ファイルがなくなるまで繰り返す
Range("A" & cnt).Value = myFile ⇦A列にファイル名が書き出されます
cnt = cnt + 1
myFile = Dir() ⇦次のファイルを取得
Loop
-----------------------------------------------------
◆変数宣言
あとは、このマクロで使っている変数の変数宣言をしておきましょう。
⑤Dim mypath As String
⑤Dim myFile As String
⑤Dim cnt As Long
mypathとmyFileは文字列なのでString
cntは行番号を表す変数なので整数Long
です。
◆まとめ
今回はダイアログボックスを表示させてフォルダを選択してフォルダのパスを取得するというところをご紹介しました。
こんな長いコードは覚えるのが難しいです。使いたいと思ったときにこのページを開いて、見て書けばいいのです。
使えそうな状況があればぜひ使ってみてくださいね。
Dir関数、Do~Loop構文は以下の記事をご参考ください。
参考記事<9-全てのファイル名を書きだす(エクセルマクロ)>
参考動画<【マクロルーティン19】フォルダ内のファイルを全て書き出す>