Excelで困ることの一つと言えば凝った表です。罫線の太さが細かく調整されていると見た目がいいです。一方、メンテナンスが面倒になります。太さが混在していると非常に醜いです。
シンプルな表ならば一括して太さを指定し直せばいいのですが、罫線が不要な部分にもセットされてしまいます。
そこで、罫線がある部分だけを対象に太さを一括して変えるマクロを考えました。
Sub 選択範囲内の罫線の太さを変える()
Dim border_index As Integer
Dim border_weight As Integer
Dim res As String
Dim mycell
Const maxrow = 100
Const maxcol = 100
Const str = "線の太さ。1-極細、2-細、3-中、4-太"
res = InputBox(str, "太さ", 2)
If res = "" Then
Exit Sub
End If
border_weight = CInt(res)
If border_weight > 4 Or border_weight < 1 Then
MsgBox ("線の太さが範囲外。")
Exit Sub
End If
If Selection.rows.Count > maxrow Or Selection.Columns.Count > maxcol Then
res = MsgBox("範囲が広いので" & maxrow & "行×" & maxcol & "列を処理。", vbOKCancel)
If res = vbCancel Then
Exit Sub
End If
Range(Cells(1, 1), Cells(maxrow, maxcol)).Select
End If
For Each mycell In Selection
For border_index = 7 To 10 'セルの4辺(左上下右)
If mycell.Borders(border_index).LineStyle <> xlLineStyleNone Then
mycell.Borders(border_index).Weight = border_weight
End If
Next border_index
Next mycell
End Sub
Dim border_index As Integer
Dim border_weight As Integer
Dim res As String
Dim mycell
Const maxrow = 100
Const maxcol = 100
Const str = "線の太さ。1-極細、2-細、3-中、4-太"
res = InputBox(str, "太さ", 2)
If res = "" Then
Exit Sub
End If
border_weight = CInt(res)
If border_weight > 4 Or border_weight < 1 Then
MsgBox ("線の太さが範囲外。")
Exit Sub
End If
If Selection.rows.Count > maxrow Or Selection.Columns.Count > maxcol Then
res = MsgBox("範囲が広いので" & maxrow & "行×" & maxcol & "列を処理。", vbOKCancel)
If res = vbCancel Then
Exit Sub
End If
Range(Cells(1, 1), Cells(maxrow, maxcol)).Select
End If
For Each mycell In Selection
For border_index = 7 To 10 'セルの4辺(左上下右)
If mycell.Borders(border_index).LineStyle <> xlLineStyleNone Then
mycell.Borders(border_index).Weight = border_weight
End If
Next border_index
Next mycell
End Sub
範囲を選択して実行すると、選択範囲内の罫線の太さを一律に変更します。
マクロで罫線を取り扱う場合によく使う定数は次の通りです。
名前 | 値 | 説明 |
---|---|---|
xlContinuous | 1 | 実線 |
xlDash | -4115 | 破線 |
xlDashDot | 4 | 一点鎖線 |
xlDashDotDot | 5 | ニ点鎖線 |
xlDot | -4118 | 点線 |
xlDouble | -4119 | 2本線 |
xlLineStyleNone | -4142 | 線なし |
xlSlantDashDot | 13 | 斜破線 |
名前 | 値 | 説明 |
---|---|---|
xlHairline | 1 | 極細(最も細い罫線) |
xlThin | 2 | 細い |
xlMedium | -4138 | 中 |
xlThick | 4 | 太い (最も太い罫線) |
名前 | 値 | 説明 |
---|---|---|
xlDiagonalDown | 5 | 範囲内の各セルの左上隅から右下への罫線 |
xlDiagonalUp | 6 | 範囲内の各セルの左下隅から右上への罫線 |
xlEdgeLeft | 7 | 範囲内の左端の罫線 |
xlEdgeTop | 8 | 範囲内の上側の罫線 |
xlEdgeBottom | 9 | 範囲内の下側の罫線 |
xlEdgeRight | 10 | 範囲内の右端の罫線 |
xlInsideVertical | 11 | 範囲外の罫線を除く、範囲内のすべてのセルの垂直罫線 |
xlInsideHorizontal | 12 | 範囲外の罫線を除く、範囲内のすべてのセルの水平罫線 |
コメント
こういうのが、役に立つマクロの見本ですね。すごく勉強になりました。使わせていただきます。心から感謝いたします。
>nob!さん
お役に立てて嬉しいです。
VBAコードを書いたことがない初心者です。コピー&ペーストして利用させていただきます。
本当に助かります。感動しました。誠にありがとうございます。
ご利用いただきありがとうございます。
お役に立てたのであれば幸いです。