Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » Sheets(Array("Sheet1", "Sheet2", "Sheet3"))の戻り値はWorksheetではない

Sheets(Array("Sheet1", "Sheet2", "Sheet3"))の戻り値はWorksheetではない

動作検証バージョン:Windows版Excel(バージョン1902 ビルド11328.20222)

Excelでワークシートを選択する操作をマクロ記録すると、
  Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select
といったコードが自動的に作られます。

このワークシートを取得するコード(オブジェクト式)
  Sheets(Array("Sheet1", "Sheet2", "Sheet3"))
で返されるのが、Worksheetオブジェクトであるかのような、記述を見かけたので記事にさせていただきます。

結論からいうと、Sheet1という名前のワークシートがあるときに、
  Sheets("Sheet1")
というオブジェクト式で取得できるのは、確かにWorksheet型のオブジェクトですけれど、
  Sheets(Array("Sheet1", "Sheet2", "Sheet3"))
で取得できるのは、Sheetsコレクションです。

[スポンサードリンク]

Sheetsプロパティの戻り値種別を確認するサンプルマクロ

VBAのTypeName関数で戻り値の種別を確認しましょう。
「Sheet1」「Sheet2」という名前のワークシートが存在するときに、以下のSubプロシージャを実行してください。

Sub Sheetsプロパティの戻り値の型を確認する()
 Dim obj As Object

 Set obj = Sheets("Sheet1")
 Debug.Print TypeName(obj)

 Set obj = Sheets(Array("Sheet1", "Sheet2"))
 Debug.Print TypeName(obj)
End Sub

イミディエイトウィンドウには、TypeName関数の結果
  Worksheet
  Sheets
が出力されます。

もちろん、
  Set obj = Sheets("Sheet1")
  Debug.Print TypeName(obj)
の結果が、
  Worksheet
で、つづく、
  Set obj = Sheets(Array("Sheet1", "Sheet2"))
  Debug.Print TypeName(obj)
の結果が、
  Sheets
です。

SheetsはWorksheetと同じくSelectメソッドを持つ

確認したとおり「Sheets(Array("Sheet1", "Sheet2", "Sheet3"))」はSheetsコレクションを返すのですから、
  Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select
は、SheetsコレクションのSelectメソッドを呼んでいるコードです。

Sheets(Array(

一方
  Sheets("Sheet1").Select
は、Worksheet型オブジェクトのSelectメソッドを呼んでいるコードです。

Sheets(Array(

オブジェクト式
  Sheets(Array("Sheet1", "Sheet2", "Sheet3"))
が返すのはWorksheetオブジェクトではありません。

最終更新日時:2019-03-30 05:43

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » Sheets(Array("Sheet1", "Sheet2", "Sheet3"))の戻り値はWorksheetではない

「Sheets・Worksheet」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.