シートの存在確認

VBAでシートの存在確認を行なう方法。
存在を確認したいシートをシートオブジェクトに格納し、格納出来れば(Setステートメントでエラーが発生しなければ)Trueを、出来なければ(エラーが起きれば)Falseを返す。

コード

' 引数 argSheetName が、存在を確認したいシートの名称
' 第2引数(存在確認を行なうブック)を渡さなければ、ActiveWorkbookに対して、存在確認を行なう
Function IsSheetExists(argSheetName As String, Optional argWorkbook As Workbook) As Boolean

    Dim bk As Workbook
    Dim sh As Worksheet

    IsSheetExists = False

    If argWorkbook Is Nothing Then
        Set bk = ActiveWorkbook
    Else
        Set bk = argWorkbook
    End If

    On Error Resume Next
    Set sh = bk.Worksheets(argSheetName)
    On Error GoTo 0

    If Not sh Is Nothing Then IsSheetExists = True

    Set sh = Nothing: Set bk = Nothing

End Function

対象のブックのシートコレクションをループしてシート名を突き合わせて…って方法もあるけど、こっちの方が速い*1んでないでしょうか。
この方法で存在確認した後に、そのシートをオブジェクト変数に格納する…って事を自分はよくやるので、何の為の関数なんだか…って思わなくもないんだけど。(;^ω^)

VBAVBAでも、ExcelなのかAccessなのか、はたまたWordなのかそれ以外なのかを分けてカテゴライズしないと駄目だな。単にVBAでしかカテゴライズしてないし、エントリのタイトルにもアプリ名入れてないし。そのうち、カテゴリーを整理しよう。

*1:シートの総数やシートの位置にもよるでしょうが。確認してないけど。