ここから本文です

word VBAを使った文字列について。 5行ほどの文字列に、特定の文字を挿入したい...

ふうどさん

2018/7/1216:41:35

word VBAを使った文字列について。

5行ほどの文字列に、特定の文字を挿入したいです。これを実現しようと、普通の置換機能を使ったのですが、文字列が長すぎるのか入力不可になってしまいました。

それでVBAで実現できるのでは?と思い、ネットで勉強しました。しかし、地頭の悪いせいもあり、中々実現までこぎつくことができませんでした。

なので、丸投げしようと思いました。これはずいぶん虫にいい話ですし、誠実さもない、さらに将来にも繋がらないことは分かっております。しかし、現状ここで質問する以外解決策がなかったのです・・・

私が実現したいのは

<string name=“base0”></string>
<string name=“ude0”></string>
<string name=“me0”></string>
<string name=“kuchi0”></string>
<string name=“name0”></string>

(0にはいろいろな数字が入る。)
という文字列を5行単位で、

<string name=“base0”>@drawable/mushu_base</string>
<string name=“ude0”>@drawable/mushu_ude_mage</string>
<string name=“me0”>@drawable/mushu_me_hosome</string>
<string name=“kuchi0”>@drawable/mushu_kuchi_n</string>
<string name=“name0”>ムシュー</string>

というふうに変えるマクロを作ることです。

一応、長すぎるためword拒絶された置換方法を書いておきます。


\<string name=“base([0-9]{1,3})”\>\</string\>^013
\<string name=“ude([0-9]{1,3})”\>\</string\>^013
\<string name=“me([0-9]{1,3})”\>\</string\>^013
\<string name=“kuchi([0-9]{1,3})”\>\</string\>^013
\<string name=“name([0-9]{1,3})”\>\</string\>

置換後
<string name=“base\1”>@drawable/mushu_base</string>^013
<string name=“ude\2”>@drawable/mushu_ude_normal</string>^013
<string name=“me\1”>@drawable/mushu_me_normal</string>^013
<string name=“kuchi\2”>@drawable/mushu_kuchi_normal</string>^013
<string name=“name\3”>ムシュー</string>

またこの文字列をベースと腕、そして目と口と名前に分割し、マクロに記録してから統合するやり方も取ったのですが、上手くいかなかったです・・・

閲覧数:
68
回答数:
1
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

tam********さん

2018/7/1314:37:37

こんにちは。

次のように書いてみました。
ただし、置換対象の文字列がどのような範囲に入っているか、他にどのようなタグが含まれているのか、などが不明ですので、かなり不完全なコードになっている事をご容赦ください。

Sub Test()
``Dim searchRng As Range '走査範囲
````Set searchRng = Range("A1:A100") '仮の範囲です
``
``Dim elm As Range '範囲走査用
``
``For Each elm In searchRng '走査する
````With elm
``````'あいまい条件判定でセルの値を変更
``````Select Case True
``````````Case .Value Like "*<string name=" & Chr(&H8167) & "base*"
````````````.Value = "<string name=" & Chr(&H8167) & "base0" & Chr(&H8167) & ">@drawable/mushu_base</string>"
``````````Case .Value Like "*<string name=" & Chr(&H8167) & "ude*"
````````````.Value = "<string name=" & Chr(&H8167) & "ude0" & Chr(&H8167) & ">@drawable/mushu_ude_mage</string>"
``````````Case .Value Like "*<string name=" & Chr(&H8167) & "me*"
````````````.Value = "<string name=" & Chr(&H8167) & "me0" & Chr(&H8167) & ">@drawable/mushu_me_hosome</string>"
``````````Case .Value Like "*<string name=" & Chr(&H8167) & "kuchi*"
````````````.Value = "<string name=" & Chr(&H8167) & "kuchi0" & Chr(&H8167) & ">@drawable/mushu_kuchi_n</string>"
``````````Case .Value Like "*<string name=" & Chr(&H8167) & "name*"
````````````.Value = "<string name=" & Chr(&H8167) & "name0" & Chr(&H8167) & ">ムシュー</string>"
``````End Select
````End With
``Next elm
End Sub
※バッククォート「`」を半角空白「 」に置換ください

変換要件としては、
・パーツを示す文字列の後にある3桁の数字を0にする
・タグの間に、パーツに応じた文字列を挿入する
このようなものと見受けられました。

従って、処理としては、正規表現を用いた置換を行うのでは無く、
・各パーツに応じて、数値の前までの文字列を含むものを曖昧判定し、
・曖昧一致したら
・パーツごとの規定の文字列に、セルの値を変更する
としました。
変換後の文字列が一定である事、パターンが5種類である事から、少々力技でやってみました。

ちなみに、タグ内のnameプロパティ部分は、通常半角二重引用符だと思うのですが、念のため、表示されている文字そのままにしてあります。

  • 質問者

    ふうどさん

    2018/7/1315:25:06

    回答ありがとうございます!世の中には親切な人がいるのだと感激しました。このコードをベースにして、自分で試行錯誤してみようと思います!本当にありがとうございます!

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる