【Excel VBA】シートを検索する処理の実装方法

VBA

こんにちは、おくやんです。

このブログでは、開発に役立つノウハウを実践的なコード例と共に紹介しています。

Excel上のシートを検索する処理をVBAで実装したい!
だけど、書き方がわからない。。。

今回は、このようなお悩みを解決します。

本記事の内容

VBAでシート検索を実装する3パターン
サンプルコードの紹介

今回はExcel VBAで、シートを検索する処理の実装方法についてまとめました。

シート名を検索する方法を覚えることで、複数シートを持つExcelファイルもVBAで簡単に操作できるようになります。

ぜひ、本記事を参考に実装方法をマスターしてください。

VBAでシート検索を実装する3パターン

VBAでシート検索を実装する3パターン

シート検索する処理の実装方法を紹介します。

今回紹介するのは下記の3つです。

シート検索処理の実装方法

・全シートをループして検索
・On Error Resume Nextを利用して検索
・クラスモジュールを利用して検索

それぞれ解説します。

全シートをループして検索

最初は全シートをループして検索する方法です。

この方法ではWorkSheetsコレクションからWorkSheetオブジェクトを1つずつ取り出し、ループしていきます。

' ファイルオープン
Dim Wb As Workbook: Set Wb = workbooks.Open(FileName:=path, ReadOnly:=True, UpdateLinks:=False)

' シート検索
Dim hasSheet As Boolean
Dim Ws As Variant
For Each Ws In Wb.Worksheets
  ' シート名と検索対象シート名が一致するか確認
  If Ws.name = sheetName Then hasSheet = True
Next

' 結果表示
If hasSheet Then
  MsgBox "〇検索対象シートは存在します"
Else
  MsgBox "×検索対象シートは存在しません"
End If

検索対象のシート名と各シート名を比較して、見つける方法です。

一番シンプルな方法となります。

On Error Resume Nextを利用して検索

続いては、On Error Resume Nextを利用して検索する方法です。

On Error Resume Nextを利用することで、エラーが発生してもそのまま処理を継続することができます。

エラーが発生した場合は、Err.Numberに情報が残ります。

これを利用して、検索を行います。

' ファイルオープン
Dim Wb As Workbook: Set Wb = workbooks.Open(FileName:=path, ReadOnly:=True, UpdateLinks:=False)

' エラーを無視する
On Error Resume Next

' シート検索
Dim Ws As Worksheet: Set Ws = Wb.Worksheets(sheetName)
If Err.Number = 0 Then
  MsgBox "〇検索対象シートは存在します"
Else
  MsgBox "×検索対象シートは存在しません"
End If

' エラー処理を通常に戻す
On Error GoTo 0

検索対象のシートが存在する場合はエラーが発生しません。

反対に検索対象のシートが存在しない場合はエラーが発生します。

このように、On Error Resume Nextを利用して検索することが可能です。

クラスモジュールを利用して検索

最後はシート検索の機能を持ったクラスモジュールを利用する方法です。

以下のクラスモジュールを利用します。

>> 【Excel VBA】開発を効率化!外部ファイルを扱うクラスモジュール

HasSheet関数を呼び出すことで検索が可能です。

' クラスモジュールのインスタンスを生成
Dim libWb As LibWorkBook: Set libWb = New LibWorkBook
Call libWb.OpenFileReadOnly(path)

' シート検索
If libWb.HasSheet(sheetName) Then
  MsgBox "〇検索対象シートは存在します"
Else
  MsgBox "×検索対象シートは存在しません"
End If

シート検索処理のサンプルコードを紹介

サンプルコードの紹介

今回はクラスモジュールを利用して、指定されたExcelファイルに検索対象のシートが存在するか確認するプログラムを紹介します。

以下からサンプルプログラムをダウンロードできますので、是非触ってみて下さい。

note(ノート)

こんにちは、おくやんです。 Excel VBAの開発効率を大幅に向上させる、自作のライブラリクラスをご紹介しています。 …

Sub main()
  ' ファイルパスを取得
  Dim path As String: path = ActiveSheet.Cells(6, 3)
  
  ' 検索対象シート名を取得
  Dim sheetName As String: sheetName = ActiveSheet.Cells(9, 3)

  Application.ScreenUpdating = False
  On Error GoTo ERROR_HANDLER

  ' クラスモジュールのインスタンスを生成
  Dim libWb As LibWorkBook: Set libWb = New LibWorkBook
  Call libWb.OpenFileReadOnly(path)
  
  ' シート検索
  If libWb.HasSheet(sheetName) Then
    MsgBox "〇検索対象シートは存在します"
  Else
    MsgBox "×検索対象シートは存在しません"
  End If
  
  ' ファイルを閉じる
  If Not libWb.Wb Is ThisWorkbook Then libWb.CloseFileWithoutSave
  
  Application.ScreenUpdating = True
  Exit Sub

ERROR_HANDLER:

  MsgBox "対象ファイルが存在しません"
  If Not libWb.Wb Is ThisWorkbook Then libWb.CloseFileWithoutSave
  Application.ScreenUpdating = True

End Sub

指定されたExcelファイルをOpenFileReadOnly関数で開きます。

開いたファイル上に検索対象シートがあるかをHasSheet関数でチェックし、結果を表示するプログラムです。

まとめ: VBAでシート検索処理を実装しよう

まとめ VBAでシート検索処理を実装しよう

今回はシート検索する処理について複数の実装方法を紹介しました。

実装方法は下記となります。

シート検索処理の実装方法

・全シートをループして検索
・On Error Resume Nextを利用して検索
・クラスモジュールを利用して検索

クラスモジュールについては下記で詳しく紹介していますので、サンプルと一緒ににチェックしてみて下さい。

note(ノート)

こんにちは、おくやんです。 Excel VBAの開発効率を大幅に向上させる、自作のライブラリクラスをご紹介しています。 …

最後まで読んでいただき、ありがとうございます。


最新情報をチェックしよう!