VBAサンプル集
エクセルでファイル一覧を作成.№2(Dir関数1)

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

エクセルでファイル一覧を作成.№2(Dir関数1)


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


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


その前に、マクロって何?と言う人は、

第3回.顧客登録のシートを作成、その前にマクロって何?

第4回.顧客登録のシートを作成(1)

第10回.コーディングとデバッグ

このあたりをお読みください。

モジュールの挿入方法や、変数定義については、本シリーズでは省略します。


まずは、完成イメージです。


Excel VBA 解説



とにかく、ファイルの一覧を取得しなければなりません。


使用するのは、Dir関数です。


FileSystemObjectというのもありますが、古くからあるDir関数をまず覚えてからです。


標準モジュールを追加して下さい。


以下を追加します。


Sub ファイル一覧取得()
  Dim strBuf As String
  strBuf = Dir(Cells(4, 2))
  Cells(5, 2) = strBuf
End Sub

セルB4には、自身のPCに存在するフォルダを指定して下さい。


必ず、最後に"\"を付けて下さい。


マクロを実行すると、セルB5にファィル名が表示されたはずです。


えっ、されない・・・ファィルのないフォルダを指定してもダメですよ。



しかし、これでは1つのファイルしか取得できません。


では、

strBuf = Dir(Cells(4, 2))
Cells(5, 2) = strBuf
strBuf = Dir(Cells(4, 2))
Cells(6, 2) = strBuf
にしたらどうでしょう、B5もB6も同じファィル名になってしまいましたね。


Dir関数では、次々にファィルを取得する場合は、

2回目からは、フォルダを指定せずに、

strBuf = Dir(Cells(4, 2))
Cells(5, 2) = strBuf
strBuf = Dir()
Cells(6, 2) = strBuf
のように指定します。

これで、セルB6に次のファィルが表示されました。


しかし、これを延々と続けて書くわけにはいきませんので、


このように書きます。




Sub ファイル一覧取得()
  Dim strBuf As String
  Dim i As Long
  i = 5
  strBuf = Dir(Cells(4, 2))
  Do While strBuf <> ""
    Cells(i, 2) = strBuf
    i = i + 1
    strBuf = Dir()
  Loop
End Sub

Dir関数は、ファイルすべての取得が終了すると、空白""を返します。


従って、空白以外の間、カウントアップしながら処理を続けます。


Do While strBuf <> ""

  ・・・

Loop
は、strBufが空白""以外の間、・・・の部分を繰り返し処理します。


「あれっ、サブファルダが表示されない」、それは次回に!


次回は、Dir関数の詳細説明をします。



Do WhileとDo Untilについて


上記のプログラムは、Do Whileを使用していますが、これをDo Until で書けば

Do Until strBuf = ""

となります。

どちらでも同じです。

Whileは「の間」、Untilは「になるまで」になります。


では使い分けはあるのかとの疑問が出てきます。


特にないです。(笑)


If文と同じ考えで良いと考えています。


If A <> B then

  AとBが違う場合の処理

Else

  AとBが同じう場合の処理

End If

これは、

If A = B then

  AとBが同じ場合の処理

Else

  AとBが違う場合の処理

End If

と同じです。


しかし、なるべくなら二重否定は使用しない方が好ましいです。

つまり、下の方が好ましい。


しかーし、時と場合によるのです。

プログラミングは言語です。

コンピューターに伝えるだけの言語ではありません、

同じ言語を使う他の人にも伝える必要があります。

そして、なるべく解り易く伝える必要があります。


AとBが違う事が通常(多くの場合)であるなら、上の記述の方が理解し易いのです。

Elseはその他例外の場合の処理と言う事になります。

例外処理を先に書くのは、理解しづらいのです。


戻って、WhileとUntilではどうでしょうか。

Whileを使った方が、否定形になっています。

この意味では、Untilの方が良いともいえます。


しかし、ネットのサンプルの多くは、Whileを使用しています。

その理由ははっきりしませんが。

私はどちらかと言うと、Untilを使う事が多いのですが、ある程度、使い分けしています。

コーディングをしていて、どちらを期待して書いているかの違いです。

「その状態の間は処理するよ」vs「その状態になったら終了するよ」

の違いです。


そして、もう1つの大切な判断基準は、流行です。

プログラミングは言語だと言いました。

言語には流行すたりがあります。

この点では、Whileになるでしょう。

Dir関数をつかっての処理で、Untilを使っているサンプルを見た事がないのです。


私は、昔からの癖で、どちらも使用してしまいますが、

Whileだけを使用するなら、それで統一するというのも、良い判断だと考えます。


また、

Do

  ・・・

Loop While 条件

という書き方もありますが、私は使いません。

使う事を否定はしませんが、必要性を感じません。





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

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


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

付録:AI×VBA実践リソース集|生成AI活用研究(2025-05-25)
おわりに:AI×VBAはあなたの未来を変える強力な武器|生成AI活用研究(2025-05-25)
第7章:さらなる高みへ!AI×VBA応用テクニックと未来への備え|生成AI活用研究(2025-05-24)
第6章:AIとVBAを学び続ける!あなたの「超効率化」を止めないヒント|生成AI活用研究(2025-05-22)
第5章:AI×VBAでつまづかない!トラブルシューティングとAIとの付き合い方 |生成AI活用研究(2025-05-21)
第4章:【事例で学ぶ】AIとVBAでExcel作業を劇的に効率化する! |生成AI活用研究(2025-05-20)
第3章:AIを「自分だけのVBA先生」にする!質問・相談の超実践テクニック|生成AI活用研究(2025-05-19)
第2章 VBAって怖くない!Excelを「言葉で動かす」(超入門)|生成AI活用研究(2025-05-18)
第1章:AIって一体何?あなたのExcel作業をどう変える?(AI超基本)|生成AI活用研究(2025-05-18)
AI時代のExcel革命:AI×VBAで“書かない自動化”超入門|生成AI活用研究(2025-05-17)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.ひらがな⇔カタカナの変換|エクセル基本操作
6.RangeとCellsの使い方|VBA入門
7.メッセージボックス(MsgBox関数)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.FILTER関数(範囲をフィルター処理)|エクセル入門
10.条件分岐(Select Case)|VBA入門




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


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



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