選択範囲のループの書き方はセル単位と行単位と列単位で異なる

選択範囲のループは大きく3つの書き方をします。

全てのセルをループするセル単位か、行単位か、列単位か、です。

いずれの場合でも必要になるのがセル選択範囲を示すSelectionプロパティです。

コードで書くとこんな感じですね。

このときに、選択範囲のセル1つずつループする場合はSelectionプロパティをそのまま使って以下のような感じで書きます。

しかし1セルずつではなく、1行ずつや1列ずつループして処理したい場合があります。

そういう場合の書き方について紹介します。


セル選択範囲を1行ずつまたは1列ずつループする場合の書き方

セルの選択範囲を1行ずつ、または、1列ずつループしたい場合は以下のようなコードを書きます。

コード概要

まず範囲の先頭と最終の位置を取得し、その範囲をループする、という書き方になります。

2行5列を選択している場合であれば、行ループは2回、列ループは5回ループすることになります。



実行結果

1. セル範囲を選択します。

2. 上の関数を実行します。実行後、1行ごとに枠線が設定され、1列ごとに背景色が設定されます。見やすいように選択状態をはずしています。




コード説明

行または列をループするためにはどこからどこまでループするのかを決める必要があります。行ごとにループする場合はセル選択の先頭行から最終行へループし、列の場合も同様に先頭列から最終列へループします。そのため事前にセル選択範囲の先頭行、最終行、先頭列、最終列を取得します。13行目から17行目の部分です。

セルの入力範囲で判定したい場合の先頭と最終の取得方法は「VBAで編集セル範囲の選択と最終行と最終列の取得」に詳細を書いていますのでご参照ください。

あとは行でループしたい場合は先頭行から最終行へループするようなFor文やDo文を書きます。列ループの場合も同様で先頭列から最終列へのループ構文を書きます。サンプルの19行目や27行目です。

行範囲や列範囲を指定したい場合はループ内の「Range(Cells(), Cells())」のように書きます。サンプルでは20行目や25行目です。行ごとのループの場合は列の先頭と最終は変わらないため、Cellsメソッドの2番目の値はループ中同じです。同様に列ごとのループの場合は行の先頭と最終であるCellsメソッドの1番目の値はループ中同じにします。

あとはループ内でどういう処理を行うのかは適宜書いていくことになります。

サンプルで行ループの場合は1行ごとに枠線を設定しています。BorderAroundは線の種類、太さ、色などを1度に設定できるメソッドです。「罫線の種類と太さと色をまとめて設定する」に詳細を書いていますので必要な場合はご参照ください。

列ループの場合は1列ごとに背景色を設定しています。ここではColorIndexプロパティを使っていますが、他にもColorIndexプロパティやスタイルでの設定ももちろん可能です。

スタイルの設定は以下で詳細をご参照ください。
セルのスタイルの設定と取得
セルのスタイルの追加
セルのスタイルの削除
セルのスタイルの参照