VBAと日々のこぼれ話

  1. VBA

【VBA】フォルダ内のファイル情報を一括で書き出す

あえてフォルダ内のファイルの情報のみを一括で書き出す

今回は、あえてフォルダ内のファイルの情報のみを一括で書き出すソースです。
1件ずつループで処理でExcelへ書き出すソースはたびたび見かけますが、一度に書き出すものはあまりみかけません。
毎回言っているような気もしますが、私はExcelへの書き出しは一括が好きなので、なるべく一括出力でやっていこうと思います。

今後、再帰的な処理でサブディレクトリを検索するものも紹介しますが、まずは基本から一つずつ歩みを進めていこうと思います。

今回からソースにコメントが多い理由

私は、仕事ではコードにコメントを極力書かないスタンスです。
(決してコメントが悪だと思っている訳でも全く書かない訳でもありません)

理由はいくつかありますが、それについては今は割愛します。

ブログもこのスタンスを貫こうと思い、今までコメントゼロのサンプルコードを紹介してきました。

個人的にはすっきりしたコードに満足していました。

ですが専門外の記事を読む読者として自分の立場を置き換えてみたとき「これは果たして分かりやすい記事なのか?」とふと疑問に感じました。

疎い分野であればあるほどなんてことない解説の一文を欲しているのではないか、と。

技術系ブログはスキルの色々な方が訪れるだろうことを想定されます。また私のブログはVBA初心者~中級者向けの情報ばかりなので、それならば出来るだけ初心者に寄り添った形にした方が良いのではないかと思い直しました。

ですので、今回から解説コメントを入れていこうと思います。

スキルがある方からすると「ちょっとコメント多いんじゃないの?」と思うかもしれませんが、ご了承ください。以前の記事に関しては、ちょっとずつコメントを追加していきます。

【スポンサーリンク】



ファイル一覧の一括出力

今回の処理の概要

ファイル一覧を作成する際の基本的なパターンは、

対象フォルダ内のファイル数を把握
ファイル数分、以下を繰り返し
  ファイル情報を取得
  Excelへ書き出し

ですが、Excelへの書き出しを一括で実施するために二次元配列を利用します。

対象フォルダ内のファイル数を把握
ファイル数分、以下を繰り返し
  ファイル情報を取得
  取得したファイル情報を二次元配列へ設定
Excelへ一括書き出し

ファイル一覧作成にフォーカスしているため一覧を作成するのに本来入れるべきチェック処理等は省略しています。よりしっかりした機能として作りこみたい場合は、指定フォルダの存在チェックやExcelシートへの各種設定(選択、初期化など)が必要です。

Excelシートへの出力を一括で実施する理由

ディレクトリ内のファイル数が1000ファイル程度であれば、1件ずつ書き出しをしてもさほど気になりません。が、サブディレクトリ内のファイル情報まで書き出すような処理にすると場合によって処理時間が30分近くかかってしまうことがあります。時間がかかる原因は様々ですが、ファイル情報を1件ずつシートへ出力するというのも処理速度を下げる一つの原因となりえます。

ですので、時間短縮を狙ってまとめて書き出す造りにしています。

おまけでヘッダーも出力してみました。

ヘッダーとして意識しやすいように配列には設定していませんが、配列に含めて出力することも出来ます。わざわざマクロで出力しなくても予め設定(テンプレートシートを作成し、そこに設定しておく等)していても良いと思います。

【スポンサーリンク】



二次元配列のインデックス

配列の添字は「1」から使用する作りにしています。

これは処理的に添え字が1である必要があったからではありません。
後にExcelシートに書き出す際に分かりやすい(感覚的に捉えやすい)からです。

ですので、無理する必要はありません。

添字「0」から利用したい場合は、要素数再定義の内容とcntのカウントアップの記述位置の変更が必要です。

Fileオブジェクトによるファイル情報取得

Fileオブジェクトのプロパティの設定値よりファイルの各種情報を取得しています。

基本的な情報を取得していますが、最終更新日やファイル属性といった情報も取得可能です。

気を付けなければならないのは、このプロパティの中にはその値を取得できるだけでなく、値の設定が可能なものがあります。例えば、ここでファイル名取得に使用しているNameプロパティが該当します。使い方によってファイル名の変更が可能ですのでご注意を。

Excelシートへ書き出し時の範囲選択指定の形式

他のサイトなどは「A1形式」での記載が多いですが、二次元配列を使用したので「R1C1形式」のものも記載しています。

お好きな方をお使いください(使用しない形式はコメントアウト or 削除)

Excelのシートのデフォルト表示は「A1形式」なので「A1形式」の方に馴染みがあるかと思いますが、配列を使い慣れると「R1C1形式」が分かりやすくなったりします。

VBAの最近記事

  1. 【VBA】QRコードを作成したい

  2. 【VBA】CSVを1行ずつ処理したい

  3. Excelシートの最終行を取得したい その1

  4. 【VBA】未だに苦手としていること

  5. 【VBA】モジュール先頭に記述する4種類のOption キーワード ステートメント

関連記事

【スポンサーリンク】




PAGE TOP