はじめに
今回は、シートの存在チェックについて解説します。
シートの追加やシート名の変更などを実施する際に、ブック内に同名のブックがあるとエラーとなってしまいます。
そういったエラーを回避する手段としてご使用ください。
なお、本記事では2パターンの存在チェック方法について解説します。ぜひ最後までお付き合いください!
この記事を読むメリット
- シートの存在チェック(ブック内に同名のシート名があるかをチェックする方法)について解説します。
- コピペで使える実践的なサンプルコードを掲載しています。
前提
シートの存在チェックには、2つのパターンがあるので解説します。
- ブック内のシートをループしてチェックする
ブック内のシートをすべてループして、指定したシート名が無いかをチェックします。
直観的に理解しやすいソースコードになるため、可読性が良いです。
- 変数にシートを格納してエラーが出るかをチェックする
変数にシートを格納する時、存在しないシートを格納しようとするとエラーが発生します。
上記挙動を逆手に取り、シートの存在を確認します。
直観的に分かりづらいので可読性は落ちますが、ループが不要となるため処理が速いです。
りゅう
それぞれのパターンのサンプルコードを解説していきます。
サンプルコード
シートの存在チェック(ブック内のシートをループしてチェックする)
mainプロシージャから、Active状態のブックに対して Sheet1というシートが無いかをチェックします。
サンプルコード
Public Sub main()
' Sheet1というシートが存在するかをチェックする
If checkSheetExist(ActiveWorkbook, "Sheet1") Then
' シートが存在する場合
MsgBox ActiveWorkbook.Name & "に Sheet1が存在します。", vbInformation
Else
' シートが存在する場合
MsgBox ActiveWorkbook.Name & "に Sheet1が存在しません。", vbInformation
End If
End Sub
'****************************************************************
'* メソッド名:シート存在チェック
'* 引数:wbObj … 検索対象のブック
'* 引数:searchSheetName … 検索するシート名
'* 戻り値:シートが存在:True / シートが存在しない:False
'****************************************************************
Private Function checkSheetExist(ByVal wbObj As Workbook, ByVal searchSheetName As String) As Boolean
Dim wsObj As Worksheet ' Worksheetオブジェクト
' 戻り値として False をセット
checkSheetExist = False
' Worksheet分ループする
For Each wsObj In wbObj.Worksheets
If wsObj.Name = searchSheetName Then
' シート名が一致する場合、Trueを返却してメソッドを抜ける
checkSheetExist = True
End If
Next wsObj
End Function
シートの存在チェック(変数にシートを格納してエラーが出るかをチェックする)
mainプロシージャから、Active状態のブックに対して Sheet1というシートが無いかをチェックします。
「On Error Resume Next」を利用して、エラー発生時も無視して進めることにより、存在判定を実施しています。
サンプルコード
Public Sub main()
' Sheet1というシートが存在するかをチェックする
If checkSheetExist(ActiveWorkbook, "Sheet1") Then
' シートが存在する場合
MsgBox ActiveWorkbook.Name & "に Sheet1が存在します。", vbInformation
Else
' シートが存在する場合
MsgBox ActiveWorkbook.Name & "に Sheet1が存在しません。", vbInformation
End If
End Sub
'****************************************************************
'* メソッド名:シート存在チェック
'* 引数:wbObj … 検索対象のブック
'* 引数:searchSheetName … 検索するシート名
'* 戻り値:シートが存在:True / シートが存在しない:False
'****************************************************************
Private Function checkSheetExist(ByVal wbObj As Workbook, ByVal searchSheetName As String) As Boolean
Dim wsObj As Worksheet ' Worksheetオブジェクト
' エラーを無視する設定
On Error Resume Next
' 変数にシートを代入する
Set wsObj = wbObj.Worksheets(searchSheetName)
If Err.Number = 0 Then
' エラーが発生しない場合(シートが存在)
checkSheetExist = True
Else
' エラーが発生する場合(シートが存在しない)
checkSheetExist = False
End If
' エラー無視設定を解除する
On Error GoTo 0
End Function
最後に
今回は、シートの存在チェックについて解説しました。
シートの追加やシート名の変更などを実施する際には必ず実施しましょう。
2つのパターンをご紹介しましたが、処理的な速さはほとんど変わらない為、個人的には サンプルコード – シートの存在チェック(ブック内のシートをループしてチェックする)が好きです。
本記事が、皆さんのお力になれば幸いです!
コメント
コメント一覧 (1件)
[…] 【Excel VBA】シートの存在チェックについて 今回は、シートの存在チェック… […]