Excel VBAの入門書である拙著『いちばんやさしいExcel VBAの教本』では、コレクションから単独のオブジェクトを取得するItemプロパティについて、Lesson 53「コレクションオブジェクトについて学習しましょう」で、少しだけ触れています。
通常は、Workbooks(1) あるいは Worksheets(1) のように、Itemを明記しなくても構いませんが、For~Next文に慣れてきた方には、「.Item」を省略しないコードにも慣れていくことをおすすめします。
With文でItemを明記する可能性
Lesson 77「すべてのブックからシートを複製するマクロを理解しましょう」では、以下のようなコードをご紹介しています。
Dim i As LongFor i = 1 To Workbooks.Count
Workbooks(i).Activate
MsgBox Workbooks(i).Name
Next i
Lesson 68「ワークシートに対しループ処理を行うマクロを作りましょう」では、以下のようなコードをご紹介しています。
Dim i As LongFor i = 1 To Worksheets.Count
Worksheets(i).Select
MsgBox Worksheets(i).Name
Next i
いずれも、For~Next文の中でWorkbooksやWorksheetsが2回、全体でも3回ずつ登場するだけですから、With文を使っていませんが、実務ではもっと何度も出てくるケースがあります。
その場合With文を使って、Itemを明記するほうが、全体としてスッキリした読みやすいコードになるはずです。
WorkbooksからWorkbookを取得するItemを明記したサンプル
WorkbooksコレクションからWorkbookオブジェクトを取得する、Itemプロパティを明記したコードを確認しましょう。
For i = 1 To .Count
.Item(i).Activate
MsgBox .Item(i).Name
Next i
End With
コード全体が短いため、「With Workbooks」と「End With」の行が増え、全体の行数が増えたデメリットのほうが目立っている印象もありますが、実務ではFor~Next文内で行う処理がもっと増えることはよくあり、その場合にはWorkbooksがあちこちに登場しなくなるメリットのほうが際立ってきます。
上記コードの、
.Item(i).Activate
MsgBox .Item(i).Name
に登場するItemが、Workbooksコレクションオブジェクトから単独のWorkbookオブジェクトを取得するItemプロパティです。
WorksheetsからWorksheetを取得するItemを明記したサンプル
Worksheetsの場合は以下のとおりです。
For i = 1 To .Count
.Item(i).Select
MsgBox .Item(i).Name
Next i
End With
For~Next文に慣れてきた方は、Workbooks(i)といったコードを見かけたときにWorkbooks.Item(i)の省略形だな、Workshees(i)を見たときにはWorksheets.Item(i)の「.Item」が省略されているのだな、と意識してみましょう。
最終更新日時:2019-03-25 15:08
Home » いちばんやさしいExcel VBAの教本 » コレクションから単独のオブジェクトを取得するItemにも慣れましょう