選択範囲はSelection
セル範囲を扱う場合に1セルずつループして処理を行いたい場合があります。
選択セル範囲は「Selection」プロパティで表します。
Selection自体は同じですが、ループの書き方で必要になるSelectionの子プロパティも変わってきます。
そこでFor Each、For、Do、の各ループの書き方を紹介します。
Selectionループの書き方
各ループの書き方の見本になります。
ループ内ではセルの文字列をa→A→あ→aの順に置換しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Sub SelectionTest() Dim rCell As Range '// セル Dim i '// ループカウンタ '// 1. For Eachでの書き方 For Each rCell In Selection rCell.Value = Replace(rCell.Value, "a", "A") Next '// 2. Forでの書き方 For i = 1 To Selection.Count Set rCell = Selection.Item(i) rCell.Value = Replace(rCell.Value, "A", "あ") Next '// 3. Doでの書き方 i = 1 Do If (i > Selection.Count) Then Exit Do End If Set rCell = Selection.Item(i) rCell.Value = Replace(rCell.Value, "あ", "a") i = i + 1 Loop End Sub |
コード説明
1. For Eachでの書き方
For Eachは一番使いやすく簡単に書ける方法です。私もほとんどこの書き方で書いてます。
利点として、1行でセルのRangeオブジェクトを取得できることと、ループの終了条件を書く必要がないことが挙げられます。
2. Forでの書き方
Forで書く場合はループカウンタが必要になります。
そのループカウンタの初期値は1にしています。この理由はSelectionの場合はItemプロパティが1から開始するためです。配列などの一般的なループの場合に0に初期化するのと異なります。
3. Doでの書き方
終了条件をループ内に書くことになります。その際にセル数をSelection.Countプロパティで取得します。あとはForでの書き方と考え方は同じです。
実行結果
上のコードを実行した場合の移り変わりは以下になります。
0. 対象セル範囲を選択します。
1. For Eachでの変換後(”a” → “A”)
2. For での変換後(”A” → “あ”)
3. Do での変換後(”あ” → “a”)