VBA(Microsoft Excel)でシートの種類を検出する
ブック内のさまざまなワークシートを処理するマクロを作成している場合は、処理を行う前に、ブック内にあるワークシートのタイプを把握する必要がある場合があります。一部のVBAコマンドは特定の種類のワークシートでのみ機能するため、これは特に重要です。
ワークブックに含まれるワークシートの種類を理解する前に、Excelがワークブックを構成するオブジェクトの一部を内部的にどのように格納しているかを知っておくと役立ちます。 Excelは、WorksheetsコレクションとChartsコレクションの両方を維持します。 Worksheetsコレクションはワークシートオブジェクトで構成され、Chartsコレクションはチャートシートオブジェクトで構成されます。
チャートシートオブジェクトは、ワークシート全体を占めるチャートです。ワークシートに埋め込まれたオブジェクトであるものは含まれません。
興味深いことに、ワークシートとチャートシートオブジェクトもSheetsコレクションのメンバーです。したがって、シートが発生する順序でブックを処理する場合は、Sheetsコレクションをステップ実行するのが最も簡単です。これを行うと、コレクション内の個々のオブジェクトのTypeプロパティを調べて、オブジェクトのタイプを判別できます。 Excelは、Sheetsコレクションに属することができる2つのタイプのオブジェクトを定義します。
xlWorksheet。*これは通常のワークシートです。
xlChart。*これはチャートです。
次の2種類のオブジェクトは引き続きMicrosoftExcelでサポートされていますが、MicrosoftVBAの最新バージョンに移行することをお勧めします。 (Excel 4.0マクロの操作の詳細については、以下のWebページを参照してください。):
xlExcel4MacroSheet。*これは、Excel4.0で使用されるマクロシートです。
xlExcel4IntlMacroSheet。*これは、Excel4.0で使用される国際的なマクロシートです。
https://support.office.com/en-us/article/Working-with-Excel-4-0-macros-BA8924D4-E157-4BB2-8D76-2C07FF02E0B8
シートタイプのリストを見るだけで十分だと思われるかもしれません。ただし、興味深いことに、ExcelはTypeプロパティに期待するものを常に返すとは限りません。代わりに、グラフのTypeプロパティを調べると、xlExcel4MacroSheetに等しい値が返されます。
これにより、どのマクロでも問題が発生する可能性があります。
したがって、これを回避する方法は、Sheetsコレクションの各アイテムの名前をChartsコレクションのアイテムの名前と比較することです。名前が両方のコレクションにある場合は、シートがグラフであると見なすのが安全です。両方に含まれていない場合は、さらに分析して、ワークシートが他のタイプの1つであるかどうかを確認できます。次のマクロSheetTypeは、まさにこのプロセスに従います。
Sub SheetType() Dim iCount As Integer Dim iType As Integer Dim sTemp As String Dim oChart As Chart Dim bFound As Boolean sTemp = "" For iCount = 1 To Sheets.Count iType = Sheets(iCount).Type sTemp = sTemp & Sheets(iCount).Name & " is a" bFound = False For Each oChart In Charts If oChart.Name = Sheets(iCount).Name Then bFound = True End If Next oChart If bFound Then sTemp = sTemp & " chart sheet." Else Select Case iType Case xlWorksheet sTemp = sTemp & " worksheet." Case xlChart sTemp = sTemp & " chart sheet." Case xlExcel4MacroSheet sTemp = sTemp & "n Excel 4 macro sheet." Case xlExcel4IntlMacroSheet sTemp = sTemp & "n Excel 4 international macro sheet" Case Else sTemp = sTemp & "n unknown type of sheet." End Select End If sTemp = sTemp & vbCrLf Next iCount MsgBox sTemp End Sub
マクロを実行すると、ブック内の各シートの名前とシートの種類を示す単一のメッセージボックスが表示されます。
最後に、このコードはワークブックに含まれるシートの種類を示していることを忘れないでください。含まれているブックの種類はわかりません(つまり、マクロは、作業しているExcelのバージョンを気にしません)。
注:
このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(10483)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice 365のExcelに適用されます。Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります。
linkVBA内のシートの種類の検出。