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

ExcelマクロVBAでファイル一覧を作成、サブフォルダ以下を全て取得
最終更新日: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 ・・・新着記事一覧を見る

シートコピー後のアクティブシートは何か|ツイッター出題回答 (2023-09-19)
Excel関数の引数を省略した場合について|ツイッター出題回答 (2023-09-14)
セル個数を返すRange.CountLargeプロパティとは|VBA技術解説(2023-09-08)
記号を繰り返してグラフ作成(10単位で折り返す)|ツイッター出題回答 (2023-08-28)
シートを削除:不定数のシート名に対応|VBAサンプル集(2023-08-24)
ランクによりボイントを付ける(同順位はポイントを分割)|ツイッター出題回答 (2023-08-22)
OneDrive使用時のThisWorkbook.Pathの扱い方|VBA技術解説(2023-07-26)
列幅不足による###表示や指数表示を判定する|VBA技術解説(2023-07-12)
シートを削除:不定数のシート名に対応|VBAサンプル集(2023-07-04)
シート関数のCOUNTIFS,SUMIFS,MAXIFSと同じ処理|Power Query(M言語)入門(2023-02-28)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.繰り返し処理(For Next)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.マクロとは?VBAとは?VBAでできること|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
10.条件分岐(IF)|VBA入門




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

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



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