0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

VBAマクロで設計書などの格子を自動的に描画する方法

Posted at

#何がしたいのか

設計書(環境設計書、詳細設計書、パラメータ、デザインシート)等で項目や値に対して格子を引く時がありますよね?(私の環境だけかな)その格子を自動的に引きたいってのが目的です。意外とこの格子作成って面倒です。複数行であればそこまで大変ではないですが、何十行、何百行もある場合はもう・・・

画像で表したほうが早いですね。

これを
VBAマクロ格子1.PNG

こうしたいだけ
VBAマクロ格子2.PNG
※色は手動でつけてます

上記の操作を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

値の一つ左のセルの中身が"○","〇","●","■","□"である場合は線を描画しないようにしています。
基本形はこのコードになりますが、一行目のみ背景の色を付けたり、一行目のみ下線を二重線にしたり等工夫する余地はあると思います。また、コードもマクロの記録で作成した箇所が大半なので無駄が多いと思います。インデント?何それ?

#使い方
格子を作りたい範囲に値を入力しその範囲を選択後、マクロを実行するだけです。

#最後に
実際このマクロが役に立つかわかりませんが、お役にたてば幸いです。
また、このコードをもとに改良できた等あれば共有していただけたら嬉しいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?