皆さん、ピポットを値張りした後に罫線が必要な場合、どうやって罫線を引いていますか?

こういった表を

こうしたい場合。
恐らく、ポチポチ一本いっぽん罫線を引いていく人が多いと思います。
しかし、↑ぐらいの数だったら手作業でやっても全然時間がかかりませんが、これが100行、1000行となってきたら話は別です。
手作業でやるのなんてナンセンスです。
というわけで、今回はマクロ(VBA)を使用してエクセルで罫線を引く方法をご紹介します。このマクロを使えば2秒ぐらいで罫線が引き終わります。
今回はシンプルな罫線の引き方をご紹介します。
次回以降にもう少し条件を付けた罫線の引き方をご紹介する予定です。
目次
マクロ(VBA)で罫線を引く
縦線だけあらかじめ引いておきます。(全部自動化は次回以降にご紹介します。)
次に下記の式をマクロにぶち込みます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Dim row1 As Long row1 = 5 Do Until row1 = 200 If ThisWorkbook.Sheets("sheet2").Cells(row1, 2) <> "" Then Range(Cells(row1, 2), Cells(row1, 4)).Select Selection.Borders(xlEdgeTop).LineStyle = xlContinuous End If row1 = row1 + 1 Loop |
たったこれだけの式で罫線を自動で引くことができます。
早速、一文づつ解説をしていきます。
行数を指定する
row1 = 5
これは始まりの行数を指します。今回は”関西”が5行目にきているので、そこから表がスタートします。
これはいわゆる”変数”と呼ばれるものですが、その説明は割愛します。
マクロの解説本とかってすぐに変数の説明をしたがりますが、そんな説明をされても素人からしたらチンプンカンプン…
なので、とりあえずrow1=最初の行と憶えておいてください。
あなたが作った表の最初が10行目だったらrow1=10としましょう。
Do until row1 = 200
こちらは先ほどご紹介したrow1が200になるまで同じ作業を繰り返せ!という命令です。他にも同じ意味合いでfor構文というものがありますが、個人的にはuntilの方が好きです。
要するに200行目まで↓の処理をし続けろという命令です。
処理する内容
If ThisWorkbook.Sheets(“sheet2”).Cells(row1, 2) <> “” Then
これはエクセルの関数でもよく登場するIf構文です。
「もし〇〇だったらThen以下のことしろ!」という命令です。
今回の○○の部分は”sheet2″の”(5,2)が空欄でなかったら~としております。
マクロでは””←が空欄で”<>”がノットイコール
二つをつなげて、””(空欄)<>(ではない)となります。
Range(Cells(row1, 2), Cells(row1, 4)).Select
罫線を引きたい範囲を選択しています。5行目(row1)の2列目から4列目という意味です。
Cellsの左が始まりで右が終点です。
なので、もっと列がある表だとしたら、例えばCells(row1,15)となります。
Selection.Borders(xlEdgeTop).LineStyle = xlContinuous
ごちゃごちゃ書いていますが、これは罫線を引く式として認識すればOKです。
いちいち意味を理解したり、ましてや覚える必要なんて全くありません。
”TOP”の部分で罫線の場所を、”xlContinuous”の部分で罫線の種類を指定しています。
それだけ覚えておけば問題なしです。
罫線の場所 | 書くこと |
上 | top |
下 | bottom |
右 | right |
左 | left |
要するに、B列に文字が入っている場合、そのセルの上に罫線を引けという式です。
表を見てみましょう。

今回のマクロのミソは全セルに罫線を引くのではなく、事業所ごとに罫線を引くところにあります。それを、”事業所が入力されていたら、その上側に罫線を引く”という式で実現をしています。
まとめ
ここまで紹介しといてなんですが、この式だけでは複雑な表に罫線を引くことはできません。
なので、今回はあくまで罫線を引くマクロの助走的な位置づけで見ていただけたらと思います。
この基礎の考えを元に、次回以降で複雑な表に自動で罫線を引いていきます。
正直、マクロと罫線ってめちゃくちゃ相性がいいです。一瞬で作表が終わります。
その実感をあなたにも是非してもらいたいので他の記事も読んでもらえると嬉しいです。