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 ・・・新着記事一覧を見る

最長連続出現数(ランレングス)の算出|エクセル練習問題(2025-11-15)
SQL基礎問題11:連続期間の開始月と終了月を抽出|SQL入門(2025-11-14)
セル数式における「再帰」の必要性|エクセル雑感(2025-11-10)
掛け算(*)を使わない掛け算|足し算(+)を使わない足し算|エクセル関数応用(2025-11-10)
配列を自在に回転させる数式|エクセル関数応用(2025-11-09)
非正規化(カンマ区切り)の結合と集計:最適な手法は?|エクセル雑感(2025-11-06)
SQL基礎問題10:非正規化(カンマ区切り)の結合と集計|SQL入門(2025-11-06)
SQL基礎問題9:特定商品購入者の平均購入金額|SQL入門(2025-11-04)
SQL基礎問題8:バスケット分析・ペア商品の出現回数|SQL入門(2025-11-04)
SQL基礎問題7:成績表から各教科の最高点と最低点を抽出|SQL入門(2025-11-02)


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

1.生成AIパスポート試験 練習問題(四肢択一式)|生成AI活用研究
2.最終行の取得(End,Rows.Count)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.繰り返し処理(For Next)|VBA入門
6.RangeとCellsの使い方|VBA入門
7.FILTER関数(範囲をフィルター処理)|エクセル入門
8.日本の祝日一覧|Excelリファレンス
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.セルのクリア(Clear,ClearContents)|VBA入門




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


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.



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