和風スパゲティのレシピ

日本語でコーディングするExcelVBA

ブック・ファイル

ファイルを削除する - Killステートメント

ファイルを削除する際に使用するKillステートメントの使い方を解説します。Kill 削除したいファイルのパス で実行でき、Excel以外の全種類のファイルも削除できます。また、ワイルドカード*を使用して、該当ファイルの一括削除も可能です。

FileSystemObject入門-参照設定と変数宣言

ファイル・フォルダ操作の便利ツール「FileSystemObject」を使うための事前準備として行う、「Microsoft Scripting Runtime の参照設定」と、「FileSystemObjectのオブジェクト変数のSet」の2つの設定について、やり方を解説していきます。

FileSystemObjectの呼び出しを短縮する方法

FileSystemObjectはとても便利なのですが、CreateObjectやNewを使った参照・宣言部分が面倒です。これを簡単に行う方法として、Public FSO As New FileSystemObjectとPublic変数でNewまで済まし、全プロシージャで使いまわす方法があります。

フォルダを部分一致(ワイルドカード)で検索する

フォルダを部分一致で検索する方法を解説します。フォルダの検索にはFileSystemObjectを使うのがおすすめです。Dir関数はワイルドカードが使えますが、引数にvbDirectoryを指定してもファイルまで一緒に検索するためコードが煩雑になります。

ファイルを部分一致(ワイルドカード)で検索する

ファイル名を部分一致検索する方法を解説します。単純な部分一致であればDir関数にワイルドカード(*?)を指定することで実行できます。文字数や文字種を絞った部分一致まで行いたい場合は、候補のファイルすべてをLike演算子で比較します。

DirとFSO.FolderExistsの違い

フォルダが存在するか判定する、Dir関数(vbDirectory)と、FileSystemObject.FolderExistsメソッドの違いを解説します。一番の違いは返り値で、True/Falseを返すFolderExistsに対し、フォルダ名を返すDir関数は="",<>""で判定する必要があります。

DirとFSO.FileExistsの違い

ファイルが存在するか判定する、Dir関数とFileSystemObject.FileExistsメソッドの違いを解説します。まずは返り値が異なり、Dir関数は=""<>""での判定が必要になります。また、Dir関数はワイルドカード*を使用した部分一致検索が可能です。

FileSystemObject.FileExistsメソッド

FileSystemObjectにてファイルの存在を判定する、FileExistsメソッドについて解説します。If FSO.FileExists(判定したいファイルのパス) Thenが基本形です。返り値もBooleanとわかりやすい仕様ですが、Dir関数と違ってワイルドカードは使えません。

FileSystemObject入門-FSOって何が便利なの?

ファイル・フォルダを扱うFileSystemObjectについて、何が便利で、何のために使うオブジェクトなのかを解説します。FSOとはファイル管理の便利ツール集であり、「フォルダやファイルをオブジェクトとして扱うことができる」ことが特長です。

FileSystemObject.FolderExistsメソッド

FileSystemObjectにてフォルダの存在を判定する、FolderExistsメソッドについて解説します。If FSO.FolderExists(判定したいフォルダのパス) Thenが基本形です。引数もフォルダパスひとつで、返り値もBooleanと、仕様がわかりやすいメソッドです。

深い階層のフォルダ作成を再帰関数で行う

MkDirステートメントやFileSystemObjectのCreateFolderメソッドは、作りたいフォルダの親フォルダがないとエラーになります。この対策は[\]でSplitしてからのForEach文がストレートですが、再帰関数を使用した方法もあるため紹介します。

FileSystemObject.CreateFolderメソッド

FileSystemObjectにてフォルダを作成する、CreateFolderメソッドについて解説します。作りたいフォルダのパスを渡すとそのフォルダを作成してるメソッドで、通常実行する分には、MkDirステートメントとエラー含めてほとんど同じ動きをします。

MkDirとFSO.CreateFolderの違い

フォルダを作成するときに使用する、MkDirステートメントとFileSystemObject.CreateFolderメソッドの違いを解説します。両者はほとんど同じものと思ってOKで、引数、省略時のカレントフォルダ指定、エラーの発生条件も全く同じ仕様です。

フォルダ構成表からフォルダを一括生成するマクロ

シート上に記載したフォルダ構成表を元に各フォルダを一括で作成していくマクロを紹介します。ツールとしても便利ですが、「プロシージャ分割」「汎用関数」のとてもいい題材ですので、コードの参考としてもご活用ください。

フォルダを作成する - MkDirステートメント

フォルダを作成する場合は、MkDirステートメントを使用します。引数が「作るパス」しかない単純なステートメントですが、すでにあるフォルダを作ろうとするとエラーになる点と、すでにあるフォルダ内にしか作れない点にご注意ください。

セルの値からフォルダを一括で作成する

セルの値を元に、フォルダを一括で作成するコードを紹介します。対象のセルをFor文やFor Each文ですべて取得、「親フォルダパス & "\" & セル値」で目的のフォルダパスを生成し、MkDirステートメントで実際のフォルダを作成します。

重複しないよう連番付きでフォルダを作成する

必ず新しいフォルダが必要なマクロにおいて、もし同名のフォルダが存在した場合は連番を付けて新規フォルダを作成するコードを解説します。処理の流れは単純で、フォルダ名 & iが存在しないフォルダ名になるまでiを増やしていくコードです。

深い階層まで一気にフォルダを作成する

フォルダを作成する「MkDirステートメント」は、フォルダを1つずつしか作成できないため、親フォルダがないフォルダ作成を指示するとエラーになります。このエラーを考慮し、上の階層から順にフォルダを作成していくコードを解説します。

マクロのロック(赤帯)を一時的に解除するマクロ

2022年から赤帯になったマクロブックへの警告とロックは、プロパティ設定、信頼済みサイト設定ほかに、Workbooks.Openで開くことでも解除できます。これを利用してActiveWorkbookを開き直すことで、一時的のこのロックを解除できます。

フォルダが存在するか判定する-Dir/FSO.FolderExists

フォルダが存在するか調べる方法を解説します。Dir関数の引数にフォルダパスとvbDirectoryを渡して判定します。ただしこれは他のDir関数使用中は実行できないため、その場合はFileSystemObjectのFolderExistsメソッドを使用します。

読取専用ブック.Saveは警告なく別ブックに保存される

読取専用ブックにSaveメソッドを実行した場合、無警告でカレントディレクトリに保存されてしまいます。上書き保存したのにブックが更新されていないかったり、ファイル置き換えダイアログがでた場合は、この仕様を疑ってください。

ブックを上書き保存する - Workbook.Save

ブックを上書き保存する場合は、 WorkbookオブジェクトのSaveメソッドを使います。読取専用か調べるReadOnlyプロパティ、保存ブックをシートから取得するParentプロパティ、保存して閉じるCloseメソッドも一緒に覚えるとよいでしょう。

ブックを非表示にして保存して閉じるマクロ

ブックを非表示にして保存して閉じるマクロを紹介します。非表示ブック内のモジュールを選択した上で、イミディエイトウィンドウでThisworkbook.Close Trueを実行します。よく使う方は、非表示もセットで汎用マクロにしておきましょう。

ブックを上書き保存して閉じる-Workbook.Close

ブックを上書き保存して閉じる方法を解説します。ブックを上書き保存して閉じる処理は、Closeメソッドの第1引数SaveChangeにTrueを指定することで、1行のコードで簡単に実行することができます。

ブックを閉じる - Workbook.Close

ブックを閉じるときは、Workbook.Closeメソッドを使用します。引数SaveChangesがTrueの場合は上書き保存をして閉じ、Flaseの場合は保存をせずに閉じます。この引数を省略した場合は、保存するかをユーザーに確認してから閉じます。

ブックを保護する - Workbook.Protect

ブックの保護を設定/解除する方法を解説します。WorkbookオブジェクトのProtectメソッドを使います。ブックの保護という名称ですが、実際に禁止される操作は、ワークシートの追加、表示/非表示、削除、移動、名前変更になります。

ブックを保存せずに閉じる - Workbook.Close

ブックを保存せずに閉じるコードを解説します。Closeメソッドの引数SaveChangesをFalseに指定する方法、DisplayAlertsをOFFにしてから閉じる方法、保存済フラグ(Savedプロパティ)をTrueにしてから閉じる方法の3パターンがあります。

アクティブブックの保存フォルダを開くマクロ

現在のブックが保存されているフォルダを、エクスプローラーで開くマクロを紹介します。「今作業してるファイルと同じフォルダにあるファイルを開きたい」をワンクリックでやるためのマクロですね。Shell関数1行で簡単に実装できます。

指定のフォルダをエクスプローラーで開く

指定のフォルダをエクスプローラーで開く方法を紹介します。この処理は、Shell "C:\windows\explorer.exe " & フォルダパス & "\", vbNormalFocusで実装できます。局所的な使い方のコードですので、おまじないだと思って使って構いません。

パスからフォルダ名やファイル名を取得する

パスからファイル名・フォルダ名を取得する方法を解説します。InstrRev関数で一番右の「\」を検索し、Midでその右側を取ってくることで目的の文字列を取得できます。また、Dir関数の性質を使ってDir(パス)から求めることもできます。