ブック内のさまざまなワークシートを処理するマクロを作成している場合は、処理を行う前に、ブック内にあるワークシートのタイプを把握する必要がある場合があります。一部の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の古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります。