[[20231222164658]] 『エクセルVBAからWordの特定の文字列を置き換える』(WordMan) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『エクセルVBAからWordの特定の文字列を置き換える』(WordMan)

お世話になっております

要約の通り、エクセルのVBAを使用し
Wordファイル内の文字列を置き換えするにはどうしたらよいのでしょうか?

wordファイル名「誓約書.docx」
置き換えたい文字は[メールアドレス]、[氏名]、[日付]

本文は以下に例示します

製造に関するナニナニ・・・
弊社はナントカ・・・

責任者 [氏名]
連絡先 [メールアドレス]
署名日 [日付]

のような文章が書かれています

エクセルファイル名「置き換え.xlsx」シート名「置き換え」
C行には「=TODAY()」の関数が入力されています

      A        B       C      D
 1 [メールアドレス]   [氏名]    [日付]
 2 tanaka@hoge.com    田中     =TODAY()
 3 hayashi@hoge.com    林     =TODAY()

田中なのか林なのかという区別は
エクセルファイル名「見積書.xlsx」シート名「見積」
のA1にtanaka@hoge.comかhayashi@hoge.comとメールアドレスが入力されているのでそこで区別できるのではと思っています

VBAを実行したら

製造に関するナニナニ・・・
弊社はナントカ・・・

責任者 田中
連絡先 tanaka@hoge.com
署名日 2023/12/22

のように置き換わってほしいのです

よろしくお願いいたします

< 使用 Excel:Excel2019、使用 OS:Windows10 >


複数個のデータがあるのであれば、
Wordの差し込み印刷機能を使えばよいのでは?
VBAコードは作る必要がありませんし、他人に頼む必要もありません。
(ご参考) 2023/12/22(金) 18:06:23

 置き換えたあとはどうするのでしょうか?
(マナ) 2023/12/22(金) 18:43:24

 2つのシートの違いは?

 >エクセルファイル名「置き換え.xlsx」シート名「置き換え」
 >エクセルファイル名「見積書.xlsx」シート名「見積」
(マナ) 2023/12/22(金) 18:47:51

 たたき台です

 word文書の事前準備
 ・誓約書.docxは、マクロブックと同じフォルダに保存する
 ・[氏名][メールアドレス]の文字列に、ブックマークを挿入
 ・[日付]文字列を削除し、かわりに日付フィールドを挿入(自動的に更新するにチェック)

 マクロの内容
 ・word文書を開く
 ・ブックマークを挿入した位置に、氏名とメールアドレスを転記
 ・文書を閉じる
 ・これを繰り返す

 Sub test()
    Dim wd As Object, doc As Object, fn As String
    Dim ws As Worksheet, rr As Range, r As Range

      fn = ThisWorkbook.Path & "\誓約書.docx"
      Set ws = Workbooks("置き換え.xlsx").Sheets("置き換え")

    Set wd = CreateObject("word.application")
    wd.Visible = True

    Set rr = ws.Cells(1).CurrentRegion
    Set rr = Intersect(rr, rr.Offset(1))

    For Each r In rr.Rows
        Set doc = wd.Documents.Add(fn)
        doc.bookmarks("氏名").Range.Text = r.Cells(2).Value
        doc.bookmarks("メールアドレス").Range.Text = r.Cells(1).Value

        'ここに、置換後の処理を記述

        doc.Close
    Next

    wd.Quit
    Set doc = Nothing
    Set wd = Nothing

 End Sub
(マナ) 2023/12/22(金) 20:56:27

 マナさんの回答をみて思いついた方法です
 あまり変わりませんが

 ・Word文書側の準備
    以下を参照して、ユーザー設定の文書プロパティを設定します。
    Office ファイルのプロパティを表示または変更する
https://support.microsoft.com/ja-jp/office/office-21d604c2-481e-4379-8e54-1dd4622c6b75
  
   [プロパティ名]を責任者、連絡先、署名日 で適当に初期値を設定します。型は文字列にしておいてください
   
   以上ができたら、この情報をWord文書中に埋め込みます。
   
   リボンの[挿入]タブ→[テキスト]グループ→[クイックパーツ]→[フィールド]
   フィールドの選択で、[分類]は文書情報、[フィールドの名前]を DocProperty にすると
   左側のプロパティで先に設定したユーザー設定の文書プロパティが選択できるので挿入します。
   
   ここまで出来たら、保存してください。
   
 ・Excel側のマクロ

     Excel側から、先のWord文書を開いて、ユーザー設定の文書プロパティを書き換えます
     サンプルです

	Sub sample()
	  Dim wdApp As Word.Application
	  Dim wdDoc As Word.Document
	  Set wdApp = CreateObject("Word.Application")

	  wdApp.Visible = True
	  Set wdDoc = wdApp.Documents.Add("D:\誓約書.docx") ' ファイル名を設定してください
	  wdDoc.CustomDocumentProperties("責任者").Value = "あべの せいめい"
	  wdDoc.CustomDocumentProperties("連絡先").Value = "hogehoge.com"
	  wdDoc.CustomDocumentProperties("署名日").Value = "2023/12/25"
	  wdDoc.Fields.Update
	End Sub
(´・ω・`) 2023/12/23(土) 05:38:12

 なるほど。これなら開いたり閉じたり繰り返す必要ないですね。
(マナ) 2023/12/23(土) 09:36:37

For n = 13 To LastRow
'D列にSHIMAZU, SIMADUがあった場合
'依頼書と誓約書を開く
    If Sheet7.Cells(n, 4).Value = "SHIMAZU" Or Sheet7.Cells(n, 4) = "SHIMADU" Then
        Set wordApp = CreateObject("Word.Application")
        wordApp.Visible = True

        Set wordDoc = wordApp.Documents.Open(desktop & "シマズ依頼.docx")
        Set wordDoc = wordApp.Documents.Open(desktop & "誓約書.docx")

        Application.Wait Now() + TimeValue("00:00:05") '5秒待つ

        Set wordDoc = wordApp.Documents.Open(desktop & "誓約書.docx")

        wordDoc.CustomDocumentProperties("氏名").Value = "田中太郎"
        wordDoc.CustomDocumentProperties("メールアドレス").Value = "tanaka@hoge.com"
        wordDoc.Fields.Update

        Exit For 'Forを抜ける

マナさん
(´・ω・`)さん

ありがとうございました
返信が遅くなり申し訳ありません

上記のマクロで動くようになりました

(WordMan) 2023/12/25(月) 15:13:48


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.