エクセルVBAで使用するコードの備忘録。VBAで指定した名称のワークシートが存在するかどうかを判定するコード。2通りの方法をご紹介します。ほとんど違いはありませんが、指定名称内の大文字・小文字を区別するかしないかという微妙な違いが存在します。
方法1:ワークシートは参照時のエラーを検出
指定した名称のワークシートが存在しないかどうか判定するには、そのワークシートをオブジェクトとして取得しようとした際にエラーが出るかどうかで判定できます。存在する名称のワークシートであれば何の問題もなくオブジェクトを設定できますが、存在しなければ即座にエラーが返されます。
ちなみにこちらの方法では指定した名称に含まれる英字の大文字・小文字は区別されません。例えば「Sheet1」という名前のワークシートが存在する状態で、「sheet1」という名前のワークシートが存在するかどうかをこの方法で判定しようとすると「存在する」という結果が返ってきます。もし大文字・小文字を区別して判定したい場合は、下記でご紹介する方法2の方を試してください。
ワークシートの存在を判定する(エラー判定)
'--- 指定ワークシート名が存在すればTrueを返す関数 ---'
Public Function IsWorksheetExist(sheetName As String) As Boolean
Dim ws As Worksheet
On Error GoTo Err
'--- エラーが発生しなければワークシートは存在する ---'
Set ws = ThisWorkbook.Worksheets(sheetName)
IsWorksheetExist = True
Exit Function
Err:
'--- エラー発生時はワークシートは存在しない ---'
IsWorksheetExist = False
Exit Function
End Function
方法2:ワークシート名を全て取得して判定
もう一つの方法は、ブックに存在するすべてのワークシート名を取得して、各ワークシート名のどれかと指定した名称が一致するかどうかを判定する方法です。こちらの方が直感的かもしれません。
また、こちらの方法の特徴としては、ワークシート名に含まれる英字の大文字・小文字を区別して判定できるという点があります。厳密に指定した名称のワークシートが存在するかどうか判定したい場合にはこちらの方法を使う方がよいと思います。
ちなみに、ある文字列を含むワークシートだけを抽出する場合もほとんど同じステップで行うことが可能です(詳細はこちら)。
ワークシートの存在を判定する(全シート名を比較)
'--- 指定ワークシート名が存在すればTrueを返す ---'
Public Function IsWorksheetExist(sheetName As String) As Boolean
'--- 全てのワークシートでループ ---'
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
'--- 名前が一致すれば処理を終える ---'
If (ws.Name = sheetName) Then
IsWorksheetExist = True
Exit Function
End If
Next ws
'--- 途中で抜けなければシートは存在しない ---'
IsWorksheetExist = False
Exit Function
End Function