エクセルでファイル一覧を作成 | エクセルでファイル一覧を作成.2(Dir関数1) | ExcelマクロVBAでファイル一覧を作成、サブフォルダ以下を全て取得



最終更新日:2014-11-11

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


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


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


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

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

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

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

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

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



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




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


使用するのは、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 条件

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

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






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

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

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

SUMIFの間違いによるパフォーマンスの低下について|エクセル関数超技(6月17日)
条件式のいろいろな書き方:TrueとFalseの判定とは|ExcelマクロVBA技術解説(6月15日)
空白セルを正しく判定する方法2|ExcelマクロVBA技術解説(5月6日)
フルパスをディレクトリ、ファイル名、拡張子に分ける|ExcelマクロVBA技術解説(4月15日)
テキストボックスの各種イベント|Excelユーザーフォーム入門(4月9日)
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除|ExcelマクロVBAサンプル集(4月4日)
最後の空白(や指定文字)以降の文字を取り出す|エクセル関数超技(3月26日)
先頭の数値、最後の数値を取り出す|エクセル関数超技(3月26日)
Excelファイルを開かずにシート名をチェック|ExcelマクロVBAサンプル集(3月23日)
数式の参照しているセルを取得する|ExcelマクロVBAサンプル集(3月18日)

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

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.RangeとCellsの使い方|ExcelマクロVBA入門
3.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
4.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
5.変数とデータ型(Dim)|ExcelマクロVBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
7.セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)|エクセル関数超技
8.ひらがな⇔カタカナの変換|エクセル基本操作
9.定数と型宣言文字(Const)|ExcelマクロVBA入門
10.CSVの読み込み方法|ExcelマクロVBAサンプル集



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

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


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

    ↑ PAGE TOP