|
まず、御質問の件ですが、
ワイルドカードを使って文字列を検索するのが、最もやり易いと思います。
「loop 機能を使わないでも…」についてですが、
検索する文字列が複数箇所ある場合は、使わないわけにはいかないでしょう。
『1.[Box・・・で始まる行を含め、そこから5行分をすべて削除する。』についてだけですが、
一例として下記のマクロを考えました。
他の条件は、このマクロの後に処理を継ぎ足すか、
繰り返し処理で検索文字列を差し替えるとかでできると思います。
検索した文字列が行の先頭か?その文字列の後に文字があるか?を
マクロで実現するのが難しいですね。
文書の内容によっては、マクロがもっと単純あるいは複雑になることもあると思いますが。
(例えば、実際の文書で『[Box・・・』が必ず行の先頭にあって
「・・・」が必ずあるなら、もっと単純で済みます。)
そのようなわけで「myString」の値(ワイルドカードの検索文字列)は、
文書の内容(文章をどう入力したか)を私なりに想像した一例ですので、
tootsieさんの文書ファイルに完全に適合しているかどうかは、
断言できませんので御容赦ください。
下のマクロは既存のものからコピーしてきたので、
検索範囲の判断という余分な処理もしています。
(不要な部分を削るのは簡単ですので、そのままにしてます。これも御容赦を。)
Sub myFindText()
Rem *----*----* *----*----* *----*----* *----*----*
Rem 検索置換処理
Rem カーソル位置から文書の末尾までの範囲を検索する。
Rem *----*----* *----*----* *----*----* *----*----*
Dim myString As String
Dim i As Integer
Dim myRange As Range
Dim myChrs As Characters
Dim myChrsFound As Characters
Dim myText As String
Dim myLen As Long
Dim myPos As Long
Dim myCursor As Long
'
myString = "[[]{1,1}Box[!^8-^32]{1,}[^11^13]{1,}"
'
Rem カーソル位置の行の先頭に移動する。
Selection.HomeKey Unit:=wdLine, Extend:=wdMove
'
Rem カーソル位置から文書の末尾までの範囲を選択する。
Selection.EndKey Unit:=wdStory, Extend:=wdExtend
'
Set myRange = Selection.Range
Set myChrs = myRange.Characters
Selection.Collapse wdCollapseStart
'
With Selection.Find
.ClearFormatting
.Text = myString
.Forward = True
.Wrap = wdFindStop
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchFuzzy = False
.MatchWildcards = True
Do
.Execute
If Not .Found Then Exit Do
'
Set myChrsFound = Selection.Range.Characters
'
Rem 検索の範囲外の場合、処理しない。
If myChrsFound.First.Start < myChrs.First.Start Then Exit Do
If myChrsFound.Last.End > myChrs.Last.End Then Exit Do
'
Rem カーソルを行の先頭に戻す。
Rem 検索した文字列が行の先頭かどうか判断する。
myLen = Len(Selection.Range.Text)
myPos = Selection.HomeKey(Unit:=wdLine, Extend:=wdMove)
myPos = myPos + myLen
'
If myPos = 0 Then
Rem 行の先頭だった場合
Rem MsgBox "選択範囲は移動されませんでした。"
Selection.MoveDown Unit:=wdLine, Count:=5, Extend:=wdExtend
Selection.Range.Text = ""
Else
Rem 行の先頭でない場合、読み飛ばし。
.Execute
Selection.Collapse wdCollapseEnd
End If
'
myCursor = myChrsFound.First.Start - myChrs.First.Start + 1
i = Int(myCursor * 100 / myChrs.Count)
Application.StatusBar = "myFindText" & ":処理中" & " " & Format(i, "##0") & "%"
Loop
End With
'
Rem カーソル位置を元に戻す。
myRange.Select
Selection.Collapse wdCollapseStart
'
Set myRange = Nothing
Set myChrs = Nothing
Set myChrsFound = Nothing
End Sub ' myFindText *----*----* *----*----* *----*----* *----*----*
|
|