VBAサンプル集
エクセルでファイル一覧を作成.№5(FileDialog)

ExcelマクロVBAでファイル一覧を作成、サブフォルダ以下を全て取得
公開日:2013年5月以前 最終更新日:2014-11-11

エクセルでファイル一覧を作成.№5(FileDialog)


エクセルでファイル一覧を作成します、

サブフォルダ以下も全て取得し、一覧表示します、


前回のプログラムでは、フォルダが無い場合のチェックや、最後に"\"を付けておく必要がありました。


これらを、プログラムに組み込みます。


If Right(Cells(4, 2), 1) = "\" Then
  strDir = Cells(4, 2)
Else
  strDir = Cells(4, 2) & "\"
End If
strBuf = Dir(strDir, vbDirectory)
If strBuf = "" Then
  MsgBox ("指定のフォルダは存在しません")
  Exit Sub
End If

これをモジュールの先頭に入れます。


Right(文字列, 数値)

文字列の右から、指定数値の文字数を取り出します。

つまり、最後が"\"でなければ、"\"を付加しています。


strBuf = Dir(strDir, vbDirectory)

これが空白の場合は、フォルダが存在しないので、

メッセージを出して、終了します。



次は、ボタンでフォルダ選択のダイアログを出すようにします。


Excel VBA 解説

上の、「フォルダ」のボタンです。


ボタンの追加方法は、


1.2003なら、「表示」→「ツールバー」→「コントロールツールボックス」→ボタンを選択する

  2007以降なら、「開発」→「挿入」→「ActiveXコントロール」→ボタンを選択する

2.十字カーソルの状態で、シートの配置する場所をドラッグして配置

3.ボタンをクリックし、ツールバーの「プロパティ」

  または、右クリックで「プロパティ」

4.「プロパティ」の「オブジェクト名」を、「btnフォルダ」と変更

5.「Caption」を、「フォルダ」に変更」
6.ボタンをダブルクリック、または、右クリックで、「コードの表示」

7.VBEが起動され、

  Option Explicit

  Private Sub btnフォルダ_Click()

  End Sub

  が自動的に作成されたはずです。


この、Subモジュールが、ボタンがクリックされた時に起動されるモジュールです。

この中に、処理を記述します。

Private Sub btn新規_Click()
  With Application.FileDialog(msoFileDialogFolderPicker)
    If .Show = True Then
      Cells(4, 2) = .SelectedItems(1)
    End If
  End With

End Sub


Application.FileDialog(msoFileDialogFolderPicker)
はフォルダ選択のダイアログを表示します。

Excel VBA 解説

このようなダイアログです。


.Show

で実際に表示されます。

キャンセルされた場合は、Falseが返されますので、Trueの判定をしています。

.SelectedItems(1)
に選択されたフォルダのフルパスが入っていますので、これをセルに入れています。



続いて、「実行」ボタンも作成します。


作成方法は、「フォルダ」ボタンと同様です。


オブジェクト名」を、「btn実行」にして下さい。




Private Sub btn実行_Click()
  Call ファイル一覧取得
End Sub

以上で、ボタンの追加が完了です。


「フォルダ」ボタンでフォルダを指定し、「実行」ボタンで、ファイルの一覧が表示されます。



フォルダ選択のダイアログ


上記の方法以外にも、


Shellを使う方法や、APIを使う方法もありますが、ダイアログの形式が違います。


特別な理由がなければ、上記の標準のダイアログで良いはずです。


また、Application.FileDialog(msoFileDialogFolderPicker)

の引数により、ダイアログの種類が変わります。


msoFileDialogFilePicker:ユーザーがファイルを選択できます。
msoFileDialogFolderPicker:ユーザーがフォルダを選択できます。
msoFileDialogOpen:ユーザーがファイルを開くことができます。
msoFileDialogSaveAs:ユーザーがファイルを保存できます。


エクセルには非常に多くのダイアログがあります。


上記と同じ、「ファイルを開く」や「ファイルを保存」でも、


GetOpenFilename、GetSaveAsFilename


もあります。


それぞれ、使い方が微妙に違いますので、興味のある方は調べて見て下さい。



ここまで来て、何か忘れていますよね。


そうです、サブフォルダの中のファイルが取得出来ていないのです。


Dir関数では限界です。


まあ、いろいろ工夫すれば出来ない事もないのですが、かなり面倒な処理になってしまいます。


FileSystemObjectという便利なものがあるのです。


最低限の知識として、Dir関数は知っておく必要があるので、説明しましたが、


これから覚える人は、FileSystemObjectの使い方に慣れた方が良いでしょう。


そして、これを使えば、記述も単純化でき、フルパスの文字数も問題無くなります。


あっ、Dir関数のフルパスの文字数制限について説明していませんでしたね。


Dir関数は、フルパスの文字数が256Byteまでです。いや、そうらしいです。


私は、そんな長いパスになるようなフォルダ構成で、実際にテストしていないので・・・


FileSystemObjectでは、この制限はありません。



次回は、FileSystemObjectを使って、いままでのプログラムを書きなおしてみましょう。





同じテーマ「ファイル一覧を作成」の記事

エクセルでファイル一覧を作成.№1(概要)
エクセルでファイル一覧を作成.№2(Dir関数1)
エクセルでファイル一覧を作成.№3(Dir関数2)
エクセルでファイル一覧を作成.№4(FileLen,FileDateTime)
エクセルでファイル一覧を作成.№5(FileDialog)
エクセルでファイル一覧を作成.№6(FileSystemObject1)
エクセルでファイル一覧を作成.№7(FileSystemObject2)
エクセルでファイル一覧を作成.№8(インデント)
エクセルでファイル一覧を作成.№9(罫線)
エクセルでファイル一覧を作成.№10(完成)


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ