重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

xabcxdefgxhijk・・・ のように並んだ文字列を

xabc(改ページ)

xdefg(改ページ)

xhijk・・・

のように,xの位置で自動的に改ページしたい。

------------------------------------------
上記の動作を実行するためのマクロを見よう見まねで
以下に示すように作成したのですが,成功したり成功しなかったりします。
原因が分かる方ご指摘ご修正いただけるとありがたいです。
(Wordのマクロは今回始めて作成する全くの初心者です。)

WordのバージョンはOffice2003です。
よろしくお願いいたします。

------------------------------------------
Sub kaipage()

Dim blnFound As Boolean
Dim rngContent As Range
Dim intCount As Integer

blnFound = True
Set rngContent = ActiveDocument.Content
intCount = 0

Do While blnFound = True
With rngContent.Find
.ClearFormatting
.Wrap = wdFindContinue
.Text = "x"
.Replacement.Text = "$"
.Execute Replace:=wdReplaceOne, Forward:=True
End With

Selection.Find.Execute
Selection.InsertBreak Type:=wdPageBreak

blnFound = rngContent.Find.Found
If blnFound = True Then intCount = intCount + 1
Loop
MsgBox (intCount & "個見つかりました。")

End Sub

A 回答 (2件)

マクロを使わないと駄目なの?


質問にあるマクロも意味不明な部分があります。
[マクロ記録]をとって、それをアレンジしたほうが良いのでは?

Wordの基本的な部分を知っていて、マクロ処理しているのならば
説明しやすいのですが、他の回答もつかないのは意味不明部分が
多いからでは。

一般機能の[置換]で以下の処理をしてみてから、使いやすく編集
をマクロで作ってみてください。

[置換]ダイアログをだし、[あいまい検索]のチェックをはずす。
[検索する文字列] : x
[置換後の文字列] : ^m^&
[すべて置換]ボタンで置換したら、[閉じる]。
不要な改ページがあったら削除。

「^m^&」の意味は[改ページ+検索する文字列]になっています。
なので、xの前に強制的に改ページが入ります。
質問の例としての文字列「xabcxdefgxhijk・・・」の場合だと、
最初のxabcの前にも改ページが入ってしまいますので、それだけ
削除することになります。

マクロ処理するのなら、これを前提に最初のxを除く部分で置換
するようなマクロを作ってみてはいかが。
    • good
    • 0
この回答へのお礼

マクロを使わずにやりたかったことができました!ありがとうございます。

お礼日時:2011/10/31 09:21

(改ページ)


abc(改ページ)
defg(改ページ)
hijk
のように、行頭のxがなくなったり、最初に改ページが挿入されたりでよければ
以下のように書き換えればよさそう。

Sub kaipage2()

Dim blnFound As Boolean
Dim rngContent As Range
Dim intCount As Integer

blnFound = True
Set rngContent = ActiveDocument.Content
intCount = 0

Selection.HomeKey Unit:=wdStory ' カーソルを現在のストーリの先頭に移動
Do While blnFound = True
With rngContent.Find
.ClearFormatting
.Wrap = wdFindContinue
.Text = "x"
.Execute Forward:=True
If .Found = True Then
'見つかった場合、xを選択して改ページで置換。結果、xは削除される
Selection.Find.Execute
Selection.InsertBreak Type:=wdPageBreak
intCount = intCount + 1
Else
blnFound = False
End If
End With
Loop
MsgBox (intCount & "個見つかりました。")

End Sub

chamuji_vvさんのプログラムのネックは、xを$に置き換えている点、
xがあってもなくても改ページする点、マクロ実行時のカーソル位置
により結果が変わってしまう点でしょう。

どうしても
>xabc(改ページ)
>xdefg(改ページ)
>xhijk・・・

の形式にこだわるなら、現在の方法を少し変更するだけでは無理なような
気がします。まあ、僕もWordのVBAに関しては初心者に少し毛が生えた位なので、
できませんと言い切ることはできませんが。
例えばこんな感じでどうでしょうか?

Sub kaipage3()
Dim strText As String
Dim bFound As Boolean
Dim i As Long, j As Long, intCount As Long

strText = ActiveDocument.Content.Text
Selection.HomeKey Unit:=wdStory ' カーソルを現在のストーリの先頭に移動
i = 1: j = 1
Do While i > 0
i = InStr(j, strText, "x", vbBinaryCompare)
If i > 1 Then
Selection.MoveRight Unit:=wdCharacter, Count:=i - 1
Selection.InsertBreak Type:=wdPageBreak
strText = ActiveDocument.Paragraphs(ActiveDocument.Paragraphs.Count).Range.Text
End If
If i > 0 Then intCount = intCount + 1
j = 2
Loop
MsgBox (intCount & "個見つかりました。")
End Sub
    • good
    • 0
この回答へのお礼

どこが問題かまで指摘していただきありがとうございます。
とても勉強になりました。また何かございましたらよろしくお願いいたします。

お礼日時:2011/10/31 09:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!