Microsoft Word で句読点が続く文字列を編集する

Microsoft Word で句読点が続く文字列を編集する

テキストのセクションが 2 つある Microsoft Word 文書があります。1 つ目は段落形式で、2 つ目はその段落形式がセグメントに分割され、句読点のない表に配置されています。次の操作を実行できる関数はありますか。

  • もし: 句読点のあるテキストでは、セクションの後に句読点が続きます。
  • それから: 表内の句読点のないテキストに句読点が追加されます。

Microsoft Word でこれが不可能な場合、この目的を達成するための他の推奨ツールはありますか?

以下は私の問題を説明するために Microsoft Word で撮影したスクリーンショットです。

これはタスクを説明する画像です

答え1

次のコードを使用して、表のセル内の段落に欠落している句読点を追加できます。これが実行される条件については、私のコメントを確認して、詳細情報を提供する必要があります。

Sub AddPunction()
Dim para As Paragraph, tbl As Table, tRow As Row
Dim tCell As Cell, cRng As Range, pRng As Range
For Each tbl In ActiveDocument.Tables
    For Each tRow In tbl.rows
        For Each tCell In tRow.Cells
            Set cRng = tCell.Range
            cRng.MoveEnd wdCharacter, -1
            If cRng.Paragraphs.Count > 0 Then
                For Each para In cRng.Paragraphs
                    Set pRng = para.Range
                    If Asc(pRng.Characters.Last) = 13 Then
                        pRng.MoveEnd wdCharacter, -1
                    End If
                    If Not Asc(pRng.Characters.Last) = 46 Then
                        pRng.Text = pRng.Text & "."
                    End If
                Next para
            End If
        Next tCell
    Next tRow
Next tbl
End Sub

コメントとして投稿された追加の質問に基づいて、私の元の回答を補足します。

マクロの作成または実行に関するリソースについては、この Microsoft サポート リンクを使用してください。 https://support.office.com/en-us/article/create-or-run-a-macro-c6b99036-905c-49a6-818a-dfb98b7c3c9c

新しく提供された情報に基づいて上記のコードを調整するという他の質問については、次のように変更します。

Sub TableLookBackAddPunctuation()
Dim para As Paragraph, tbl As Table, tRow As Row
Dim tCell As Cell, cRng As Range, pRng As Range
Dim rng As word.Range
For Each tbl In ActiveDocument.Tables
    For Each tRow In tbl.rows
        Set cRng = tRow.Cells(1).Range
        cRng.MoveEnd wdCharacter, -1
        If cRng.Paragraphs.Count > 0 Then
            For Each para In cRng.Paragraphs
                Set pRng = para.Range
                If Asc(pRng.Characters.Last) = 13 Then
                    pRng.MoveEnd wdCharacter, -1
                End If
                Select Case Asc(pRng.Characters.Last)
                    Case 33, 34, 35, 36, 37, 38, 39, 40, _
                            41, 42, 43, 44, 45, 46, 63
                        'do nothing, punctuation already set
                    Case Else
                        Set rng = pRng
                        rng.Collapse wdCollapseStart
                        With rng.Find
                            .ClearFormatting
                            .Format = False
                            .Forward = False
                            .MatchCase = True
                            .Text = pRng.Text
                            .Wrap = wdFindStop
                            .Execute
                            If .found Then
                                rng.MoveEnd wdCharacter, 1
                                Select Case Asc(rng.Characters.Last)
                                    Case 33, 34, 35, 36, 37, 38, 39, 40, _
                                            41, 42, 43, 44, 45, 46, 63
                                        pRng.Text = pRng.Text & rng.Characters.Last
                                    Case Else
                                        'do nothing, there's no punctuation
                                End Select
                            End If
                        End With
                End Select
            Next para
        End If
    Next tRow
Next tbl
End Sub

関連情報