VBAによるword文書の一括処理について教えて下さい。
※当方の環境はWin10(64bit)でwordは2007年版を使っております。
復数の段落からなるword文書に対して、
各段落の先頭(行頭)に文字列を追加したいと考えております。
=> 段落の数が多いため、vbaを使って下記のようなマクロを作り、
一括で処理しようとしているのですが、期待する動作にならず困っております。
下記サンプルのfor eachで、
(1)のmsgboxによる段落(内容)表示のみですと、
期待通りに各段落の内容がポップアップ表示されたのですが、
(2)の文字列追加の部分を追加すると、
同じ段落内で繰り返し<sample>が追加されてしまいます。
例えば、一つ目の段落が「私は山田です」だとすると、
<sample>私は山田です
<sample><sample>私は山田です
<sample><sample><sample>私は山田です
...
のように1つ目の段落に対して処理が繰り返されてしまいます。
=> 何故このような動作になるのかのロジックを理解していないため、
どこを直せば良いのか分からない状態です。
=>当方vbaの初心者のため、基礎的な勘違いをしているかもしれませんが、
ご教示お願い致します。
==== 以下、マクロのサンプル ====================
Sub Macro1_test()
Dim myPara As Paragraph
'### 選択範囲の段落を対象に繰り返し処理
For Each myPara In Selection.Range.Paragraphs
'(1) 各段落の文字列を確認
MsgBox myPara.Range.Text
'--- (2) 各段落の先頭に文字列(<sample>)を追加 -----
tmp = "<sample>" & myPara.Range.Text
myPara.Range.Text = tmp
'=> 本当は文字列を代入したら、次の段落に進んでほしい…が、
' 何故か同じ段落内で繰り返される
'---------------------------------------------------------
Next myPara
End Sub
==== ここまで、マクロのサンプル ==================
No.1ベストアンサー
- 回答日時:
質問のマクロだと、選択範囲がNextの前で解除されるので、同じ段落を繰り返し処理するのだと思います。
変数のtmpを使わないで、WordのVBAにあるInsertBefore メソッドを使ったほうが確実です。
https://msdn.microsoft.com/ja-jp/library/office/ …
マクロの例
' ==== 以下、マクロのサンプル ====================
Sub Macro2_test()
Dim myPara As Paragraph
'### 選択範囲の段落を対象に繰り返し処理
For Each myPara In Selection.Range.Paragraphs
With myPara.Range
' (1) 各段落の文字列を確認
MsgBox myPara.Range.Text
' (2) 確認した段落の先頭に指定文字列を追加
.InsertBefore "<sample>"
End With
Next
End Sub
' ==== 以下、マクロのサンプル ====================
御礼が遅くなり失礼しました。
例示して頂いた「InsertBefore」や「InsertAfter」を使えば、
段落の先頭・末尾に文字列が追加され、
ループも期待通りに動作することが確認できました。
ただ、先頭・末尾以外に文字列を付け加えたい場合や、
段落の文字列全体を置換するような場合には
別の方法が必要なのでもう少し勉強してみたいと思います。
No.2
- 回答日時:
No.1の回答者です。
マクロの最後にあるコメントが間違っていますね。
' ==== ここまで、マクロのサンプル ================
を入れるつもりが、貼り付けるものを間違えました。
質問のマクロだと、選択範囲であるSelection.Range.Paragraphsを使用
していますが、文書全体ならActiveDocument.Range.Paragraphsにして
処理してもよいですね。
' ==== 以下、マクロのサンプル ====================
Sub Macro3_test()
Dim myPara As Paragraph
' ### 文書全体の段落を対象に繰り返し処理
For Each myPara In ActiveDocument.Range.Paragraphs
With myPara.Range
.InsertBefore "<sample>"
End With
Next
End Sub
' ==== ここまで、マクロのサンプル ================
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Excel(エクセル) 指定文字列が該当するA列をアクティブセルにするには 3 2022/08/17 13:18
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
ワードのマクロで段落番号(文字も含む)取得ってできますか
Word(ワード)
-
WORD VBA 繰り返し処理
Word(ワード)
-
Excelでセル参照したとき、書式も一緒に持ってくるには?
Windows Vista・XP
-
-
4
Word VBA。各マクロの間に待ち時間を指定するには?
Word(ワード)
-
5
WORDマクロで特定文字から別文字までを範囲選択したい
Word(ワード)
-
6
Wordマクロ 文章の段落毎にインデント設定をしたい
Word(ワード)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
表内、縦位置の中央揃えがど~...
-
ワードで2万字って何枚くらい...
-
ギリシャ数字(ローマ数字?)...
-
wordで変なスペースがあいてし...
-
テプラ(SR510)で一行の文字サ...
-
第一章→第一節・・・その次は?
-
Wordで勝手に段落が下がってし...
-
Wordマクロ、選択した複数行を1...
-
ワードで句読点のぶら下げがで...
-
テプラプロで。
-
wordの段落番号の色が勝手に変...
-
閑居友の現代語訳を教えてくだ...
-
Word 改ページをすると、テキス...
-
文の構成内容の名称
-
ワード:縦書きの段落番号について
-
Wordの禁則処理について(適用...
-
「」(かぎかっこ)は、段落と...
-
ある行にカーソルを置くと表示...
-
Word2007 で透かしを挿入したら...
-
ワードの文字サイズが勝手に変わる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
表内、縦位置の中央揃えがど~...
-
wordで変なスペースがあいてし...
-
ワードで2万字って何枚くらい...
-
テプラ(SR510)で一行の文字サ...
-
第一章→第一節・・・その次は?
-
ギリシャ数字(ローマ数字?)...
-
Wordで勝手に段落が下がってし...
-
テプラプロで。
-
WORD2013の縦書き2段組みで段...
-
ある行にカーソルを置くと表示...
-
WORDで段落番号の振りなおしが...
-
Word 改ページをすると、テキス...
-
ワードの文字サイズが勝手に変わる
-
ワードの段落番号のうち、任意...
-
ワードで段落番号の下にも下線...
-
【Word2013】段落番号込みで下...
-
ワードで表に斜め線に文字入力
-
今年の東大入試の国語の第四問...
-
ワードで句読点のぶら下げがで...
-
wordのテキストボックスが変!
おすすめ情報