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

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

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

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

Word

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

Q&A

解決済

2回答

1315閲覧

VBAの検索について。

hood

総合スコア351

VBA

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

Word

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

0グッド

1クリップ

投稿2018/07/12 22:57

編集2018/07/13 04:18

###ctrl+Hで出来た検索が、VBAではできない。

タイトル通りです。
私はある文字列を置換したく、ctrl+Hで処理を書きました。しかし、文字列が長すぎたために、上手くいかず、それならVBAでやろうということになりました。
ですが、VBAの検索にその文字列を入れてもなぜか検索が引っかかりませんでした。(もちろん「"」のダブルクオーテーションの処理はしましたが・・・)

以下にコードを記します。


検索したい文字列
<string name=“base0”></string> <string name=“ude0”></string>
(同じような文字が続くがここでは省略。以下同様)


ctrl+Hで検索できた文字
\<string name=“base([0-9]{1,3})”\>\</string\>^013\<string name=“ude([0-9]{1,3})”\>\</string\>


上の文字を移植したが、検索したい文字列を検索できないコード

Sub gazouireru() With Selection.Find .Text = "\<string name=""base([0-9]{1,3})""\>\</string\>^013\<string name=“ude([0-9]{1,3})”\>\</string\>" .MatchFuzzy = False .MatchWildcards = True .Execute End With With Selection.Range .Text = "置換したい文字列" End With End Sub


訂正です。
「Ctrl+Hで上手くいかなかった検索」について。
「Ctrl+Hで上手くいかなかった置換」の誤りでした。検索はできても、置換ができなかったので(文字列が長すぎたため)、このような記述になってしまいました。

また、ダブルクオーテーションについて。これは完全に私の不注意でした。
IDEとwordとマクロとteratailで文字列を操作していたので、
いつの間に変わってしまったのだと思います。
ダブルクオーテーションは全角“”に統一します。
<string name=“base0”></string>
<string name=“ude0”></string>

ダブルクオーテーションに気をつけつつ、もう一度文書確認、
Ctrl+H、さらにVBAを試してみました。
以下に結果を記します。

Ctrl+H 効いた
検索したい文字
<string name=“base0”></string>
<string name=“ude0”></string>

検索する文字
\<string name=“base([0-9]{1,3})”\>\</string\>
^013\<string name=“ude([0-9]{1,3})”\>\</string\>

VBA ここで問題が起きました。

というのも検索の効いた文字列をコピペしたのち、ダブルクオーテーションを
避けるよう半角ダブルクオーテーション"を入力したのですが、
それをやると構文エラーとなってしまうからです。

エラー
.text="\<string name="\<string name="“base([0-9]{1,3})"”\>\</string\> ^013\<string name="“ude([0-9]{1,3})"”\>\</string\>"

それならばとのよこにのよこにを入力して試したのですが、これも構文エラーとなりました。

つまり、この問題の解決方法は及び、という全角ダブルクオーテーションを避ける
にはなにをすればいいのか、これに帰着するということだと思います。

また、回答者様のCtrlで検索できないのは、機種の違いなのかな?と思いました。
それは検索したい文字と、検索する文字は、以前と同じだからです。
私は2016を使っています・・・

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

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

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

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

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

ttyp03

2018/07/13 00:35

Ctrl+Hで検索できたのに上手くいかないとは、言ってることが矛盾してます。あとダブルクォーテーションが全角になっているのは意図的なものでしょうか?VBAでやろうとしているほうは半角なのでこれまた矛盾してます。ちなみにCtrl+Hでできたやつで試してみましたが、2013環境ではできませんでした。
m.ts10806

2018/07/13 00:53

コードは全体を囲われた方が良いです。これだと逆に読みづらくなっています。コード部分を全て選択し、<code>ボタンを押す。そして冒頭の```を```vbaのように言語名を入れてください。全体を囲うことでコードコピー機能が使えるようになります。
hood

2018/07/13 02:43

回答ありがとうございます。 まず訂正として、「Ctrl+Hで上手くいかなかった検索」について。 「Ctrl+Hで上手くいかなかった置換」の誤りでした。検索はできても、置換ができなかったので(文字列が長すぎたため)、 このような記述になってしまいました。
hood

2018/07/13 02:43

また、ダブルクオーテーションについて。これは完全に私の不注意でした。 IDEとwordとマクロとteratailで文字列を操作していたので、 いつの間に変わってしまったのだと思います。 ダブルクオーテーションは半角「“”」に統一します。 <string name=“base0”></string> <string name=“ude0”></string>
hood

2018/07/13 02:44

ダブルクオーテーションに気をつけつつ、もう一度文書確認、 Ctrl+H、さらにVBAを試してみました。 以下に結果を記します。
m.ts10806

2018/07/13 02:44

質問は編集できるので、編集して対応してください。こちらのコメント欄はデフォルト非表示のため、要件が書いてあると後から見たひとの目につきにくいです。
hood

2018/07/13 02:46

すいません。なぜか私の表示したいおたまじゃくしのような半角のダブルクオーテーションになっていませんね・・・なぜでしょう・・・
hood

2018/07/13 02:54

わかりました、質問を編集します
ttyp03

2018/07/13 04:10

>半角“”に統一します ・・・いやこれ全角なんですけど
hood

2018/07/13 04:16

回答ありがとうございます。すいません・・・おたまじゃくしのようなダブルクオーテーションが半角なのだと勘違いしていました・・・全角に訂正させていただきます・・・質問ももう一度修正します・・・
guest

回答2

0

ベストアンサー

つまり、この問題の解決方法は“及び、”という全角ダブルクオーテーションを避ける
にはなにをすればいいのか、これに帰着するということだと思います。

VBE上では、全角ダブルクオーテーションが半角ダブルクオーテーション"と解釈されて構文エラーになり、入力できないという問題ですね。

Chr(-32409)はChr(-32408)に置き換えればいいでしょう。
ただし、" "の外に出して&で結合する必要があります。

vba

1.text="\<string name=\<string name=" & Chr(-32409) & "base([0-9]{1,3})" & Chr(-32408) & _ 2"\>\</string\>^013\<string name=" & Chr(-32409) & "ude([0-9]{1,3})" & Chr(-32408) & _ 3"\>\</string\>"

これでは読みにくいので、下記のように【】に置き換えて入力して、Replaceで置換するというのもいいでしょう。

vba

1Dim s As String 2S = "\<string name="\<string name=【base([0-9]{1,3})\>\</string\>^013\<string name=【ude([0-9]{1,3})\>\</string\>" 3s = Replace(s, "", Chr(-32409)) 4s = Replace(s, "】", Chr(-32408)) 5.text = s

投稿2018/07/13 10:33

編集2018/07/13 10:44
hatena19

総合スコア33699

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

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

0

WordのVBAですかね?
Wordは持ってないので(エクセル以外使わないので単体でしか買わない)、
よくわかりませんが、
手動で出来なければ、同じ機能を使う限りVBAでアプローチしても、
結果は同じです。
VBAでReplase関数とかないでしょうか?
別途他の方法を模索した方がいいと思います。

他の方の回答が付くまでのつなぎで書いてみました。

投稿2018/07/13 05:15

mattuwan

総合スコア2136

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問