こんにちは。
このままにしても、終わりがありませんから、サンプルだけ出しておきます。
なお、
>基礎から勉強するかと言えば、私はしませんね。
>私には、もっと他にやるべきことがあります。
VBAを基礎から、おやりになるつもりがないのなら、相手にちゃんと情報を与えて、できる人にやり方は任せてください。基礎的な知識のない場合は、指定した方法では、概ね、その方法論は違うことが多いです。
簡単な正規表現だけの方法です。これをWord マクロで行う必要性はあまりありませんが、Word VBAで可能なように作りました。
この場合の区切りは、以前のログの文字パターンをサンプルとします。
正規表現の書き方は、以前、紹介したはずですから、なるべく、書籍のほうがよいです。Webサイトでは、単に、メタキャラクタだけの紹介にとどまっています。ただし、Perl など、種類がありますから、それは、よく見て選ばないといけません。
(1)
第一のあんアん亜龠123a123a
[123a][123a]
数字+英数が、中できちんとしたパターンがあれば、その前のものは削除可能です。
(2)
第一のあんアん亜龠a123123a
[a123][123a]
数字+英数の中身にパターンがなければ、基本的には、この文字列情報からは削除不可能です。
繰り返しますが、フォントの色で行うにしても、本来、その色を付けた定義自体があるはずですから、それを遡れば可能です。
可能なほうの(1)のパターンの意味は、
'全角の日本語文字の次が英数全角、ただし、'は、全角・半角を含む文字列が、1~4文字まである場合。
.Pattern ="([ぁ-龠])([A-z0-9’']{1,4})"
'標準モジュールが良い
'-------------------------------------------------
Sub TestMacro1()
'参照設定 Microsoft VBScript Regular Expressions 5.5
Dim Re As New RegExp
Dim mySelection As Selection
Dim sText As String
Dim Matches As MatchCollection
Dim Match As Match
Dim arText As Variant
Dim buf As String
Dim v As Variant
Selection.HomeKey Unit:=wdStory
Selection.EndKey Unit:=wdStory, Extend:=wdExtend
Set mySelection = Selection
sText = mySelection.Text
arText = Split(sText, vbCr)
With Re
.Pattern = "([ぁ-龠])([A-z0-9’']{1,4})"
.Global = False
.IgnoreCase = False
.Multiline = False
For Each v In arText
Set Matches = .Execute(v)
If Matches.Count > 0 Then
For Each Match In Matches
buf = buf & vbCr & Replace(v, Match.SubMatches(1), "", , 1)
Next
Else
buf = buf & vbCr & v
End If
Next
End With
ActiveDocument.Range.Text = buf
End Sub
補足
wendy02さんへ 今は、示されたコードの検証時間が無いので、とりあえず、今度の背景を説明します。 特許明細書で、実施例が複数ある場合の、用語+符号の付け方には、個人個人に違いがあります。例えば、エンジン装置の場合、 エンジン装置10、エンジン装置40、エンジン装置70と言う付け方が有ります。第1の実施形態では、エンジン装置10を構成する要素を、11~39の範囲で使います。 他の方法ですと、エンジン装置10A、エンジン装置10B、エンジン装置10Cと言う付け方が有ります。エンジン装置を構成する要素の符号は共通に使用しますが、実施形態で、違っているものについては、12A,12Bなどを用いるか、13と14のように異なった符号を使います。 ところで、 (1)英数字を赤色にするマクロで赤色の太字にしておく (2)エンジン装置10Aについて、選択する。 (3)先に教わったFirstIndex,Right,Left関数のコードをアレンジして、エンジン装置10Aから、10Aを取り出し、エンジン装置10A10Aとします。 (4)そうしますと、明細書中の全ての、第1のエンジン装置10Aは、エンジン装置10A10Aに変わります(後ろ側の10Aは赤字のままです)。 また、エンジン装置10Aと表示されていなくて、第1のエンジン装置と表示されているものは、エンジン装置10Aと変わります(10Aは黒字です)。 (5)ここで、再び、エンジン装置10A10Aについて、エンジン装置10Aに戻すことを全文について行います。そうしますと、エンジン装置10Aについてはそのままとなります。 ここまでは、自分で作ったコードで実現できています。 上記のような処理をしますと、エンジン装置10Aはエンジン装置10A10Aとなりエンジン装置10Aに戻るので良いのですが、 エンジン装置10Bやエンジン装置10Cについては、エンジン装置10A10Bやエンジン装置10A10Cになります(上記の処理により影響が出ます)。 そこで、先に教わったFirstIndex,Right,Left関数のコードをアレンジしてもできなかったので、新しい質問として出しました(今は、なんとかなりそうな感じになっています)。 ところで、 上記の処理を重ねると、特許明細書の特許請求の範囲に記載された、エンジン装置の用語は、エンジン装置10C10B10Aというふうに修正されます。これは、エンジン装置には、10Aと、10Bと、10Cとの3種類の用語が実施の形態において使われているということを表示してくれることになります。 質問に戻りまして、あんアん亜龠123aについて最初の処理を行うと、あんアん亜龠123bやあんアん亜龠123cについては、 あんアん亜龠123a123aではなくて、 あんアん亜龠123a123bや あんアん亜龠123a123cのようになります。 この場合、後側の123bや123cは、事前の設定により赤字で太字のままとなり、和文字に続く前側の123aは明朝で標準の表示にしてあります。それで、赤字で太字の英数字と、黒字で標準の英数字による差別化で、後者の英数字を取り除こうとしています。 他のコードで、赤字で太字の英数字を取り除いていますので、その部分を使おうかと思っています。 このような処理は、特許公報を取り寄せて、特許請求の範囲を解釈する場合、用語と図面の符号を照合し、用語に符号を付記して、権利範囲を把握し解釈しようとしますから、そして、この作業に1時間以上かかる面倒くさくてかったるい作業ですから、マクロ処理(随時処理)ができると大変便利になるわけです。 私が、マクロの勉強をしているのは、全て本業と結びついています。 示されたコードを後日いじってみます。その報告のために、お礼の欄を使っていません。敬具