Skip to content

Instantly share code, notes, and snippets.

@furyutei
Last active June 30, 2022 00:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save furyutei/43d53cbd7927670c0d613943f5a1c781 to your computer and use it in GitHub Desktop.
Save furyutei/43d53cbd7927670c0d613943f5a1c781 to your computer and use it in GitHub Desktop.
[Excel][VBA] 斜め罫線のような背景色を設定する試み

[Excel][VBA] 斜め罫線のような背景色を設定する試み

エクセルの神髄@yamaoka_ssさんが、

表の最後は斜線で全て潰せと言われたとき(言われたとしたら)、あなたはどうしますか?

のようなお題をだされていたので、ネタでやってみました
サンプルファイル(空欄に斜め罫線.xlsx)はこちらからダウンロードできます。

1.mp4

解説

まっさきに思いつくのは、条件付き書式で、空欄のときに斜め罫線が表示されるように設定しておくことでしょう。
ところが、やってみるとわかりますが、条件付き書式ではなぜか斜め罫線は設定できません……

次に逆転の発想で、予めセルの書式設定で斜め罫線を引いておき、条件付き書式で空欄以外の罫線を「なし」にしておけば、とも考えたのですが、そのように設定しても斜め罫線は消えません……。

そこで、苦し紛れに思いついた方法が、

  • 予めセルの書式設定で、斜め罫線のように見える背景色を設定しておく
  • 条件付き書式で空欄以外(=B2<>"")の背景色を白色にする

というものです。

それでは「斜め罫線のように見える背景色」はどのように設定するかというと、「塗りつぶし効果」のグラデーションを利用します。
ただし、セルの書式設定で可能な「塗りつぶし効果」にはそのような選択肢がないため、最初だけはVBAの力を借ります(後述の「斜め罫線のように見える背景色の作り方」参照)。
一度セルに設定しておけば、後はそのセルをコピー(書式のコピーでも可)するだけで使えます(コピー先はマクロ有効ワークシート(*.xlsm)でない通常のワークシートでも構いません)。

なお、言うまでもなく、設定が煩雑でわかりにくく見た目もイマイチな(正規の罫線とくらべて見栄えが悪い)ため、ネタ以上のものではないので、業務などに使ったりするのはオススメしません。

斜め罫線のように見える背景色の作り方

マクロ有効ワークシートを作成し、VBEで標準モジュールを挿入して

のソースコードを貼り付け、空のシートをアクティブにした状態で「斜め罫線のような背景色を設定」プロシージャを実行すると、A1に右上→左下の罫線っぽい背景色、B1に左上→右下の罫線っぽい背景色が設定されます。
サンプルファイル(斜め罫線のような背景色.xlsm)をこちらからダウンロードできます

関連

Option Explicit
Sub 斜め罫線のような背景色を設定()
Dim BaseCell As Range: Set BaseCell = ActiveSheet.Range("A1")
SetlDiagnalLine BaseCell.Offset(0, 0), rgbWhite, rgbBlack, 45 ' 右上→左下
SetlDiagnalLine BaseCell.Offset(0, 1), rgbWhite, rgbBlack, 135 ' 左上→右下
BaseCell.Activate
End Sub
Sub SetlDiagnalLine(TargetCell, Color1, Color2, Angle)
With TargetCell.Interior
.Pattern = xlPatternLinearGradient
.Gradient.Degree = Angle
With .Gradient.ColorStops
.Clear
With .Add(0)
.Color = Color1
.TintAndShade = 0
End With
With .Add(0.489999999999)
.Color = Color1
.TintAndShade = 0
End With
With .Add(0.49)
.Color = Color2
.TintAndShade = 0
End With
With .Add(0.499999999999)
.Color = Color2
.TintAndShade = 0
End With
With .Add(0.5)
.Color = Color1
.TintAndShade = 0
End With
With .Add(1)
.Color = Color1
.TintAndShade = 0
End With
End With
End With
End Sub
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment