セルをコピーしたり行を追加するときに罫線が崩れることがあった。
その仕様を把握し回避する方法を忘れないようまとめた。
イラっとする罫線の挙動
いろんな種類の罫線を使ってなんとなく雰囲気出そうとしている表で大体遭遇する。
なんでこうなるの?
仕様は仕様なのだが普段注意深く観察していないと理解できないものだった。
2行でまとめると
- 書式変更は変更した罫線以外も更新している
- 書式変更はまわりのセルの書式も更新している
前提となる仕様
細かい仕様の前に、前提となる軽めの仕様を2点挙げる。
1.罫線はセルごとに上下左右4箇所に指定できる
例えば、書式設定やリボンのボタンを押して簡単に四角い罫線を引いてはいるが、その裏では1つのセルに上下左右4か所の罫線を指定している。
実際マクロの記録をしながら四角を書くと4つの罫線が指定されていることが分かる。
Sub Macro1()
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
End Sub
2.罫線はどちらかのセルの設定が反映されている
罫線はセルとセルの間に表示されているが、その罫線の設定はどちらかのセルの設定が反映されたものになる。
隣り合ったセルそれぞれで異なる罫線を指定した場合、重なった部分は優先順位の高い罫線が表示される。ここで重要になるのは、優先順位の低い罫線は表示されないだけで設定は生きているということである。
優先順位の詳細は「[Excel]罫線の優先度を今一度整理する」を参照。
とりあえず以上の仕様を知っていれば、以下の挙動は当然の動きに見えるはず。
重なって隠れている太線が息を吹き返した。(裏に隠れていただけ)
隠れている罫線なんて把握できない
ごもっとも。でもこれが原因。
それでは書式が崩れる瞬間を見ていこう。
書式変更は変更した罫線以外も更新している
書式設定で表示される罫線のプレビューのうち、外枠はセル自体がもつ罫線の設定ではなく見た目上の罫線が表示される。
例えば先ほどコピペで重ねた太線の四角を書式変更しようとすると、上下左右太線の設定がされているセルにもかかわらず右辺が二重線で描かれてしまう。
この状態で罫線の一部を変更するとどうなるのか。
関係のない左辺を消してみると・・・、
なんと右辺も変わってしまった。
変更予定のない罫線の設定を知らぬ間に変えてしまうのである。
書式変更はまわりのセルの書式も更新している
たぶんこっちが凶悪。
指定したセル以外の書式も変えてしまうケースがあった。
先ほどと同じように太線のセルの書式設定を開いて、今度は右辺を実線に変えてみると・・・、
なんと二重線のセルの左辺が消えてしまった。これは動揺する。
でも冷静に考えるとこれは仕方がない事。実線は二重線より表示の優先度が低いから、実線を表示するには二重線を消さなくては表示できないもの。
表示の体裁をそろえるためとはいえ、変更予定のないセルの設定が変わってしまう挙動はモヤっとする。
コピペなら周りのセルを壊さない
書式設定を開いて罫線を変更すると周りに影響することがあるが、コピーペーストだと影響しないようだ。これは救いの神。
で、これらがどう影響しちゃってたのか。
冒頭で紹介したイラっとする挙動の設定と対策を見てみる。
対策1.見出しの二重線が3行目に設定されているのが悪いので2行目で設定しよう。
3行目の上辺に二重線を設定しているため、それをコピーするとすべての上辺にコピーされてしまう。
見出しの下辺に二重線を設定すべきだった。
↓こちらが罫線が崩れる設定手順。3行目で書式設定をしてしまっている。
↓で、こちらが罫線が崩れない設定手順。2行目で書式設定をする。
注意しておきたいのは、この手順は3行目の上辺を壊す(罫線「なし」になる)手順になっているため最適なやり方ではない。
最適ではないが通常の業務ならこの程度の対策で十分だと思う。少なくとも二重線の課題は解決できている。
手順は面倒だが3行目を崩さないやり方は対策3に後述する。
対策2.太線が最終行に設定されているのが悪いので最終行のもう一つ下の行で設定しよう。
最終行の下辺に太線が設定されていたためコピー先についてきてしまっているのが原因。
最終行のさらに1つ下(9行目)の上辺に太線を設定すれば解決できる。
ただし、こちらも前述した対策1と同様に、書式設定を開いて9行目の上辺を太線に変更すると、8行目の下辺の実線が「なし」に変更される。
太線はコピペで設定しよう。
対策3.見出しの二重線を設定した後に何もしていないのが悪いので、面倒だけど修正しよう。
セルをコピーしたら一部欠けている問題。
見出しの下辺の二重線を引いたときに3行目の上辺が消えてしまったのをそのまま下にコピーしたからだろう。
見出しに二重線を引いた後は、3行目の上辺が消えているので、上辺が実線になっているセルを枠外の適当なセルに作って3行目にコピーしておけばよい。
対策1でも書いたように通常業務ではちょっとやりすぎかもしれない。
データをコピペして使わないのであればここまでやる必要はないと思う。
対策4.隠れている罫線を把握していないのが悪い(悪くない)ので、見つけたら修正しよう。
原因を作り出さないように注意していてもなってしまうものはなる。
見つけたら修正で。
おまけ
コピペしたら別の罫線が現れる、なんてのも仕様が分かっていれば作れるね。
まとめ
罫線の仕様を意識しつつなるべく崩さないような表になるよう心掛けてみる。
というか、いろんな罫線を使った表はもうやめよう。やめれば解決。テーブル使おう。
2018/09/22 追記
8年前の時点で同じ内容あった。こちらの方が詳しいので大変参考になった。
Excel 罫線の挙動を調べてみた | miauの避難所