第59回.コレクション処理(For Each)
For Each は、コレクションの各要素に対して繰り返し処理を実行します。
For Each は、
コレクションの中から、個々のオブジェクトを取り出して処理する場合に使用します。
コレクションの全ての要素に対しての処理が終わるとループは終了します。
For Each の構文
For Each element In group
[statements]
[Exit For]
[statements]
Next [element]
elementのデータ型について
[statements]
[Exit For]
[statements]
Next [element]
element | 必ず指定します。 コレクションの各要素を繰り返す変数を指定します。 引数 element にはバリアント型変数、総称オブジェクト型変数、または固有オブジェクト型のオブジェクト変数を指定できます。 |
group | 必ず指定します。 オブジェクト コレクション名または配列名を指定します。 |
statements | 省略可能です。 引数 group の各メンバに対して実行するステートメントを指定します。 |
elementのデータ型について
elementに指定するオブジェクトについては、「第52回.オブジェクト変数」で説明した、
Variant(バリアント型) > Object(総称オブジェクト型) > 固有オブジェクト型
ということになります。
固有オブジェクト型が不明な場合は、総称オブジェクト型やバリアント型でも良いのですが、
そもそも、コレクション名は解っている訳ですから、
コレクション名の最後のsを取れば、通常はそれで固有オブジェクト型になります。
Dim 変数 As ○○○
For Each 変数 In ○○○s
・・・
Next 変数
○○○がオブジェクト、○○○sがコレクションです。
ただし、
※全てのオブジェクト・コレクションについてこの規則が当てはまるわけではありません。
あくまで、このような命名規則が多いというこです。
Variant(バリアント型) > Object(総称オブジェクト型) > 固有オブジェクト型
ということになります。
そもそも、コレクション名は解っている訳ですから、
コレクション名の最後のsを取れば、通常はそれで固有オブジェクト型になります。
For Each 変数 In ○○○s
・・・
Next 変数
※全てのオブジェクト・コレクションについてこの規則が当てはまるわけではありません。
あくまで、このような命名規則が多いというこです。
Exit For
コレクションの全ての要素に対し処理が終了する前に、ループを抜けます。
このような使い方になります。
For Each 変数 In コレクション
・・・
If 終了すべき条件 Then
Exit
For
End If
・・・
Next
このような使い方になります。
For Each の使用例
Dim ws As Worksheet
For Each ws In
Worksheets
ws.PrintPreview
Next ws
これで、全シートが印刷プレビューされます。
(印刷プレビューについては、後々説明します。)
Dim i As Integer
For i = 1 To Worksheets.Count
Worksheets(i).PrintPreview
Next
i
このようになります。
.Countは、コレクションの要素数です。
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
Debug.Print ws.Name
Next
マクロの書かれているブックのすべてのワークシートをイミィディエイト ウインドウに出力しています。
RangeオブジェクトのFor Each
RangeをFor Eachで処理する場合、少々注意が必要です。
これを実行してみれば解りますが、
A1,B1,A2,B2,・・・
このような順に処理されます。
列→行
この順で取得されます。
RangeのFor Eachは処理順に注意が必要です。
例えば、とりあえず列→行の順で問題なかったとしても、
その後に、行→列の順に変更する必要が出てきたときに困る事になります。
従って、このような処理順を気にする必要がないときにのみ使用してください。
Dim MyRange As Range
Dim i As Long
i = 1
For Each MyRange In
Range("A1:B5")
MyRange = i
i = i +
1
Next
これを実行してみれば解りますが、
A1,B1,A2,B2,・・・
このような順に処理されます。
列→行
この順で取得されます。
例えば、とりあえず列→行の順で問題なかったとしても、
その後に、行→列の順に変更する必要が出てきたときに困る事になります。
従って、このような処理順を気にする必要がないときにのみ使用してください。
For Each サイト内の参考ページ
練習問題17(ブック・シートの操作の練習)
・マクロVBA練習問題 ・シンキングタイム ・マクロVBA練習問題解答へ
複数シートの印刷(PrintOut)|VBAサンプル集・マクロの記録と同じようにArrayに固定文字で ・シートを順次印刷していく ・シート名の配列を作成して一括で印刷する ・Worksheet.Selectメソッド ・全てのシートを印刷するなら
名前定義の一覧(Name)|ExcelマクロVBAサンプル集・名前定義の一覧を取得し、シートに書き出すマクロVBA ・非表示の名前定義を表示 ・サイト内の関連ページ
同じテーマ「マクロVBA入門」の記事
・Rangeオブジェクトを参照するためのプロパティ ・Rangeオブジェクトを返すRangeプロパティ ・Rangeオブジェクトのデータ型 ・全てのセルを表すCells ・Rangeオブジェクトの使用例 ・RangeとCellsの使い分け方 ・VBEの自動メンバ表示(インテリセンス) ・RowsとColumns ・Rangeオブジェクトのプロパティとメソッド ・Rangeオブジェクトは難しい ・RangeとCellsの関連記事
第57回.Applicationのプロパティ(マクロ高速化と警告停止等)・Applicationの主要プロパティ ・ScreenUpdating(マクロVBAの高速化) ・DisplayAlerts(警告停止) ・Interactive(ユーザー操作の禁止) ・Calculation(計算方法) ・StatusBar ・Cursor ・その他
第58回.コレクションとは(Collection)・コレクションの中から単一オブジェクトを指定する場合 ・セルであるRangeオブジェクトのコレクションは? ・コレクションの要素数 ・Collectionオブジェクト
第59回.コレクション処理(For Each)第60回.エラー処理(On Error)
・マクロVBAのエラー発生例 ・エラー処理のステートメント ・実行時エラー関連記事
第61回.「On Error GoTo」と「Exit Sub」・On Error GoTo 行ラベル ・Exit Sub ・On Error の有効範囲とその動作について ・最後に
第62回.「On Error Resume Next」とErrオブジェクト・On Error Resume Next ・Errオブジェクト ・On Error Resume Next の使用例 ・「On Error Resume Next」の最後に
第63回.ブックを開く(Open,Add)・Workbooks.Openメソッド ・Openメソッドの使用例 ・Openメソッドの戻り値の使い方 ・Workbooks.Addメソッド ・Openメソッドの関連記事
第64回.ブックを閉じる・保存(Close,Save,SaveAs)・ブックを閉じる ・ブックを上書き保存 ・ブックに名前を付けて保存 ・ブックのコピーを保存 ・ブックを閉じる・保存の実践例
第65回.シートの挿入、名前の変更(Add,Name)・シートの挿入 ・シートの名前変更 ・シート挿入、名前変更の実践例
第66回.シートのコピー・移動・削除(Copy,Move,Delete)・シートのコピー・移動 ・シートの削除 ・シートのコピー・移動・削除の関連記事
新着記事NEW ・・・新着記事一覧を見る
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|VBA入門
4.ひらがな⇔カタカナの変換|エクセル基本操作
5.繰り返し処理(For Next)|VBA入門
6.変数宣言のDimとデータ型|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.Findメソッド(Find,FindNext,FindPrevious)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。