🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

Q&A

解決済

1回答

4360閲覧

excel vba でword文書内で検索した特定の値の1行下に値を入れる方法

hiroshi77

総合スコア12

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

0グッド

0クリップ

投稿2021/02/01 14:10

excel のvbaで microsoft word の複数の既存文書内の任意の場所で特定の文字を検索し、その文字の1行下に任意の文字を挿入する方法を検討しています。
まずは下記のような方法で、文字列を検索し、置換する方法を考えたのですが、これだと置換前の文字(下記の例でいうplaceholder)が置換後に置き換わるため、次にまた別の文字に変換する際に出来なくなります。

wordの文書内に、

wordの範囲をして、excelのoffsetのようなことが出来たらいいのですが....どなたかご教授いただければ幸いです。

vba

1Sub CopyToWord() 2 3 Dim wordApp As Word.Application 4 Set wordApp = CreateObject("Word.Application") 5 6 wordApp.Visible = True 7 8 Dim wordDoc As Word.Document 9 Dim FindObj As Word.Find 10 Set FindObj = wordApp.Selection.Find 11 12 '置換対象の文字列をセット 13  FindObj.Text = "placeholder" 14 15 '置換後の文字列 16  FindObj.Replacement.Text = "テスト" 17 18  Call FindObj.Execute(Replace:=Word.wdReplaceAll) 19 20  wordDoc.Close 21 wordApp.Visible = False 22 Set wordApp = Nothing 23

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

回答作成後に気が付いたのですが、
>文字列を検索し、置換する方法を考えたのですが、
>これだと置換前の文字(下記の例でいうplaceholder)が置換後に置き換わるため、
>次にまた別の文字に変換する際に出来なくなります。

↑現在置換で動いているなら単純に
'置換対象の文字列をセット
FindObj.Text = "placeholder"
'置換後の文字列
FindObj.Replacement.Text = "テスト"

↑を置き換えられても、placeholderが残るように
'置換対象の文字列をセット
FindObj.Text = "placeholder"
'置換後の文字列
FindObj.Replacement.Text = "placeholder" & vbcrlf & "テスト"

↑置き換える時に、元の(置き換えで消えてしまう)文字列+"テスト"で置き換えると、
もとの、"placeholder"は残るのでは?
なんて、下記の回答作成後に、ふと、思ってしまったり。

下記、Word VBAのテストです(※Excelから呼ぶようにアレンジしてみてください)
参考になればよいのですが。※ワードのオブジェクトの扱い方は、なんか難しいですね。

Sub Macro1() ' ' Macro1 Macro ' ' Dim n As Integer '先頭にカーソル移動 https://www.relief.jp/docs/word-vba-selecting-start-documents.html から引用 ActiveDocument.Bookmarks("\StartOfDoc").Select '文字列を探す、ターゲット位置決め Selection.Find.Execute FindText:="バグ内容", Forward:=True '見つけた↑下の行に移動 ↑でFindTextが見つからなかった時の処理が入ってないや n = Selection.Move(Unit:=wdLine, Count:=1) 'wdLineで行単位移動 '文字列を挿入 Options.ReplaceSelection = False 'trueで置き換え Selection.TypeText Text:="word vbaにはまる" Selection.TypeParagraph 'エンターキー 改行 End Sub '>wordの範囲をして、excelのoffsetのようなことが出来たらいいのですが.... ' https://youtu.be/rtdwyl2Bbic?t=974 ← word知らないおっさんが探ってみました '段落から探ると良いのでは? '検索キーワード VBA Word 段落 など Sub test() Dim n As Integer '全ての段落をテスト表示 For n = 1 To ActiveDocument.Paragraphs.Count Debug.Print n & ":" & ActiveDocument.Paragraphs(n).Range.Text Next n End Sub '段落を一つ一つn番目で探り、InStrでターゲットを判断して、 'n + 1 の段落に 文字列を代入するサンプル ' https://youtu.be/rtdwyl2Bbic?t=1396 Sub test2() Dim n As Integer '全ての段落をサーチ For n = 1 To ActiveDocument.Paragraphs.Count 'ターゲットの文字列を探す If InStr(ActiveDocument.Paragraphs(n).Range.Text, "バグ内容") > 0 Then 'n + 1 次の段落 ActiveDocument.Paragraphs(n + 1).Range.Text = "exit for忘れ" & vbCrLf Exit For 'ループを抜ける End If Next n End Sub

↑コード作成の参考となれば・・・・

見ていると、イライラする作成過程は
リンク内容
時間のある時に↑を見て、なまあたたかく、わらってください。
何かの参考となれば幸いです。

投稿2021/02/04 14:59

ken3memo

総合スコア132

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiroshi77

2021/02/05 13:20

どうもありがとうございます。早速確認してみます。
hiroshi77

2021/02/06 00:35

[置き換える時に、元の(置き換えで消えてしまう)文字列+"テスト"で置き換える] のアイデアが浮かびませんでした。この通りやると、上手くいきました。なるほどです。大変助かりました。
hiroshi77

2021/02/06 00:37

また、insert処理も実行し、上手くいきました。とても参考になりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問