Home » いちばんやさしいExcel VBAの教本 » コレクションから単独のオブジェクトを取得するItemにも慣れましょう

コレクションから単独のオブジェクトを取得するItemにも慣れましょう

Excel VBAの入門書である拙著『いちばんやさしいExcel VBAの教本』では、コレクションから単独のオブジェクトを取得するItemプロパティについて、Lesson 53「コレクションオブジェクトについて学習しましょう」で、少しだけ触れています。

通常は、Workbooks(1) あるいは Worksheets(1) のように、Itemを明記しなくても構いませんが、For~Next文に慣れてきた方には、「.Item」を省略しないコードにも慣れていくことをおすすめします。

With文でItemを明記する可能性

Lesson 77「すべてのブックからシートを複製するマクロを理解しましょう」では、以下のようなコードをご紹介しています。

 Dim i As Long

 For i = 1 To Workbooks.Count
  Workbooks(i).Activate
  MsgBox Workbooks(i).Name
 Next i

Lesson 68「ワークシートに対しループ処理を行うマクロを作りましょう」では、以下のようなコードをご紹介しています。

 Dim i As Long

 For 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プロパティを明記したコードを確認しましょう。

 Dim i As Long

 With Workbooks
  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の場合は以下のとおりです。

 Dim i As Long

 With 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にも慣れましょう

「いちばんやさしいExcel VBAの教本」の記事一覧

検索


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

.