3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[VBA]指定したワークシートが存在するかチェックするマクロ

Last updated at Posted at 2021-05-02

[0]はじめに

Zitanです。
実務でマクロを書く時に、「インデックスが有効範囲にありません」というエラーに出会ったことはないでしょうか。
今回は指定したワークシートが存在するか事前にチェックするマクロ(自作関数)です。
エラーハンドリング的な用途に使える部品なので必要に応じてご利用下さい。
プログラムは一から全部作るより誰かが作った便利な部品を組み合わせたほうが開発効率が上がります。

[1]コード

必要に応じてカスタマイズは必要ですが、このまま使うことができます。

現在開いているExcelにSheet4が存在するかチェックして結果をメッセージボックスで表示する
Sub シートの存在チェック()
  If flgSheetExsist("Sheet4") = True Then
    MsgBox "存在します"
  Else
    MsgBox "存在しません"
  End If
End Sub

Function flgExsistSheet(ByVal WorkSheetName As String) As Boolean
Dim sht As Worksheet
  For Each sht In ActiveWorkbook.Worksheets
    If sht.Name = WorkSheetName Then
        flgExsistSheet = True
        Exit Function
    End If
  Next sht
flgExsistSheet = False
End Function

Subプロシージャは動作確認のために書いているコードなので用途に応じてカスタマイズして下さい。
流用できる部品としての部分は、Function以下です。
関数名が「flgSheetExsist」です。戻り値がBoolean型(True/False)なので関数名の頭にflg(フラグ)という名称をつけています。

使い方ですが、Subプロシージャ内でflgSheetExsist("シート名")と入力します。
"シート名"が引数です。文字列なので”(ダブルクォーテーション)で囲む必要があります。

※「y=x+1」であれば、xが引数でyが戻り値という関係性になります。

[2]コードの解説

関数の部分について
Function flgExsistSheet(ByVal WorkSheetName As String) As Boolean
Dim sht As Worksheet
  For Each sht In ActiveWorkbook.Worksheets
    If sht.Name = WorkSheetName Then
        flgExsistSheet = True
        Exit Function
    End If
  Next sht
flgExsistSheet = False
End Function

関数は、 Function 関数名(引数名 As 引数の型) As 戻り値の型 という書き方をします。
※引数の前に「Byval(値渡し)」を書かないと、デフォルトでは「ByRef(参照渡し)」になります。
 今回は特に影響ないのですが、関数実行後に、事前に宣言した変数が上書きされたくない場合、特別な理由がない場合は、「Byval(値渡し)」にします。

引数名ですが、検索するワークシート名を文字列型で渡します。
戻り値は、検索したワークシート名が存在するか真偽値で返します。

シート名の検索方法は、For Each文(コレクション処理)を使っています。
アクティブなワークブック内のすべてのワークシートに対して、引数で指定したワークシート名が存在するか探します。
※For文で、「Sheets.Count」で調べてもOKです。

見つかったらフラグをTrueにして関数から抜け出します。
見つからなければフラグをFalseにして関数が終わります。

[3]まとめ

いかがでしょうか。
エラーハンドリングの部品として意外と使用します。

3
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?