質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.34%
VBA

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

Q&A

解決済

2回答

183閲覧

『Excel VBA』Wordファイルのある文字を「^」(キャレット)で置換したい。

sanmaserver

総合スコア5

VBA

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

0グッド

0クリップ

投稿2024/12/16 06:19

実現したいこと

ExcelVBAで、WORDファイル(docxファイル)を操作し、
WORDファイルに記載されている文字列「xxx★xxx」を
文字列「yyy^fyyy」に変換したいです。

前提

PCはWindows10で、WORD2019、Excel2019を使用しています。

文字列を置換する機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

『実行時エラー '5624':
^fは[置換後の文字列]に指定できない特殊文字列です。』

該当のソースコード

本来は、文字列「xxx★xxx」を文字列「yyy^fyyy」に変換したいですが、
そのままソースコードを乗せるとマズいので、
chatGPTに教えていただいた、コードを参考として載せます。

Sub ReplaceStarWithCaret()
Dim wdApp As Object
Dim wdDoc As Object
Dim findText As String
Dim replaceText As String

' Wordアプリケーションを起動(既に開いている場合はそのインスタンスを使用) On Error Resume Next Set wdApp = GetObject(, "Word.Application") If wdApp Is Nothing Then Set wdApp = CreateObject("Word.Application") End If On Error GoTo 0 wdApp.Visible = True ' Wordを表示 ' 変換対象の文書を開く(ここで適切なパスを指定) Set wdDoc = wdApp.Documents.Open("C:\path\to\your\document.docx") ' 1. ^を一時的に別の文字列{caret}に置換 findText = "^" replaceText = "{caret}" ' ^を一時的に{caret}に置き換え With wdDoc.Content.Find .Text = findText .Replacement.Text = replaceText .Execute Replace:=2 ' すべて置換     End With ' 2. ★を一時的に{caret}に置換 findText = "★" replaceText = "{caret}" ' ★を一時的に{caret}に置き換え With wdDoc.Content.Find .Text = findText .Replacement.Text = replaceText .Execute Replace:=2 ' すべて置換   ←■■ここでエラーが発生します■■ End With ' 3. 最後に一時的な文字列{caret}を^に戻す findText = "{caret}" replaceText = "^" ' {caret}を^に戻す With wdDoc.Content.Find .Text = findText .Replacement.Text = replaceText .Execute Replace:=2 ' すべて置換 End With ' 完了メッセージ MsgBox "置換が完了しました!"

End Sub

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

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

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

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

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

guest

回答2

0

検索文字列、置換後文字列には、^で始まる特殊文字を指定できます。
これら一覧は、Wordを起動して、検索あるいは置換のダイアログで、「オプション」ボタンを押して、オプションを表示させた上で、「ワイルドカードを使用する」チェックボックスをオンにすると、下方の「特殊文字」ボタンが押せるようになるので、それを押すと使える特殊文字一覧が出ます。^は「キャレット」という名称なので「キャレット」を選択するとダイアログの検索文字列欄に^^が追加されるので、^を指定したい時は^^と書けば良いことが分かります。
他の例では「タブ文字」なら^tですね。
イメージ説明

これはVBAでの検索・置換の際でも同じです。
「検索文字列」については、「ワイルドカードを使用するかどうか(MatchWildcards)」でこの^の機能を使うかどうかを選択できますが、どうも「置換後文字列」では「^の機能を使う」と常になってしまうようで、オフの仕方がVBAのリファレンス見ても見つけられません。
https://learn.microsoft.com/ja-jp/office/vba/api/word.find
しょうがないので、置換後文字列内の^を全部^^に書き換えるしかないと思います。

投稿2024/12/16 09:56

otn

総合スコア85989

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

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

sanmaserver

2024/12/16 23:44

回答ありがとうございます。 ベストアンサーは別の方を選ばせていただきましたが、こちらの回答も非常に参考になりました。
guest

0

ベストアンサー

本来は、文字列「xxx★xxx」を文字列「yyy^fyyy」に変換したい

vba

1Sub ReplaceStarWithCaret() 2 3 Dim wdApp As Object 4 Dim wdDoc As Object 5 Dim findText As String 6 Dim replaceText As String 7 8 ' Wordアプリケーションを起動(既に開いている場合はそのインスタンスを使用) 9 On Error Resume Next 10 Set wdApp = GetObject(, "Word.Application") 11 If wdApp Is Nothing Then 12 Set wdApp = CreateObject("Word.Application") 13 End If 14 On Error GoTo 0 15 16 wdApp.Visible = True ' Wordを表示 17 18 ' 変換対象の文書を開く(ここで適切なパスを指定) 19 Set wdDoc = wdApp.Documents.Open("C:\path\to\your\document.docx") 20 21 findText = "xxx★xxx" 22 replaceText = "yyy^94fyyy" '"^"を文字コード(94)で指定する 23 With wdDoc.Content.Find 24 .ClearFormatting 25 .Replacement.ClearFormatting 26 .ClearAllFuzzyOptions 27 .Text = findText 28 .Replacement.Text = replaceText 29 .Execute Replace:=2 ' すべて置換 30 End With 31 32 ' 完了メッセージ 33 MsgBox "置換が完了しました!" 34 35End Sub

投稿2024/12/16 07:42

sk.exe

総合スコア982

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

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

sk.exe

2024/12/16 07:46

実際にやってることは「Wordドキュメントの編集」ですので、本質的には Excel VBA というより Word VBA の範疇でしょう。
sanmaserver

2024/12/16 21:10 編集

回答ありがとうございます。 Excelに記載したデータを元に、wordファイルを大量に作る必要があったので、 使い慣れているExcel VBAを使用しました。 選択をミスったのかなぁ、、、
sanmaserver

2024/12/16 23:59

回答ありがとうございます。 '"^"を文字コード(94)で指定したところ、問題が解決しました! ベストアンサーに選ばせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.34%

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

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

質問する

関連した質問