#何がしたいのか
設計書(環境設計書、詳細設計書、パラメータ、デザインシート)等で項目や値に対して格子を引く時がありますよね?(私の環境だけかな)その格子を自動的に引きたいってのが目的です。意外とこの格子作成って面倒です。複数行であればそこまで大変ではないですが、何十行、何百行もある場合はもう・・・
画像で表したほうが早いですね。
上記の操作をVBAマクロを使用して実現しています。
元々VBAを使ったことはなかったのですが社内で1日だけ研修があったので先生の話半分で作ってみました。
最近また設計書を作る機会があり、一瞬で格子の作成されるさまが気持ちいいのと楽さに改めて感動ました。
#コード
自動格子作成を実現するコードはいかになります。
Sub 格子作成()
Dim Farst As Range '値が入っているセル
Dim Last As Range '最終セル
Set Last = Selection(Selection.Count)
For Each Farst In Selection '選択セル範囲ループ
If (Farst.Offset(0, -1).Value = "□") Then ' 左のセルが□であれば何もしない
ElseIf (Farst.Offset(0, -1).Value = "■") Then ' 左のセルが■であれば何もしない
ElseIf (Farst.Offset(0, -1).Value = "○") Then ' 左のセルが○であれば何もしない
ElseIf (Farst.Offset(0, -1).Value = "●") Then ' 左のセルが●であれば何もしない
ElseIf (Farst.Value <> "") Then 'セルに値が入っている場合格子作成する
'以降上下左右の枠線を描画
Range(Farst, Last).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
End If
Next
End Sub
値の一つ左のセルの中身が"○","〇","●","■","□"である場合は線を描画しないようにしています。
基本形はこのコードになりますが、一行目のみ背景の色を付けたり、一行目のみ下線を二重線にしたり等工夫する余地はあると思います。また、コードもマクロの記録で作成した箇所が大半なので無駄が多いと思います。インデント?何それ?
#使い方
格子を作りたい範囲に値を入力しその範囲を選択後、マクロを実行するだけです。
#最後に
実際このマクロが役に立つかわかりませんが、お役にたてば幸いです。
また、このコードをもとに改良できた等あれば共有していただけたら嬉しいです。