VBAと日々のこぼれ話

  1. VBA

【VBA】同じ階層体系のフォルダを量産したい

同じ階層体系のフォルダを量産するには

もし定期的に同じ階層体系のフォルダを作るとしたら、雛型フォルダ(サブフォルダ等が作りこまれている)をコピーして名前を変更してあげるという感じでしょうか。この作業が頻度も低くく作成するフォルダ数も少ないのであれば、それで十分だと思います。また高頻度でその作業をしている場合でも、フォルダ作成のみであればシェルスクリプトで事足りると思います。

ですが、データ集計・出力などがメイン処理での一部でフォルダ作成がある場合もあります。そんな時は、やはりVBAで処理を作ってあげておくとやはり便利です。

サンプルコードについて

難易度・頻出度の優しい・高いと思われる順番で3パターンを並べています。

1.ループで1階層ずつフォルダ作成
2.再帰処理でフォルダ作成
3.WindowsAPI「SHCreateDirectoryEx」でフォルダ作成

コードが長くなるのでエラー・チェック処理(WindowsAPIの戻り値判定も)については全て割愛しています。実際は、チェック処理を設定すべきですのでご注意ください。フォルダ操作系のエラー処理についてはいずれどこかでまとめたいとは思っています。

またWindowsAPIの利用では戻り値判定を割愛するために敢えてSubで宣言しています。

サンプルコード実行後のフォルダ体系図イメージ図

任意の場所にあるフォルダ内(2018年用と意味合い)に同じ階層体系のフォルダを12個(各月用)作成し、更にその各月フォルダ内には同一名の複数フォルダを作成します。

【スポンサーリンク】



1.ループで1階層ずつフォルダ作成

ベーシックな書き方です。
2や3のコードはこなれた感じがしますが、まずここのループ処理がしっかり出来てから進むべきかと思います。

そもそもフォルダを作成してその中にフォルダを作成してその中にフォルダを作成してその中に・・・といったマトリョーシカのような構造のフォルダ体系だと再帰処理でフォルダ作成してあげた方が見栄えが良いですが、階層が深くないならループ処理で十分です。

サンプルコード

【スポンサーリンク】



2.再帰処理でフォルダを作成

再帰処理はコードがすっきりするのですが、使い慣れていないと読みにくいですし、ンプルで挙げたような2階層程度であればコードの長さも変わらないので圧倒的なメリットを感じません。

また再帰処理は終了条件を間違ったりすると悲惨なことになるので、1行ずつのデバッグ検証は必須です。

サンプルコード

3.WindowsAPI「SHCreateDirectoryEx」でフォルダ作成

今回もっともすっきりしたコードになりましたが、実務で使ったことはほぼありません。
また引数の設定値(ウィンドウハンドル指定、作成したいファイルパス、セキュリティ属性)・パスの長さの制約があったり使い方に見極めが必要です。

WindowsAPIの設定については、以下の記事も参考にしてください。

サンプルコード

 

WindowsAPIは、何分数が多いしどんどん増えていくのため定番のものばかりを使って私の中では弱い分野でもあります。とは言っても少しでも情報をと思い、以前「WindowsAPIの引数の末尾で見かける『&(アンパサンド)』は何?」と聞かれることがあったのを思い出したのでちょっと書いてみました。
実はWindowsAPI利用時に限った話ではないのですが、今はこのような使い方くらいしかWebでは見かけないので知らない人も多いようです。

【スポンサーリンク】



WindowsAPIの引数末尾で見かける『&』とは

まず、VBAでは「&」は文字列連結時に利用する演算子だという説明がされます。

ですが、今はもう裏技というか殆ど使われていない(見かけない)使い方があります。

それは値の末尾に設定することでLong型だと明示するといった使い方です。

サンプルコードでいうと「0」は「0はLong型だからね!」と明示していることになります。
型の明示のためなので「&」を付けなくても問題ないのですが、説明のために敢えてつけています。

この特定のデータ型だと明示的に示す記号文字を型宣言文字(型文字、データ型文字とも呼ぶ)と呼びます。
Long型の他にも型宣言文字はありますし、また値のデータ型を明示するだけでなく変数宣言時のデータ型に使うことができます。

Dim StringType$   ’Dim StringType As Stringと同義
Dim IntegerType%  ’Dim IntegerType As Integerと同義
Dim LongType&    ’Dim LongType As Longと同義

 

ただこの型宣言文字は、VBAの元となったBasic言語の名残(書き方として古い)であるし可読性が下がるので、知識として知っていれば積極的に使用する必要はないと思います。

VBAの最近記事

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

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

  3. 【VBA】同じ階層体系のフォルダを量産したい

  4. VBAの腕を知るための3つの短い質問を考える

  5. 【VBA】ExcelやテキストへDAO・ADO接続する際に使用するISAMフォーマット一覧…

関連記事

【スポンサーリンク】




PAGE TOP