実用的なプログラムに挑戦3(コレクション編)
コレクションとはオブジェクトの集まりです。今回はRangeとWorkSheetのコレクションについての使用方法を記述しておきます。
「For Each 〜 Next」というステートメントがあります。これは、「コレクションの中にある全てのオブジェクトに対して実行する」という便利なステートメントです。
書式
- For Each オブジェクト型変数 In コレクション
- 処理A
- Next
前に学んだ「For 処理A Next」ステートメントは、「処理A」を指定された回数だけ繰り返す命令です。一方、この「For Each 処理A Next」ステートメントは、コレクション内に複数あるオブジェクトの全てに対して、「処理A」を繰り返し行わせるためのものです。すなわち、すべてのオブジェクトについて「処理A」を行なう命令です。
セルでの利用
選択したセル範囲に左上のセルから順番に番号を振り、「For Each」ステートメントがどのような順番で処理しているか確認しましょう。
次のプログラムを実行する前に、アクティブワークシートに適当に複数セルを選択しておきます。
どうですか?数が左上から右下へ順番に入力されていることが確認できましたか。これは今後に役立ちますので覚えておきましょう。
【例題7】 選択されたセル範囲に番号をつけます。
- Sub 例題07()
- Dim c As Range '変数cをRangeオブジェクトとして宣言
- Dim i As Integer
- i = 1
- For Each c In Selection
- c.Value = i
- i = i + 1
- Next c
- End Sub
もちろん、「For Each」ステートメントではなく、「For Next」ステートメントでも操作できます。
次のプログラムを実行する前に、アクティブワークシートに適当に複数セルを選択しておきます。
どうですか?同じように番号がつきましたか。
【例題8】 For Nextを使って番号をつけます。
- Sub 例題08()
- Dim i As Integer
- For i = 1 To Selection.Count 'Selection.Countは選択されたセル数を取得
- Selection(i) = i
- Next i
- End Sub
【例題9】 選択した範囲の合計を求めます。
例題08で作成したセルを選択して下のコードを標準モジュールシートに入力して実行してみてください。適当なセルにSum関数を記述して、同じ結果になることを確認しましょう。
- Sub 例題09()
- Dim c As Range '変数cをRangeオブジェクトとして宣言
- Dim sum As Integer '合計結果が入る変数(器)
- sum = 0
- For Each c In Selection
- sum = sum + c.Value
- Next c
- Debug.Print "合計は、" & sum & "です。"
- End Sub
ワークシートでの利用
【例題10】 このブック内でのワークシートの名前をすべて表示してみましょう。ここでのオブジェクトはワークシートでそのプロパティのひとつである名前を「Debug.Print」ステートメントを使ってイミディエィトウィンドウに結果を出力して確認してください。
確認方法はCtrl + G キーでイミディエィトウィンドウに移り、上方向 キーで読み上げてください。
- Sub 例題10() 'ワークシート名の表示
- Dim ws As Worksheet '変数cをWorkSheetオブジェクトとして宣言
- For Each ws In Worksheets
- Debug.Print "ワークシート名前は、" & ws.Name & "です。"
- Next ws
- End Sub
【例題11】 10枚以上のワークシート名をA列に入力するコードを書いて実行してみてください。
- Sub 例題11() 'ワークシート名のセルに代入
- Dim i as Integer
- Dim ws As Worksheet '変数cをWorkSheetオブジェクトとして宣言
- i = 1
- For Each ws In Worksheets
- Cells(i,1) = ws.Name
- i = i + 1
- Next ws
- MsgBox "ワークシート枚数は、" & i - 1 & "です。"
- End Sub
Alt + F11 キーでワークシートに移動して、ワークシートの名前と枚数を、Ctrl + Page Up、またはPage Down キーで確認して、A列に表示されていることを確認してください。