アクティブなシートを判別するVBA(Visual Basic for Applications)のコードをご紹介しました。
その記事の中で、ActiveSheet.Typeというコードは、ワークシートがアクティブなときには、列挙型XlSheetTypeに定義されている定数・xlWorksheetと同じ値「-4167」を返すけれど、
グラフシートがアクティブなときには「3」とか「4」とかの数値を返すことに触れました。
これらの数値が何なのかについて解説しておきます。
WorksheetがアクティブなときにActiveSheet.Typeで返される値
まずは、ActiveSheetプロパティが返すものから、オブジェクトブラウザーで確認しましょう。
ActiveSheetプロパティは、アクティブになっている(シート)オブジェクトを返してきます。
ワークシートがアクティブならWorkSheetオブジェクト、
グラフシートがアクティブならChartオブジェクトを返します。
ワークシートがアクティブなときに、ActiveSheetプロパティでWorkSheetオブジェクトが返されるということは、ActiveSheet.TypeはWorksheet.Typeと同じことになります。
ですからActiveSheet.Typeというコードで、ワークシートかそうでないかの判定はできます。
ChartがアクティブなときにActiveSheet.Typeで返される値
グラフシートがアクティブなときにも、ワークシートのときと同じ理屈で、ActiveSheet.TypeはChart.Typeと同じはずです。
しかし、オブジェクトブラウザーで確認しても、Chartオブジェクトには、Typeプロパティが見当たりません!
一体、ChartがアクティブなときにActiveSheet.Typeは何を返してきているのでしょうか?
オブジェクトブラウザーで、非表示のメンバーを表示させて見ると、何が返されるのかがわかってきます。
Chart.Typeプロパティは、非表示のプロパティなのです。
そして、その戻りはLongとなっています。(Worksheet.Typeの戻りはXlSheetTypeでした。)
つまり、Chartがアクティブなときには、ActiveSheet.TypeはLong型のChart.Typeを返すということです。
Chart.Typeの返す値とは
オブジェクトブラウザーを眺めているだけでは、Chart.Typeが返す値が何なのかは具体的にはわかりませんが、いろいろとテストしてみるとChart.Typeプロパティの返す値がわかってきます。
Chart.Typeは、
面グラフがアクティブなら定数・xlAreaと同じ「1」
折れ線グラフがアクティブなら定数・xlLineと同じ「4」
円グラフがアクティブなら定数・xlPieと同じ「5」
を返してきます。
Chart.Typeプロパティは、
Chart.ChartTypeプロパティと近い値を返してくることが結構あるのです。
しかし、完全一致しているわけではありません。
顕著なのが棒グラフの場合です。
Chart.Typeは、棒グラフがアクティブなら「3」を返してきます。
Chart.ChartTypeは、棒グラフの種類によって「51」「52」「53」といった値を返してきます。
Chart.ChartTypeプロパティが返す列挙型・XlChartTypeには、値が「3」の定数は、最近のバージョンでは存在していません。ここは推測に過ぎませんが、どこかのバージョンまではxlColumnといった名前の値が「3」の定数が存在していたのではないかと考えています。
つまり、Chart.Typeプロパティは、古いバージョンでグラフの種類を指定するために使われていたプロパティで、互換性を確保するために隠しプロパティとして最近のバージョンでも残されているのではないかと、私は推測しています。
グラフシートがアクティブなときのActiveSheet.Typeは何なのか
で、結論です。
グラフシートがアクティブなときにActiveSheet.Typeが返す値は、グラフの種類を表すような値ということです。
ただし、正しくグラフの種類を表す値を返すActiveSheet.ChartType(Chart.ChartType)とは違う値が返されるケースも結構あります。
Home » エクセルマクロ・Excel VBAの使い方 » グラフ・Chart » グラフシートがアクティブなときActiveSheet.Typeの戻り値は