Word VBA/マクロ 備忘録

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

【Word VBA/マクロ】段落番号の後にタブを挿入

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

選択した段落の段落番号の後にタブを挿入します(処理対象は自動番号ではなく、テキストの番号)。スペースが挿入されている場合は削除して、代わりにタブを挿入します。

下記の番号の種類を段落番号と判定しています。
(数字のみは段落番号と判定。aのみは段落番号と判定しない。)
1、1.、1)、(1)、[1]、a.、a)

Sub 段落番号の後にタブ挿入()
    数字の後に挿入 vbTab
    英字の後に挿入 vbTab
    括弧数字の後に挿入 vbTab
End Sub

Private Sub 数字の後に挿入(str As String)
    Const strFirst As String = "[))0-9..]"
    Dim i As Long, rngSel As Range
    Dim para As Paragraph
    Set rngSel = Selection.Range
    
    For Each para In Selection.Paragraphs
        With para.Range
            If IsNumeric(.Characters(1).Text) = False _
                Then GoTo Continue
            i = 2
            Do While .Characters(i).Text Like strFirst
                i = i + 1
            Loop
            Do While .Characters(i).Text = " " _
                Or .Characters(i).Text = " " _
                Or .Characters(i).Text = vbTab
                     .Characters(i).Text = ""
            Loop
            .Characters(i - 1).InsertAfter str
        End With
Continue:
    Next
End Sub

Private Sub 英字の後に挿入(str As String)
    Const strAlpha As String = "[a-z]"
    Const strKigo As String = "[..))]"
    Dim i As Long, rngSel As Range
    Dim blKigo As Boolean
    Dim para As Paragraph
    Set rngSel = Selection.Range

    For Each para In Selection.Paragraphs
        blKigo = False
        With para.Range
            If Not (.Characters(1).Text Like strAlpha) _
                Then GoTo Continue
            i = 2
            If .Characters(i).Text Like strAlpha Then
                Do While .Characters(i).Text Like strAlpha
                    i = i + 1
                Loop
                Do While .Characters(i).Text Like strKigo
                    i = i + 1
                    blKigo = True
                Loop
            ElseIf .Characters(i).Text Like strKigo Then
                Do While .Characters(i).Text Like strKigo
                    i = i + 1
                    blKigo = True
                Loop
            End If
            If blKigo = True Then
                Do While .Characters(i).Text = " " _
                    Or .Characters(i).Text = " " _
                        Or .Characters(i).Text = vbTab
                         .Characters(i).Text = ""
                Loop
                .Characters(i - 1).InsertAfter str
            End If
        End With
Continue:
    Next
End Sub

Private Sub 括弧数字の後に挿入(str As String)
    Const strNum As String = "[0-9]"
    Dim i As Long, rngSel As Range
    Dim para As Paragraph
    
    Set rngSel = Selection.Range
    
    For Each para In Selection.Paragraphs
        i = 1
        With para.Range
            If .Characters(i).Text <> "(" And _
                .Characters(i).Text <> "[" Then GoTo Continue
            i = i + 1
            Do While .Characters(i).Text Like strNum
                i = i + 1
            Loop
            If .Characters(i).Text <> ")" And _
                .Characters(i).Text <> "]" Then GoTo Continue
            i = i + 1
            Do While .Characters(i).Text = " " _
                Or .Characters(i).Text = " " _
                Or .Characters(i).Text = vbTab
                     .Characters(i).Text = ""
            Loop
            .Characters(i - 1).InsertAfter str
        End With
Continue:
    Next
End Sub

コードの説明

数字後に挿入 vbTab

vbTabを" "や" "に変えると、段落番号の後に半角や全角スペースを挿入できます。