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


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

ブール型(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)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|VBA入門
4.ひらがな⇔カタカナの変換|エクセル基本操作
5.繰り返し処理(For Next)|VBA入門
6.変数宣言のDimとデータ型|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.Findメソッド(Find,FindNext,FindPrevious)|VBA入門




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


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


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