指定したシートが存在するか調べるには、「ループ処理でシート名を調べる方法」と「オブジェクト変数を使って調べる方法」の2つがあります。
よく使う機能なので関数化しています。シート名だけでなくブック名も指定可能としています。
ループ処理でシート名を調べる
ループ処理で、対象のワークブックにあるシートを1つずつ調べていきます。
その時、シート名を比較することでシートが存在するかチェックしています。
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
'************************************************* '*処理名 :シートの存在チェック(ループ使用) '*引数 :checkBookNm :調べるワークブック名 '* :checkSheetNm :調べるシート名 '*戻り値 :True 存在する、False 存在しない '************************************************* Public Function IsExistSheet_Loop(checkBookNm As String, _ checkSheetNm As String) As Boolean Dim targetSheet As Worksheet '対象シートをセットする変数 Dim ret As Boolean 'チェック結果 '変数をクリア ret = False '繰り返し処理で1つずつ名前を調べる For Each targetSheet In Workbooks(checkBookNm).Worksheets 'シート名が一致した時、シートが存在する If targetSheet.Name = checkSheetNm Then ret = True End If Next '存在チェックの結果を返す IsExistSheet_Loop = ret End Function |
引数
checkBookNm | シートを探す対象のブック名 |
---|---|
checkSheetNm | 存在するか調べるシート名 |
戻り値
True | シートが存在する |
---|---|
False | シートが存在しない |
使い方
ブック「住所録.xlsx」に、シート「営業1課」が存在するか調べています。
1 2 3 4 5 6 7 8 9 |
If IsExistSheet_Loop("住所録.xlsx", "営業1課") = True Then 'シートが存在する時の処理 MsgBox "シートは存在するよ" Else 'シートが存在しない時の処理 MsgBox "シートは存在しないよ" End If |
存在する時は「シートは存在するよ」、存在しない時は「シートは存在しないよ」とメッセージを表示していますが、実際にプログラミングをする時は、具体的な処理をコーディングしてください。
オブジェクト変数を使って調べる
オブジェクト変数に、存在するかチェックするシートを格納して調べます。
この時「シートが存在しないと、オブジェクト変数に格納できずにNothingになる」ことを利用して、シートが存在するか調べています。
ループで1つずつ調べるのがナンセンスに感じる人は、少し上級テクニックになりますが、こちらの方法がおすすめです。
オブジェクト変数がよくわからない人は「シートをとりあえず保存する場所」くらいの認識でOKです。
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Public Function IsExistSheet_Object(checkBookNm As String, _ checkSheetNm As String) As Boolean Dim targetSheet As Worksheet '対象シートをセットする変数 Dim ret As Boolean 'チェック結果 'エラー無視 On Error Resume Next 'オブジェクト変数に、対象シートをセットする Set targetSheet = Workbooks(checkBookNm).Worksheets(checkSheetNm) 'エラー無視を解除 On Error GoTo 0 'オブジェクト変数に、シートがセットされているかどうかで存在を判定 If targetSheet Is Nothing Then ret = False Else ret = True End If '存在チェックの結果を返す IsExistSheet_Object = ret End Function |
引数、戻り値は最初に説明した「ループ処理でシート名を調べる方法」と同じです。
関数名はIsExistSheet_Loop、IsExistSheet_Objectと違います。
引数
checkBookNm | シートを探す対象のブック名 |
---|---|
checkSheetNm | 存在するか調べるシート名 |
戻り値
True | シートが存在する |
---|---|
False | シートが存在しない |
使い方
ブック「住所録.xlsx」に、シート「営業1課」が存在するか調べています。
1 2 3 4 5 6 7 8 9 |
If IsExistSheet_Object("住所録.xlsx", "営業1課") = True Then 'シートが存在する時の処理 MsgBox "シートは存在するよ" Else 'シートが存在しない時の処理 MsgBox "シートは存在しないよ" End If |