[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBAでエクセルからワードへの文字置換』(World)
ワードにあるフォーマットを崩さずにエクセルの表にある住所や名前をVBAでワードのテンプレートに置換する方法を知りたいです。
入力した文字の列は決まっておらず、住所はB2、名前はC5にあります。
また、D5に1から始まっている会員番号が入っている場合は指定文書を追加する必要があります。
色々試しているのですが、行き詰ってしまいました。
分かる方がいましたら宜しくお願いします。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
試したコードを提示してください。
それを実行した結果はどうなるのか。
期待する結果も、説明してください。
具体例をあげてもらえると、理解しやすいです。
>フォーマットを崩さずに
これでは、あいまいすぎます。
(マナ) 2020/10/26(月) 22:04
Public Sub PasteTableToWord()
'Word Appを開く Dim objWord As WORD.Application Set objWord = New WORD.Application objWord.Visible = True
'テンプレートのワードファイルのPathを指定 Dim docPath As String docPath = "C:\Users\AQ-PC-05\Desktop\sample.docx"
'指定したPathのワードファイルを開く(編集可能) Dim objDoc As WORD.Document Set objDoc = objWord.Documents.Open(docPath)
'カーソルを冒頭に移動 objWord.Selection.Start = 0 objWord.Selection.End = 0
'ワードで文字列を検索し選択 objWord.Selection.Find.Text = "住所" objWord.Selection.Find.Execute
'選択箇所を取得 Dim startIndex As Long Dim endIndex As Long startIndex = objWord.Selection.Start endIndex = objWord.Selection.End
'エクセルファイルを選択 Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("Sheet1")
'コピペ Call ws.Range("B2").Copy Call objDoc.Range(startIndex, endIndex).Paste
'カーソルを5行目に移動 objWord.Selection.Start = 5 objWord.Selection.End = 5
'ワードで文字列を検索し選択 objWord.Selection.Find.Text = "会員番号" objWord.Selection.Find.Execute
'エクセルファイルを選択 Set ws = ThisWorkbook.Worksheets("Sheet1")
'コピペ Call ws.Range("B4").Copy Call objDoc.Range(startIndex, endIndex).Paste
'カーソルを6行目に移動 objWord.Selection.Start = 6 objWord.Selection.End = 6
'ワードで文字列を検索し選択 objWord.Selection.Find.Text = "名前" objWord.Selection.Find.Execute
'エクセルファイルを選択 Set ws = ThisWorkbook.Worksheets("Sheet1")
'コピペ Call ws.Range("B3").Copy Call objDoc.Range(startIndex, endIndex).Paste
End Sub
名前が1行目、会員番号が2行目、住所が3列目になります。
会員番号を5行目、名前を6行目、住所が1〜4列目にしたいです。
D5にある会員番号が1から始まる場合、指定の文書をワードの10行目にコピペするというのはまだ試しておりません。。。
フォーマットはフォントやインデントをテンプレートのままにしたいです。
(World) 2020/10/26(月) 22:23
フォーマットといっているのが書式のことであれば、 以前作成したマクロでは、あらかじめワードのテンプレートに置換対象文字列を設定しておいて こんな関数で処理してました。 Section やページ処理などは実際にお使いのテンプレートに併せて調整してください。
足すのは面倒ですが、削除は簡単なのであらかじめ必要な項目をテンプレートに記載しておいて、 最後に不要だったら削除してはどうでしょうか。
もうご覧になってるかもしれませんが、こちらのサイトが参考になりました。 https://www.wordvbalab.com/page-1337/
'//----------------------------------------------------------------------------- Public Function ReplaceWord(dstDoc As Document, dstPage, keyWord, newWord ) As Boolean '//----------------------------------------------------------------------------- ReplaceWord = False
dstDoc.Range(0, 0).Select wd.Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=dstPage
wd.Selection.Find.ClearFormatting wd.Selection.Find.Replacement.ClearFormatting With wd.Selection.Find .Text = keyWord .Forward = True .Wrap = wdFindStop .Format = False .MatchCase = False .MatchWholeWord = True .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False .Execute Replace:=wdReplaceAll, ReplaceWith:=newWord End With End Function (QS) 2020/10/26(月) 22:27
入れ違いでしたが、 > 'コピペ > Call ws.Range("B2").Copy > Call objDoc.Range(startIndex, endIndex).Paste だとEXCEL の書式がそのままになりそうですね。 (QS) 2020/10/26(月) 22:29
↓これが期待する結果なのに、現状は↑こうなってしまうという意味でしょうか。
>会員番号を5行目、名前を6行目、住所が1〜4列目にしたいです。
行とか列の意味が、わかりません。
(マナ) 2020/10/26(月) 22:54
わかりにくくて申し訳ないです。
(World) 2020/10/26(月) 23:31
なぜ、複数行なのですか。
B2セルは、セル内改行で、4行あるということですか。
(マナ) 2020/10/26(月) 23:48
ワードの、転記先に、ブックマークを挿入しておくとよいです。
例えば、ブックマーク名を、住所、名前とすると
こんなマクロで転記できます。
objDoc.Bookmarks("住所").Range.Text = ws.Range("B2").Value objDoc.Bookmarks("名前").Range.Text = ws.Range("B3").Value
(マナ) 2020/10/27(火) 00:10
Set objRange = objDoc.Paragraphs(10).Range
objRange.MoveEnd wdCharacter, -1 If .Range("D5").Text Like "25*" Then objRange.Text = "表示したいメッセージ" End If Set objRange = Nothing
これでやっても、15から始まる人にも35から始まる人にも全員にメッセージが表示されております。。。
(World) 2020/10/27(火) 19:36
(マルチポスト) 2020/10/27(火) 19:47
1)会員番号は、最初に提示されたコードをみると、B4ではないのですか?
2)前回の結果がクリアされていないだけといううことはありませんか。
3)どうせなら、10行目にも、ブックマーク挿入すればよいと思いませんか。
4)フィールドコードを設定すれば、マクロでなくても表示可能かもしれません。
(マナ) 2020/10/27(火) 20:07
(マナ) 2020/10/27(火) 20:22
差し込み印刷は掛け合ってみたのですがやはりダメでした。
なぜかはわからないですがvbaにこだわってます。
フィールドコード調べてみます。
ありがとうございます。
(World) 2020/10/27(火) 20:31
>続ければよかったです、
閉じてしまったけど、やっぱり、未解決でしたと謝って、
モーグで続けてはどうでしょうか。
こちらで、勝手に、修正はしたくないので。
(マナ) 2020/10/27(火) 20:54
ただし、削除された投稿を後からみることができないので、トライするなら削除前にメモ帳などにコピーしておいたほうがよいとおもいます。
(もこな2) 2020/10/28(水) 09:21
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.