キーワードをテレコにしたいときに
文を書き進めていくと、2つのキーワードをテレコにしたいときがあります。
例えば「第1部材」を書いた後、説明の順番で どうしても「第1部材」の前に「第2部材」を書き入れたくなることがあります。そのまま書き入れると、「第1部材」の前に唐突に「第2部材」が登場してしまいます。
Sub さかさまなり()
Dim UD As Word.UndoRecord
Call 記録開始(UD)
On Error GoTo er:
Dim rng As Range
Dim TXT1 As String, TXT2 As String
Dim tmp As String
Dim 選択色 As Long
選択色 = RGB(255, 102, 0) '選択時の色をセット
Set rng = Selection.Range
If rng.Start = rng.End Then GoTo er:
TXT1 = Selection.Text
TXT2 = GetSetting("マーク", "Change", "Word", "##")
If TXT2 = "##" Or TXT2 = "" Then
Call 置き換えC(TXT1, TXT1, 選択色)
SaveSetting "マーク", "Change", "Word", TXT1
Else
If TXT2 <> "" And TXT2 <> Chr(13) Then
tmp = "@@@@@■@@@@@"
Call 置き換えC(TXT1, tmp, 選択色)
Call 置き換えC(TXT2, TXT1, 選択色)
Call 置き換えC(tmp, TXT2, 選択色)
rng.Select
End If
SaveSetting "マーク", "Change", "Word", ""
End If
Selection.Collapse Direction:=wdCollapseEnd
Set rng = Nothing
Call 記録終了(UD)
Set UD = Nothing
Exit Sub
er:
Set rng = Nothing
SaveSetting "マーク", "Change", "Word", ""
Call 記録終了(UD)
Set UD = Nothing
End Sub
Sub 置き換えC(ByRef 置換前 As String, ByRef 置換後 As String, 置換色 As Long)
With ActiveDocument.Range(0, 0).Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = 置換前
.Replacement.Text = 置換後
.Replacement.Font.Color = 置換色
.Format = True
.Forward = True
.Wrap = wdFindContinue
.MatchWildcards = False
.MatchFuzzy = True
.Execute Replace:=wdReplaceAll
.Format = False
.Font.Color = False
.Replacement.Font.Color = False
.Text = ""
.Replacement.Text = ""
.MatchFuzzy = False
End With
End Sub
Sub 記録開始(ByRef UD As Word.UndoRecord)
If Not UD Is Nothing Then Exit Sub
Set UD = Application.UndoRecord
If UD.IsRecordingCustomRecord = False Then UD.StartCustomRecord "さかさまなり"
End Sub
Sub 記録終了(ByRef UD As Word.UndoRecord)
If UD Is Nothing Then Exit Sub
If UD.IsRecordingCustomRecord = True Then UD.EndCustomRecord
End Sub
例えば、次のような文において、「なつ」と「あつ」をさかさまにしたいとき、一旦「あつ」を選択した状態でこのマクロを実行します。

すると、↓のように、「あつ」の色が変化し、「あつ」が レジストリに格納されます。

次に、入替え対象となる「なつ」を選択した状態で再度マクロ「さかさまなり」 を実行します。

すると、レジストリから「あつ」が読み込まれ、↓のように、「あつ」と「なつ」が入れ替わります。
