離れた列のデータがどの行か分からなくなる
Excelシートを画面いっぱいに使っている場合、画面の右の方の列がどの行のデータなのかがわかりにくいことが多々あります。こういう場合ですね。
これが1行ごとに背景色を付けていると、同じ行であることが明確に分かります。Web用に狭くしていますが、実際のExcelではもっと長くなっていることも少なくないでしょう。
このようなデータの複数の列の値を突き合わせする場合などは間違いの元ですし、目も疲れます。
そういう場合は上のように1行ごとに色を付けて、同じ行であることを色で判別できるようにすると分かりやすくなります。
ちなみに、これはExcelに限りませんが人間は文章を見る際に、文字の色、文字の大きさ、内容、の順に文章を認識をするそうです。文字だけでなくExcelは背景色も設定できますので、それらの色や文字の大きさを使うと人間にとって読みやすくなる資料にもなります。
その読みやすさの一つとして、以下では選択範囲を1行ごとに色を付けるマクロを紹介します。
選択範囲を1行ごとに色を付けるマクロ
色を付けたい範囲を選択して以下のマクロを実行すると、1行ごとにセルの背景色を設定します。
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 29 30 31 32 33 34 35 36 37 38 39 40 |
Sub ChangeColorEachLine() Dim iRowStart As Long '// 開始行 Dim iRowEnd As Long '// 終了列 Dim iColStart As Long '// 開始列 Dim iColEnd As Long '// 終了列 Dim bSetColorFlg As Boolean '// 色設定フラグ(True:色を付ける、False:付けない) Dim iRow As Long '// ループ中の行位置 '// 開始行の取得 iRowStart = Selection.Row '// 終了行の取得 iRowEnd = Selection.Rows.Count + iRowStart - 1 '// 開始列の取得 iColStart = Selection.Column '// 終了列の取得 iColEnd = Selection.Columns.Count + iColStart - 1 '// 選択範囲の左上を選択 Cells(iRowStart, iColStart).Activate '// 1行目から色を付ける場合はTrue、2行目からの場合はFalse bSetColorFlg = True '// 1行ずつループ For iRow = iRowStart To iRowEnd '// 色設定を行う場合 If (bSetColorFlg = True) Then '// 行の背景色を設定 '// ColorIndex方式 ' Range(Cells(iRow, iColStart), Cells(iRow, iColEnd)).Interior.ColorIndex = 17 '// Color方式 Range(Cells(iRow, iColStart), Cells(iRow, iColEnd)).Interior.Color = RGB(127, 255, 212) End If '// フラグを反転 bSetColorFlg = Not bSetColorFlg Next End Sub |
コード説明
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行ごとに設定しています。
実行前
実行後