わーぷろおじさん

WordやOffice関連の小細工の備忘録。

【word vba】縦に列挙した文字列をフィールドコードで括弧で囲う

概要

段落区切りで区切られた文字列をVBAでフィールドコードに取り込む

送付文書の連名宛名の右側だけに右波括弧を付けて、波括弧の外に「殿」を付ける(私の職場の)習慣をもとにマクロを作成

前提条件

列挙される文字列は改行によって区切られている(段落内改行は今回は無視する)

敬称は「殿」だけとする(マクロを修正すれば、いかようにでも)

フィールドコード

{EQ \b\rc\}(\s(文字列1,文字列2,…)) 殿}

EQフィールド

数式用フィールド

\bスイッチ

文字列を括弧で囲う

\rcオプション

括弧を右側だけにする

\}

右括弧を波括弧にする

\sスイッチ

上付き・下付き設定。オプションなしの場合は文字列を上下に左揃いで列挙

※\sスイッチの代わりに、\aスイッチと\alオプションでも同じ。

VBA

Public Sub フィールドコード化()
    If Selection.Fields.Count > 0 Then Exit Sub
    If Selection.Paragraphs.Count = 1 Then Exit Sub

    Dim c As Long
    c = Selection.Paragraphs.Count

    Call Selection.StartOf(wdParagraph, wdExtend)
    Call Selection.EndOf(wdParagraph, wdExtend)

    Dim p As Paragraph
    Dim s As String
    For Each p In Selection.Paragraphs
        s = s + Trim(Replace(p.Range.Text, vbCr, "")) + " ,"
    Next
    s = Left(s, Len(s) - 1)
    s = "\b\rc\}(\s(" + s + ")) 殿"

    Dim f As Field
    Set f = Selection.Fields.Add(Range:=Selection.Range, Type:=wdFieldFormula, Text:=s, preserveFormatting:=False)
    f.Code.Text = Trim(f.Code.Text)

    If c >= 5 Then
        With f.Code.Find
            .Text = "}"
            .Replacement.Font.Scaling = 80
            .Execute Replace:=wdReplaceAll
        End With
    End If

    Selection.InsertParagraphAfter
    Call Selection.StartOf(wdParagraph, wdExtend)
    Selection.ParagraphFormat.BaseLineAlignment = wdBaselineAlignFarEast50
End Sub
Public Sub フィールドコード解除() 
    If Selection.Paragraphs.Count <> 1 Then Exit Sub
    If Selection.Fields.Count <> 1 Then Exit Sub 

    Dim s As String 
    s = Trim(Selection.Fields(1).Code) 
    If InStr(1, s, "EQ \b\rc\}(\s(") = 0 Then Exit Sub 
    If InStr(1, s, ")) 殿") = 0 Then Exit Sub 

    s = Replace(s, "EQ \b\rc\}(\s(", "") 
    s = Replace(s, ")) 殿", "") 
    s = Replace(s, " ,", vbCr) 
    Selection.Text = Trim(s) & vbCr 
End Sub

※コードの詳細は説明しません。

使い方

フィールドコード化したい複数行(正確には段落)を選択した状態で、フィールドコード化マクロを実行。

解除するときはフィールドコードを選択した状態で解除マクロを実行

仕様

5行以上になると波括弧は太くなるので、5行以上の場合は、波括弧の幅倍率を80%にしている。

段落書式の「文字の配置」は「下揃い」に設定。下揃いにしないと「殿」の位置がずれる。