セルの値が変わったら罫線を引いて明示
Excelシートに縦列に複数のデータを入力した場合、その値が異なる部分を明示したいことがあります。分かりやすくなる方法の1つとして罫線を引くことが挙げられます。
データ量が少なければ手で罫線を引いてもいいかもしれませんが、テキストファイルなどから大量のデータをコピペした場合などは大変な作業になるためVBAを使った方がいいと思います。
ここでは、縦に並べて入力されている値が変わった場合に、罫線を引いてデータが異なっていることを明示するマクロを紹介します。
セルの値が変わったときに罫線を引くマクロ
A1セルから下に向かって値が異なるセルがあった場合は境目に罫線を引くマクロです。
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 |
Sub DrawLineValueChange() Dim i '// ループカウンタ Dim sNow '// 現在セル値 Dim sLast '// 前回セル値 '// グリッド線を消す ActiveWindow.DisplayGridlines = False '// A1セルを基準セルとして選択 Range("A1").Select i = 0 Do '// 前回セル値を保持 sLast = sNow '// 現在セル値を取得 sNow = ActiveCell.Offset(i, 0).Value '// 空白セルが連続している場合は処理終了 If sLast = "" And sNow = "" Then Exit Do End If '// 前回セルと現在セルの値が異なる場合 If sLast <> sNow Then '// 現在セルの上に罫線を引く ActiveCell.Offset(i, 0).Borders(xlEdgeTop).LineStyle = xlContinuous End If '// 次セル参照のためループカウンタを加算 i = i + 1 Loop End Sub |
コード説明
7行目 | シートのグリッド線を消しています。不要であれば削除してください。 |
10行目 | データの比較を行う開始セルを指定します。A1セルを固定にしていますが、任意のセルを開始位置にしたい場合は、この関数の引数に開始セルのRangeオブジェクトを指定するようにするとより汎用的になります。 |
12行目 | ループカウンタを0で初期化しています。Offsetプロパティで開始セルから始めるために0としています。 |
16行目 | 前回セルの値として現在セル値変数をコピーしています。前回ループ時の値がセットされます。 |
19行目 | A1セルを基準としたOffsetプロパティによるi行目のセルの値を取得しています。 |
22行目 | 前回と現在がどちらも空白セルの場合は以降はデータがないとみなして処理を終了しています。もし空白セルが連続することがある場合は、別の変数で空白セルが100まで許容可能とするための判定用のカウンター変数などを用意し、それも終了条件の判定にAnd条件で加えるのもいいと思います。 |
23行目 | 22行目の判定でループ処理を抜けます。 |
27行目 | 前回と現在のセルの値が異なるかどうかの判定を行っています。 |
29行目 | 前回と現在のセルの値が異なっている場合は、現在セルの上に細実線を引いています。色を付けたい場合や太線にしたい場合などは以下に詳しく紹介していますので参考にしてください。
「セルの罫線の取得と設定」 |
33行目 | 次ループ用にループカウンタを加算しています。 |
利用例
実行前
実行後