シートの存在を確認する時は、コマンド「For Each」を用いて
Excel内のシートを全てループさせる事で
目的のシートが存在するかを調べる必要があります。
【使用対象】
【今回使用マクロ内約】
①変数設定
Dim s As Worksheet
Dim find_name As String
Dim flg As Boolean ※1
find_name = Range("C18").Value ※2
※1:Booleanとは「true」または「false」
以外のデータは入らないデータ型の事。
※2:転記先シート名に抽出されたシート名を
変数「find_name」に設定
②利用者シートが存在するか確認
For Each s In ThisWorkbook.Worksheets ※1
If s.Name = find_name Then ※2
flg = True
Exit For
End If
Next
※1:「For each」は全てのオブジェクトを操作対象とする。
「For」~「Next」までが1連のループ。
オブジェクトをすべて読み終えるまで繰り返し実施する。
※2:読み方は、もしシート「s.Name」がシート「集計イ太郎」だったら
「Exit For」によってループから抜ける。
③シートが存在有無結果
If flg = True Then
MsgBox find_name & "は存在しています。"
End If
If flg = True Then GoTo E1 ※1
If flg = False Then
MsgBox find_name & "は存在しません"
End If
※1:フラグでTrueを出力したら、
メッセージによって「集計イ太郎」のシートが
存在した事を伝えたのち、
下記項目「E1」までジャンプする。
※2:最後まで調べてもTrueが出力されなかったら、
シート「集計イ太郎」は存在しないことを伝えたのち、
マクロを終了させる。
⑤
E1: ※1
End If
End Sub
※1:GoTo E1で飛ばされた先のコマンド。
使いすぎるとマクロが読みづらくなる為、
あまり使いすぎない様にしたい。
【資料】
・シートの存在を確認してから削除や追加するコード
https://mmm-program.com/vba-sheet-exist/#toc4
・For Each~Nextを使った繰り返し処理の方法
https://programming-study.com/technology/vba-for-each/