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回.顧客登録のシートを作成、その前にマクロって何? 第4回.顧客登録のシートを作成(1) 第10回.コーディングとデバッグ このあたりをお読みください。モジュールの挿入方法や、変数定義については、
エクセルでファイル一覧を作成.№3(Dir関数2)
エクセルでファイル一覧を作成します、サブフォルダ以下も全て取得し、一覧表示します、先にまず、完成イメージです。前回のプログラム ファィルの一覧は取得出来ましたが、サブフォルダが取得できていません。実は、Dir関数には、第2引数があります。
エクセルでファイル一覧を作成.№4(FileLen,FileDateTime)
エクセルでファイル一覧を作成します、サブフォルダ以下も全て取得し、一覧表示します、前回のプログラムです。とにかく一覧は取得出来ましたが、フォルダとファイルがごちゃ混ぜです。フォルダだけをまず取得し、それからファイルを取得して、一覧にします。
エクセルでファイル一覧を作成.№5(FileDialog)
エクセルでファイル一覧を作成.№6(FileSystemObject1)
エクセルでファイル一覧を作成します、サブフォルダ以下も全て取得し、一覧表示します、前回の予告通り、FileSystemObjectを使います。Dir関数では限界があります、というか、かえって面倒です。FileSystemObjectを使うことによって、すっきりしたコードになりますし、次回以降の再帰処理もしやすくなり…
エクセルでファイル一覧を作成.№7(FileSystemObject2)
エクセルでファイル一覧を作成します、サブフォルダ以下も全て取得し、一覧表示します、前回の予告通り、今回は再帰処理を実装します。その前に、再帰処理とは 簡単に言えば、自分自身をCallすることです、「再帰呼び出し」と言います。同じ処理を繰り返し行う場合に使用します。
エクセルでファイル一覧を作成.№8(インデント)
エクセルでファイル一覧を作成します、サブフォルダ以下も全て取得し、一覧表示します、さて、前回の再帰処理で、サブフォルダも以下も全て取得できましたので、後は、体裁を整えるだけになりました。今回は、サブフォルダ毎に、列をずらして(インデントして)、見やすくします。
エクセルでファイル一覧を作成.№9(罫線)
エクセルでファイル一覧を作成します、サブフォルダ以下も全て取得し、一覧表示します、いよいよ、大詰めです、今回は罫線を引きましょう。一見すると、かなり複雑な線を引かないといけないように見えます。規則性を見つけて下さい。
エクセルでファイル一覧を作成.№10(完成)
エクセルでファイル一覧を作成します。、サブフォルダ以下も全て取得し、一覧表示します、いよいよ、最終回です、使えるマクロにする為の総仕上げになります。1.画面の更新を停止して、スピードアップする 2.処理中のフォルダをステータスバーに表示する 3.エクセルファイルはクリックで開けるようにする 以上を組み込みます。


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

TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.ブック・シートの選択(Select,Activate)|VBA入門




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


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。


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