こんにちは、おくやんです。
このブログでは、開発に役立つノウハウを実践的なコード例と共に紹介しています。
だけど、書き方がわからない。。。
今回は、このようなお悩みを解決します。
本記事の内容
今回はExcel VBAで、シートを検索する処理の実装方法についてまとめました。
シート名を検索する方法を覚えることで、複数シートを持つExcelファイルもVBAで簡単に操作できるようになります。
ぜひ、本記事を参考に実装方法をマスターしてください。
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ファイルに検索対象のシートが存在するか確認するプログラムを紹介します。
以下からサンプルプログラムをダウンロードできますので、是非触ってみて下さい。
こんにちは、おくやんです。 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でシート検索処理を実装しよう
今回はシート検索する処理について複数の実装方法を紹介しました。
実装方法は下記となります。
シート検索処理の実装方法
・On Error Resume Nextを利用して検索
・クラスモジュールを利用して検索
クラスモジュールについては下記で詳しく紹介していますので、サンプルと一緒ににチェックしてみて下さい。
こんにちは、おくやんです。 Excel VBAの開発効率を大幅に向上させる、自作のライブラリクラスをご紹介しています。 …
最後まで読んでいただき、ありがとうございます。