リチャードの会社は、他の多くの会社と同様に、Excelをかなり使用しています。実際、彼らは何千年にもわたって収集した何千ものExcelワークブックを持っています。リチャードは、各ワークブックを個別に開いて検査する必要なしに、それらのワークブックのどれにVBAマクロが含まれているかを見つける方法を必要としています。彼はこれを行う簡単な方法があるかどうか疑問に思います。

マクロを含むすべてのワークブックを見つけるためのかなり単純な方法の1つは、XLSMまたはXLSB拡張子を使用するファイルを探すことです。

マクロを含むブックは、これらの拡張子を使用してファイルに保存する必要があります。 100%絶対確実というわけではありませんが、開始するのに適した場所です。

Windows(Excel以外)の検索機能を使用することもできます

「EndSub」または「EndFunction」というテキストを含むファイルを検索します。 VBAプロシージャでは、最後にこれら2つのステートメントのいずれかを使用する必要があるため、これにより、潜在的な候補ワークブックがすばやく特定されます。

レガシーワークブック(Excel 2003のファイル形式を使用して開発されたもの)を使用している場合は、実際に各ワークブックの内部を調べる必要があります。これはプログラムで実行できます。つまり、フォルダー内の各ブックを開き、その中にマクロがあるかどうかを調べるマクロを作成できます。

例として、ディレクトリ内の各ファイルをステップスルーし、ファイルがExcelブックであるかどうかを判断するマクロを作成できます。次に、ファイルを開いて、VBAプロジェクトが含まれているかどうかを確認できます。

Sub FindMacros()

Dim sPath As String     Dim sFile As String     Dim sFoundFiles As String

'specify directory to use - must end in "\"

sPath = "C:\MyData\Excel Data\"



sFile = Dir(sPath)

Do While sFile <> ""

If InStr(sFile, ".xls") > 0 Then             Workbooks.Open (sPath & sFile)

If Workbooks(sFile).HasVBProject Then                 sFoundFiles = sFoundFiles & sFile & vbCrLf             End If             Workbooks(sFile).Close (False)

End If         sFile = Dir     ' Get next filename     Loop     If Len(sFoundFiles) = 0 Then         MsgBox "No workbooks found that contain macros"

Else         sFoundFiles = "The following workbooks contain macros:" & _           vbCrLf & vbCrLf & sFoundFiles         MsgBox sFoundFiles     End If End Sub

この例では、HasVBProjectプロパティ(Excel 2007のExcelオブジェクトモデルに導入されています)を使用して、ファイルにマクロがあるかどうかを判断します。完了すると、マクロは、マクロを含むワークシートを一覧表示するメッセージボックスを表示します。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(12466)は、Microsoft Excel 2007、2010、2013、および2016に適用されます。

Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります: