【Excel VBA】アクティブシートが「ワークシート」かどうかを判定する方法

VBAマクロでRange("A1").Valueのようにセルを操作するコードを書いた場合、もしユーザーが「グラフシート」をアクティブにした状態でそのマクロを実行すると、セルが存在しないためエラーになってしまいます。

このようなエラーを未然に防ぐには、処理の実行前に**「現在アクティブなシートは、本当にセル操作が可能なワークシートか?」**を判定するのが有効です。

この記事では、アクティブシートの種類を判別するための2つの基本的な方法を解説します。


目次

方法1:.Type プロパティを使う方法

Sheetオブジェクトが持つ.Typeプロパティは、そのシートの種類を示す定数を返します。この値がワークシートを示すxlWorksheetと一致するかどうかで判定します。

コードと解説

Sub CheckSheetType_ByProperty()

    ' アクティブなシートの種類を判定します
    If ActiveSheet.Type = xlWorksheet Then
    
        ' ワークシートだった場合の処理
        MsgBox "アクティブなのはワークシートです。" & vbCrLf & _
               "シート名: " & ActiveSheet.Name, vbInformation
               
        ' 例: セルA1に値を入力する
        ActiveSheet.Range("A1").Value = Now()
        
    Else
        ' ワークシートではなかった場合の処理
        MsgBox "現在アクティブなのはワークシートではありません。" & vbCrLf & _
               "(グラフシートなどが選択されています)", vbExclamation
    End If

End Sub
  • ActiveSheet.Type: このプロパティが返す値は、シートの種類によって異なります。
    • xlWorksheet: 通常のワークシート
    • xlChart: グラフシート
    • 他にもいくつか種類があります。
  • If ActiveSheet.Type = xlWorksheet Then: この条件式で、アクティブなシートがワークシートであるかどうかをTrue/Falseで判断できます。

方法2:TypeName 関数を使う方法(推奨)

TypeName関数は、引数に渡したオブジェクトの型名を、直接文字列として返してくれる便利な関数です。コードがより直感的で読みやすくなるため、こちらの方法も推奨されます。

コードと解説

Sub CheckSheetType_ByTypeName()

    ' TypeName関数でアクティブシートの型名を取得します
    If TypeName(ActiveSheet) = "Worksheet" Then
    
        ' ワークシートだった場合の処理
        MsgBox "アクティブなのはワークシートです。(TypeNameで判定)" & vbCrLf & _
               "シート名: " & ActiveSheet.Name, vbInformation
        
    Else
        ' ワークシートではなかった場合の処理
        MsgBox "現在アクティブなのは「" & TypeName(ActiveSheet) & "」です。", vbExclamation
        
    End If

End Sub
  • TypeName(ActiveSheet): アクティブなシートがワークシートなら文字列"Worksheet"を、グラフシートなら"Chart"を返します。
  • If TypeName(ActiveSheet) = "Worksheet" Then: 返り値が"Worksheet"という文字列と一致するかどうかで判定します。

まとめ

アクティブシートの種類を判定するには、2つの方法があります。

方法構文特徴
.TypeプロパティIf ActiveSheet.Type = xlWorksheetVBAの組み込み定数(xlWorksheetなど)と比較する方法。
TypeName関数If TypeName(ActiveSheet) = "Worksheet"オブジェクトの型名を直接文字列で取得する方法。コードが直感的。

Google スプレッドシートにエクスポート

どちらの方法を使っても結果は同じですが、TypeName関数の方が「型名が”Worksheet”だったら」と、コードの意図が読みやすくなるため、特に初心者の方にはお勧めです。

セル操作を行うマクロの冒頭でこの判定処理を一つ加えるだけで、予期せぬエラーを防ぎ、より安定したプログラムを作成することができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次