エクセルシートにVBAでShapeを使って、選択したセル範囲に縦線・横線を引く

エクセルシートにVBAを使って線を引くマクロを作った。

今年から出席簿がエクセル、そしてそこからの印刷保存になった。これを機会に欠席簿になったのだけど、なかなかすばらしいこと。市教委単位で様式が決められるのでもっと早くからやればできたのだけど、なかなかやる人がいなかった。

内容は

まずは横線

Sub Y_Line() '選択した1行で選択した範囲の真ん中に横線を引きます。転出入の線
Dim R As Range
ActiveSheet.Protect UserInterfaceOnly:=True
Set R = Selection
With ActiveSheet.Shapes.AddLine(R.Left, R.Top + R.Height / 2, R.Left + R.Width, R.Top + R.Height / 2).Line
  .ForeColor.RGB = RGB(255, 0, 0)
  .Style = 1
  .Weight = 1
End With
End Sub

 

次に縦線

Sub T_Line() '選択した1列で選択した範囲の真ん中に縦線を引きます。休業日などの線1日ごと
Dim R As Range
ActiveSheet.Protect UserInterfaceOnly:=True
Set R = Selection
With ActiveSheet.Shapes.AddLine(R.Left + R.Width / 2, R.Top, R.Left + R.Width / 2, R.Top + R.Height).Line
  .ForeColor.RGB = RGB(255, 0, 0)
  .Style = 1
  .Weight = 1
End With
End Sub

線を引くのに、範囲のLeftとTopしかなくてどうするのかと思ったら、WidthとHeightで左と下がわかるんだと、ついでに真ん中もわかるということ。この方が使いやすいんだろうな。納得。

もう一つ、保護について。

ActiveSheet.Protect UserInterfaceOnly:=True

これで、保護がかかっていてもVBAで操作ができる。そして、保護がかかってなければ保護をかけてしまう。なかなかこれもいい。