VBAで選択範囲の背景色を1行おきに設定する

離れた列のデータがどの行か分からなくなる

Excelシートを画面いっぱいに使っている場合、画面の右の方の列がどの行のデータなのかがわかりにくいことが多々あります。こういう場合ですね。

これが1行ごとに背景色を付けていると、同じ行であることが明確に分かります。Web用に狭くしていますが、実際のExcelではもっと長くなっていることも少なくないでしょう。

このようなデータの複数の列の値を突き合わせする場合などは間違いの元ですし、目も疲れます。

そういう場合は上のように1行ごとに色を付けて、同じ行であることを色で判別できるようにすると分かりやすくなります。

ちなみに、これはExcelに限りませんが人間は文章を見る際に、文字の色、文字の大きさ、内容、の順に文章を認識をするそうです。文字だけでなくExcelは背景色も設定できますので、それらの色や文字の大きさを使うと人間にとって読みやすくなる資料にもなります。

その読みやすさの一つとして、以下では選択範囲を1行ごとに色を付けるマクロを紹介します。

選択範囲を1行ごとに色を付けるマクロ

色を付けたい範囲を選択して以下のマクロを実行すると、1行ごとにセルの背景色を設定します。



コード説明

2~7行目 変数定義です。
9~16行目 選択範囲の開始行、終了行、開始列、終了列のセル座標を取得しています。これは主に25行目以降のループ処理で利用します。

選択範囲の開始行などの取得は「VBAで編集セル範囲の選択と最終行と最終列の取得」に詳しく書いています。

19行目 選択範囲の左上を選択しています。選択セル範囲はSelectionで表しますが、現在セルはActivateで示す1つのセルになります。その現在セルを左上に設定しています。

この処理では25行目以降の処理で常に上の行から下に向かって処理するようにしているためこの処理は不要なのですが、将来このマクロを編集した場合を考えて入れています。

セルの選択は左上から右下に向かってマウスをドラッグすることが多いと思いますが、Excelはドラッグ開始位置がどこでも選択できるようになっています。そのため選択開始位置である選択セルが常に左上にあるとは限りません。その結果、左上にあることを前提としたプログラムになっていると想定外の動作をすることになります。

このマクロはそういうことが起きないようになっていますが、編集することがあれば選択セルの位置を考慮するようにしてください。この行の処理があれば常に左上に選択セルがある前提になります。

22行目 1行ずつ背景色を設定する際に、1行目に色を付けるかどうかの初期設定をしています。Trueの場合は1行目から背景色を付けますがFalseの場合は2行目から付けます。
25行目 事前に取得している開始行から終了行までをループします。
27行目 色設定フラグがTrueの色を付ける状態かどうかを判定します。
31行目 1行すべての列に対する背景色設定処理です。Cellsを使っていますが、これはRange(“A1:E1”)のように同じ行の列範囲を指定している場合と同じ意味になります。

Colorプロパティでの設定を行いたい場合は34行目をコメントアウトして31行目のコメントをはずしてください。

34行目 31行目のColorプロパティ版です。RGB関数を使って任意の色を指定したい場合はこちらを使ってください。

Webカラーについては「VBAでWebカラーCSS3の147色を指定する」に紹介しています。

38行目 色設定フラグをNotの否定演算子で反転させています。Trueの場合はFalse、Falseの場合はTrueになります。Boolean型の変数定義をしていることが前提の処理です。

使用例

ここではWebカラーのaquamarineという名前の色を1行ごとに設定しています。

実行前

実行後

関連記事

サブコンテンツ

このページの先頭へ