シートの存在確認
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んでないでしょうか。
この方法で存在確認した後に、そのシートをオブジェクト変数に格納する…って事を自分はよくやるので、何の為の関数なんだか…って思わなくもないんだけど。(;^ω^)
で
VBAはVBAでも、ExcelなのかAccessなのか、はたまたWordなのかそれ以外なのかを分けてカテゴライズしないと駄目だな。単にVBAでしかカテゴライズしてないし、エントリのタイトルにもアプリ名入れてないし。そのうち、カテゴリーを整理しよう。
*1:シートの総数やシートの位置にもよるでしょうが。確認してないけど。