Home » エクセルマクロ・Excel VBAの使い方 » コレクションであることをFor Each~Nextで確認できるのはExcel VBAでも同じ

コレクションであることをFor Each~Nextで確認できるのはExcel VBAでも同じ

拙著『いちばんやさしいPowerPoint VBAの教本』のP.096でお伝えしている、何らかのオブジェクトがコレクションなのかを判断するには、For Each~Next文で処理できることを確認する必要がある件について補足記事を書きました。

これはPowerPoint VBAに限った話ではなく、Excel VBAでも同じです。

Excel VBAをある程度使っている方なら、Workbooksプロパティで取得できるWorkbooksオブジェクトや、

Worksheetsプロパティ・Sheetsプロパティなどで取得できるSheetsオブジェクトが、

コレクションであることをご存知のはずです。

VBA学習の初期段階では、何となく暗記しまう方が少なくないと思いますが、本質的には暗記するのではなく、テストコードを実行してその結果から判断できることを理解しておきましょう。

この判断ができれば、未知のオブジェクトを利用する際の理解も早められます。

WorkbooksとWorkbook

Workbooksプロパティで取得できるWorkbooksオブジェクトはコレクションですから、以下のSubプロシージャは問題なく実行できます。
Sub 取得したオブジェクトがコレクションであるかを確認する()
 Dim itm As Variant
 For Each itm In Workbooks
 Next
End Sub
一方、ActiveWorkbookプロパティで取得できるWorkbookオブジェクトは、コレクションではありませんから、以下のSubプロシージャは実行時エラーが発生します。
Sub 取得したオブジェクトがコレクションであるかを確認する()
 Dim itm As Variant
 For Each itm In ActiveWorkbook
 Next
End Sub

もちろんWorkbooks.ItemプロパティでWorkbookオブジェクトを取得する場合も、実行時エラーになります。

SheetsとWorksheet

Sheetsプロパティで取得できるSheetsオブジェクトはコレクションですから、以下のSubプロシージャは実行できます。
Sub 取得したオブジェクトがコレクションであるかを確認する()
 Dim itm As Variant
 For Each itm In Sheets
 Next
End Sub
一方、ActiveSheetプロパティで取得できる、ワークシートを表すWorksheetオブジェクトや、グラフシートを表すChartオブジェクトは、コレクションではありませんから、以下のSubプロシージャは実行時エラーが発生します。
Sub 取得したオブジェクトがコレクションであるかを確認する()
 Dim itm As Variant
 For Each itm In ActiveSheet
 Next
End Sub

もちろんSheets.ItemプロパティでWorksheetオブジェクトを取得する場合も、実行時エラーになります。

Rangeの場合

Rangeオブジェクトは(1個のセルを表す場合でも実は)コレクションですから、以下のSubプロシージャでも、実行時エラーが発生することはありません。
Sub 取得したオブジェクトがコレクションであるかを確認する()
 Dim itm As Variant
 For Each itm In ActiveCell
 Next
End Sub
[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » コレクションであることをFor Each~Nextで確認できるのはExcel VBAでも同じ

TrackBack:0

TrackBack URL

Home » エクセルマクロ・Excel VBAの使い方 » コレクションであることをFor Each~Nextで確認できるのはExcel VBAでも同じ

「エクセルマクロ・Excel VBAの使い方」の記事一覧

検索


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

.