Word VBA/マクロ 備忘録

作業効率化のため作成したマクロをバックアップ代わりにアップしていきます。

【Word VBA/マクロ】セルの罫線の太さ確認

サンプルコードでできること

セルの上下左右の罫線の太さを表示します。
カーソルを置いた単一セルを想定していたのですが、複数セルでも動作します。
ただ下図のように、どこのセルの線幅か分かりづらいです。

コードの説明

   If Selection.Information(wdWithInTable) = False Then
        MsgBox "表外にカーソルがあります。"
        Exit Sub
   End If

カーソルが表外にあるとき、メッセージを表示して終了します。

    For Each cel In Selection.Cells
        If cel.Borders(wdBorderTop).LineStyle = wdLineStyleNone Then
	'省略
        Else
	'省略
        End If
   '省略
    Next

選択したセルごとに、上、下、左、右の順に線の太さを確認して、変数に線幅を格納します。

      haba = getLineWidth(cel.Borders(wdBorderTop).LineWidth)

「cel.Borders(wdBorderTop).LineWidth」で線の幅を取得します。
0.5ptの場合、取得する値は「0.5」ではなく「4」です。
このまま表示しても、線幅はいったい何ptなのかわかりません。
getLineWidthは数値が何ptに該当するのか、調べるためのFunctionプロシージャです。別のプロシージャに分けた理由は、4回記述が必要で冗長なコードになるためです。

Function getLineWidth(celLineWidth As Long) As String
           '省略
        Select Case celLineWidth
           Case 2
               haba = "0.25pt"
           Case 4
               haba = "0.5pt"
           '省略
        End Select
           '省略
End Function

Select Case構文を用いて、LineWidthプロパティで取得した値ごとに、線幅を変数habaに格納します。

Sub getCellLineWidth()
'選択セルの罫線の太さを表示します。
   Dim cel As Cell, msg As String, haba As String
   
   If Selection.Information(wdWithInTable) = False Then
        MsgBox "表外にカーソルがあります。"
        Exit Sub
   End If
   
    For Each cel In Selection.Cells
        If cel.Borders(wdBorderTop).LineStyle = wdLineStyleNone Then
            msg = msg & "上:" & "罫線なし" & vbCrLf
        Else
            haba = getLineWidth(cel.Borders(wdBorderTop).LineWidth)
            msg = msg & "上:" & haba & vbCrLf
        End If
        
        If cel.Borders(wdBorderBottom).LineStyle = wdLineStyleNone Then
            msg = msg & "下:" & "罫線なし" & vbCrLf
        Else
            haba = getLineWidth(cel.Borders(wdBorderBottom).LineWidth)
            msg = msg & "下:" & haba & vbCrLf
        End If
        
        If cel.Borders(wdBorderLeft).LineStyle = wdLineStyleNone Then
            msg = msg & "左:" & "罫線なし" & vbCrLf
        Else
            haba = getLineWidth(cel.Borders(wdBorderLeft).LineWidth)
            msg = msg & "左:" & haba & vbCrLf
        End If
        
        If cel.Borders(wdBorderRight).LineStyle = wdLineStyleNone Then
            msg = msg & "右:" & "罫線なし" & vbCrLf
        Else
            haba = getLineWidth(cel.Borders(wdBorderRight).LineWidth)
            msg = msg & "右:" & haba & vbCrLf
        End If
        msg = msg & vbCrLf
    Next

    MsgBox msg, Title:="罫線の幅"
End Sub

Function getLineWidth(celLineWidth As Long) As String
'WdLineWidthのメンバーの値を受け取り、線の幅を返します。
'(wdLineWidth025ptの値「2」を受け取ると「0.25pt」を返す。)
    Dim haba As String
        Select Case celLineWidth
           Case 2
               haba = "0.25pt"
           Case 4
               haba = "0.5pt"
           Case 6
               haba = "0.75pt"
           Case 8
               haba = "1pt"
           Case 12
               haba = "1.5pt"
           Case 18
               haba = "2.25pt"
           Case 24
               haba = "3pt"
           Case 36
               haba = "4.5pt"
        End Select
    getLineWidth = haba
End Function