VBAの習得に励んでいるWebディレクターのふるたです。
最近の業務にてエクセルで表を作成した際に、見た目を整えるために、5行ごとにアンダーライン(下線)を引いて欲しいと要望があり、VBAのループ処理を利用して実装した方法を備忘録として記載します。
200行以上の表を作成した後に、見やすさの向上のため、5行ごとにアンダーライン(下線)を設定したい。
5行単位で下線を引くと表が見やすくなりますね。
これをVBAのマクロを使って、一瞬で作成しましょう。
Excelのリボンから開発を選択して、Visual Basic の編集画面にて下記コードを入力します。
Sub underlineStep5()
Dim i As Long
For i = 0 To 200 Step 5
Range("A2:D2").Offset(i).Borders(xlEdgeBottom).LineStyle = xlContinuous
Next
End Sub
あとは、表のシートを表示させて作成したマクロ「underlineStep5」を実行すれば完了です。
マクロを直接実行するため、Subプロシージャを作ります。
マクロ名は後から見返しても内容が判るように「underlineStep5」と設定。
※マクロ名は任意でOK。
ループ処理をするため、変数「i」を設定します。データ型は整数を意味する「Long」とします。「Integer」でも同じ整数を意味するので良いのですが、「Long」のほうが使える数値の範囲が大きいので、特に理由がなければ整数を指定する場合は「Long」で良いと思います。
Long型 | -2,147,483,648 ~ 2,147,483,647 |
Integer型 | -32,768 ~ 32,767 |
今回扱う表は、項目行が1、内容が200行あるため、0から200をループさせます。また、5行ごとにアンダーラインを引きたいので「Stepキーワード」を使用して「Step 5」として、変数「i」に代入します。
また、For文は最後に「Next」を記述するのがVBAのお作法です。
セル範囲を指定して、直線のアンダーラインを引く設定をします。また、セル範囲を5行づつ下に移動させてループ処理を施します。
Range("A2:D2") | 表の初めの行を範囲指定 |
Offset(i) | RangeオブジェクトのOffsetプロパティは、引数に設定した数だけ移動。引数は縦と横で2種設定できますが、1種の場合は縦方向で整数の場合は下に移動します。引数を変数「i」としているため、今回のケースでは、1行目、6行目、11行目、16行目・・・201行目 という順番で下に移動します。 |
Borders(xlEdgeBottom) | RangeオブジェクトのBordersプロパティは、4種(上下左右)の罫線を引くことができます。引数に「xlEdgeBottom」を設定するとセルの下辺に罫線を設定できます。 |
LineStyle = xlContinuous | BorderオブジェクトのLineStyleプロパティは、罫線の種類を設定できます。 |
解説は以上となります。
上記のコードは、下線を引いたらそのままですが、下線を消すことができるようにすることと、ワークシート上にボタンを設置して、マウスのクリックでマクロを呼び出したいと思います。
Sub underlineDelete()
Cells.Borders.LineStyle = xlLineStyleNone
End Sub
「Cellオブジェクト」のコレクション「Cells」のプロパティ「Borders」を指定することで、指定したオブジェクトのすべての罫線にアクセスします。「xlLineStyleNone(罫線のスタイルなし)」を代入することで、下線を消すことができます。
① 「開発タブ」を選択
② 「挿入」をクリック
③ ボタン(フォーム コントロール)を選択
① 「下線を引く」ボタンを設置。ボタンの文言は右クリック→テキスト編集で修正可能。
② 「クリア」ボタンを設置。
③ それぞれのボタンに「マクロの登録」画面から、呼び出したい「マクロ名」を選択。
2種のボタンを設置することで、下線を引いたり、消したりすることが出来るようになりました。
今回の例では、罫線を下線( Borders(xlEdgeBottom) )で設定しましたが、ご存じのとおりExcelでは他の辺や斜めにも線を引くことができます。
名前 | 値 | 説明 |
xlDiagonalDown | 5 | 範囲の各セルの左上隅から右下に実行されている罫線 |
xlDiagonalUp | 6 | 左下隅から範囲内の各セルの右上隅に実行されている罫線 |
xlEdgeBottom | 9 | 範囲内の下側の罫線 |
xlEdgeLeft | 7 | 範囲の左端の罫線 |
xlEdgeRight | 10 | 範囲の右端の罫線 |
xlEdgeTop | 8 | 範囲内の上側の罫線 |
xlInsideHorizontal | 12 | 範囲外の罫線を除く、範囲内のすべてのセルの水平罫線 |
xlInsideVertical | 11 | 範囲外の罫線を除く、範囲内のすべてのセルの垂直罫線 |
今回の例では、罫線を実線(LineStyle = xlContinuous)で設定しましたが、ご存じのとおりExcelには様々な線を設定できます。VBAで指定する際の線の値は下記となります。
名前 | 値 | 説明 |
xlContinuous | 1 | 実線 |
xlDash | -4115 | 破線 |
xlDashDot | 4 | 一点鎖線 |
xlDashDotDot | 5 | ニ点鎖線 |
xlDot | -4142 | 点線 |
xlDouble | -4119 | 2本線 |
xlLineStyleNone | -4118 | 線なし |
xlSlantDashDot | 13 | 斜破線 |
上記の表にて「名前」に対して「値(番号)」が紐づいています。「名前」の代わりに「値(番号)」で指定してもプログラムは動きます。
ま、名前のほうがわかりやすいですけどね。
VBAを学びはじめて間もないですが、なかなか面白いです。身近なエクセルを操作するプログラムなので結果がすぐに目に見えますし、Microsoftの公式ドキュメントも充実してますし、何より実務に直結するのでやりがいがあります。これからも少しづつ技術を取り入れて、ブログで紹介したいと思います。