• ベストアンサー

MS-wordで,ワイルドカードを用い,n人(1, 2, 3)を3人(1, 2, 3)に置換

ワイルドカードを用いた置換の仕方についてお伺いします. 用いているのはword for mac 2004です. n人(1, 2, 3)や、n人(2, 3, 4)や、n人(3, 4, 5) n人(1, 2, 3, 4)や、n人(2, 3, 4, 5)や、n人(3, 4, 5, 6) といったものを, 3人(1, 2, 3)や、3人(2, 3, 4)や、3人(3, 4, 5) 4人(1, 2, 3, 4)や、4人(2, 3, 4, 5)や、4人(3, 4, 5, 6) という風に,nを()内の数字の個数に一度に置換したいのですが, 検索文字列は n人(1, 2, 3)や、n人(2, 3, 4)や、n人(3, 4, 5)の場合は n人(?, ?, ?) で検索できることはわかっているのですが,置換後の文字列はどのようにすればよいでしょうか? ちなみに数字やn、カンマとその後のスペースは半角,括弧は全角です. よろしくお願いします.

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

ワイルドカードを使用した場合、()で閉じた内容が一つの式として認識 されますので、(n)が一つ目の式で「n」だけを条件にして、(人(?, ? )) のようにすることで二つ目の式にして「(人(?, ? )」をまとまった式 にします。 検索条件にした式を参照するのが、\ 記号と式の順番である数字である 「\1」や「\2」のようなものを置換の条件にします。(半角で指定) 今回の場合は、最初の式を変えるので n=\1 ですから \1=3 になること から、式をそのまま参照するときの \1\2 が 3\2 になるのです。 このように式を利用することで、特定の文字列を参照したときに、その 一部だけを置換する場合に効果的に利用できるようになります。 もっと条件が多い場合では、Wordの置換機能では無理な場合もあります ので、その場合は正規表現ができるもので置換することになりますが、 今回は関係ないことなので具体的には説明しません。 ちなみにマクロについては、私に提示できる技量が現時点では無いので 回答しませんが、条件としては以下のようなものでマクロを組むことに なると思います。 検索・置換の条件を指定してのマクロ ************************************************************** 検索する()内の数字の個数を数え、その個数を検索する対象にある n と置き換えることで、個数が増えても一括で n を個数に置換する。 ************************************************************** これをマクロで組むことで、数字の個数が増えてもマクロが自動で置換 してくれると思います。

nezg-fhero
質問者

お礼

半角括弧で囲まれたn、(n)、が式1、\1 で、 半角括弧で囲まれた人(1, 2, 3)、(人(1, 2, 3))、が式2、\2 で、 \1をaにしたい場合にa\2とするんですね ヘルプを読めばわかったことなんでしょうか・・・ マクロはNo.4の方が書いていただけましたが、やはり私にはまだ敷居が高いようです。。 ですが、便利になることはよいことと思い、日々PC(あるいはmac)に向かっていますので、そのうちできるようになればと思いいています。 特に、エクセルを使っていて、計算式などをもっと使えれば、やりたいことが一発でできるのにっ!と、もっと勉強しないとなあと思っております。 ありがとうございます!

その他の回答 (6)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.7

こんにちは。 >>これは、ご質問者さんのためではなく、ここをROMしている人たちに対してです。 >わからない人(私)に言ってもしかたのないことですから,当然ですねぇ これについては、関係ない話なのですが、Excel VBAが分かれば、Word VBAも分かると思い込んでいる人たちがいます。あまりレベルの低いコードで、スレをかき回されるのは、質問者さん自身にも迷惑が掛かるからです。まったく、Word VBAを知らない人が、Excel VBAだけ知って書けるという範囲かかなり限られています。 >alt(option)+F11、あるいはツール-マクロ-作成で作成すればよいのですよね? >それらしく式を入力する窓がでたので,ペーストし,実行しましたが,うまくいきませんでした... >なので,一度削除してからと思ったのですが,削除を実行すると一旦消えたように見えるのですが,再度ツール-マクロとすすむと削除されていません Mac との違いは考慮したつもりでしたが、今、どこが問題なのかは分かりません。 ただ、Wordマクロは、VBEの画面を空けると、Normal.dot があれば、そちらが開いてしまい、そちらに貼り付けてしまいます。それでも構わないのですが、できれば、今のドキュメント側のモジュール(左側の窓で、エクスプローラが出ているので、ドキュメント名をクリックすれば、開きます)に、ThisDocument に書いていただければ、なお良いと思います。 しかし、どこにコードを置いても、Excelとは違い、基本的には、動くはずだと思っていましたが、もしかしたら、 私の # F5 を押せば、マクロは走るはずです これがまずかったかもしれません。(理由:カーソルに位置が、コードの中にないと動かない) 貼り付けた後に、表のドキュメント画面(文章を入力するいつもの画面)に戻って、Alt + F8 を押すか、 ツール-マクロ-マクロ で、窓が出てきますから、その中から、「macFindWord」を選択し、クリックすれば実行されるはずです。(画面がめまぐるしく動くはずですから、あまり美しくないです)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

こんばんは。 VBAが一通りできるようになるまでには、半年から1年掛かりますが、Word VBAは、教本が手に入りにくいし、Word VBAは一般性がいまひとつではないでしょうか。前回のWord VBAの質問者に書きましたが、テキスト処理でよいのではないか、と申しましたが、聞き入れてもらえませんでした。 >カンマの個数でnを置換するようにされているのですね。この場合、(1, 2, 3)が(01, 02, 03)など、0が入っていたり、(01-1, 01-2, 01-3)、(a, b, c)でも対応できるのでしょうか? コンマ(,)の数を数えていますから、もちろん可能です。二桁でも可能なはずです。 >Split で、Ubound で、添え字の上限を取る??? これは、ご質問者さんのためではなく、ここをROMしている人たちに対してです。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 >マクロはNo.4の方が書いていただけましたが、やはり私にはまだ敷居が高いようです。。 マクロを理解するというなら無理に近いし、ここの掲示板でも、一般のWord VBAを書ける人は、何人もいないと思います。(一般のWord VBAという意味は、Mac で、Word の標準コードを無視しないで書くという意味です。) マクロの登録の仕方程度なら、誰でも出来るというか、Excelのようなややこしさはありません。Alt + F11 で開いて、自分のDocument のThisDocument 辺りに貼り付けて、F5 を押せば、マクロは走るはずです。(セキュリティは、「中」以下です)

nezg-fhero
質問者

補足

ナンバー6へと合わせての投稿とさせて頂きます. >これは、ご質問者さんのためではなく、ここをROMしている人たちに対してです。 わからない人(私)に言ってもしかたのないことですから,当然ですねぇ ワイルドカードでの操作(検索と置換の操作)は,慣れの点で理解できたので,ワイルドカードを用いて,今回は置換いたしました. しかし,マクロも勉強だと思い,マクロでも一度やってみました. そこで,少々問題が... alt(option)+F11、あるいはツール-マクロ-作成で作成すればよいのですよね? それらしく式を入力する窓がでたので,ペーストし,実行しましたが,うまくいきませんでした... なので,一度削除してからと思ったのですが,削除を実行すると一旦消えたように見えるのですが,再度ツール-マクロとすすむと削除されていません... なにか間違った操作をしているのでしょうか?

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんばんは。 途中まで作ってみて、問題がひとつあるのが気が付きました。それは、Mac ですと、IEのVBScript の正規表現が使えなかったように思います。ですから、一旦、作ったものを全部やり直しました。 原理は、コンマ(,)の数を数えて、その数に1を足して、n に入れるという方法です。数字を数える方法もよいのですが、Split で、Ubound で、添え字の上限を取るというのも、月並みでしたし、配列を使う必要もないのでやめました。最後の検索値でとまります。 Sub macFindWord()   Dim myRange As Range   Selection.HomeKey Unit:=wdStory   With Selection.Find     .ClearFormatting     .Text = "n人(*)"     .Replacement.Text = ""     .Forward = True     .Wrap = wdFindContinue     .Format = True     .MatchCase = False     .MatchWholeWord = False     .MatchByte = False     .MatchAllWordForms = False     .MatchSoundsLike = False     .MatchFuzzy = False     While .Execute(FindText:="n人(*)", _       Wrap:=wdFindContinue, _       MatchWildcards:=True) = True       Set myRange = Selection.Range       WordRep myRange     Wend   End With   Set myRange = Nothing End Sub Sub WordRep(rng As Range) Dim i As Integer Dim j As Integer Dim buf As String Dim n As Variant Dim m As Variant Dim rept As Variant    i = InStr(1, rng.Text, "(", 1) + 1    j = InStr(1, rng.Text, ")", 1)    buf = Mid(rng.Text, i, j - i)    n = Len(buf) - Len(Replace(buf, ",", "", , , 1)) + 1    m = InStr(rng.Text, "人")    rep = Mid(rng.Text, 1, m - 1)    Selection = Replace(rng.Text, rep, n) End Sub

nezg-fhero
質問者

お礼

マクロ、ありがとうございます! Split で、Ubound で、添え字の上限を取る??? 今の私にはさっぱりです。。。残念です。。。 マクロについて知っていると、便利なんですよね。。きっと。。。。 今は時間がないので難しいですが、なんとかマクロについて理解できる日が来るように努力しないとだめですね とりあえずわかることは、Wendy02様が作成させた式をコピーしてペーストすればよいのだ!ということです(汗) カンマの個数でnを置換するようにされているのですね。この場合、(1, 2, 3)が(01, 02, 03)など、0が入っていたり、(01-1, 01-2, 01-3)、(a, b, c)でも対応できるのでしょうか? うーむ。。。マクロっていうのはこういう風に、文書(ファイル)に対して、ああしろこうしろと命令するためにあったのですね。 エクセルを使用していて、このセルにこう入力したら、全部でああなれば。。。みたいなときに、マクロを知っていれば、すばらしく便利にいろんなことができるんですねっ コマンドプロンプロ(でしたっけ)や、ターミナルもそうですよね。 もっと深く(私からしたら)できると可能性がうんと広がるのにと、PC(あるいはMac)に向かっていて思うことが多いです。 >ですから、一旦、作ったものを全部やり直しました。 ここまでしていただきありがとうございました!

回答No.2

マクロにしたほうが簡単だとは思いますが、私はマクロのアドバイスは できかねますので、置換だけでの説明です。 ワイルドカードを使用してとあるので [検索する文字列] (n)(人(?, ?, ? )) [置換後の文字列] 3\2 n人の部分を (n)(人(?, ?, ?, ? )) の4人に対応する場合は、「, ?」を 増やして数字部分と同じに数にして、置換後の文字列で「4\2」のように 最初の数字を増やします。あとは[すべて置換]ボタンで必要数置換する ことで対応できるかと思います。

nezg-fhero
質問者

お礼

ありがとうございます! ナンバー1の方にお礼を投稿していたら,enunokokoro様からも回答がありました... マクロは難しいものと私は食わず嫌いしてきたので,私もマクロの使い方がわかりません... 簡単なのでしょうか? nや人(?, ?, ? )の前後の括弧,は何を指示する括弧なのでしょうか? また,バックスラッシュ2,も何の意味があるのでしょう?半角,でしょうか? ヘルプも見てみますっ 置換でワイルドカードを用いてだと,一度に全部とはいかず,ある程度,繰り返さないといけないのですね. でも,n=3や4などだけでも,一度に置換できるだけでとても助かります!

noname#96418
noname#96418
回答No.1

たぶんもっといい方法があるのでしょうが、お急ぎなら・・・ たとえば3人の場合、置換後の文字列を 3^& (^& は検索文字列)にして、いったん 3n人(1, 2, 3) などへ置換して、あとでよぶんな n を削除されたら(検索する文字列を n にして、置換後の文字列を指定せずに置換)どうでしょう。

nezg-fhero
質問者

お礼

ありがとうございます! 検索文字列にn人(?, ?, ?)で,置換後を3^&ということでしょうか? そうすれば,3n人(1, 2, 3)になるのですね... 置換後の文字列について,よく調べきれなかったので,よかったですっ なるほどっ.一括して同じものを削除するのは簡単ですものね! やってみます.もし,さらに何かいい方法があれば,今後のためにお願いします. n人(1, 2, 3)や、n人(2, 3, 4)、n人(1, 2, 3, 4)、n人(2, 3, 4, 5)が混在しているので,はじめは,検索文字列を「n人」、置換後を3人にし,次を検索を何度もクリックしてn人(1, 2, 3)や、n人(2, 3, 4)の所だけ置換をして,次は4人を...という風にしていたのですが,あまりにも多くて...

関連するQ&A

  • ワードのワイルドカードを使った置換について

    ワードでワイルドカードを使って置換をしたいのですが、うまくいきません。 数字の前の全角スペースを半角スペースに変えたいのです。 置換でワイルドカードを使用するにチェックを入れ、 検索する文字列は「全角スペース[0-9]」 置換後の文字列は「半角スペース\1」 として実行してみたのですが、 〔置換後の文字列〕に指定できない範囲の番号が含まれています というメッセージが出ます。 全角スペース[0-9]はきちんと認識しているようで、検索まではうまくいっているようですが、 置換後の指定の仕方が悪いようなのです。 お教えいただければと思います。 よろしくお願いいたします。

  • WORDのワイルドカード置換について

    WORDで、ワイルドカード[0-9]で半角数字を検索し(検索は出来ました)、これを全角数字に置換したいとき、置換後の文字列はどういう風に入力したらよいでしょうか。全角数字の表示形式が分かりません。[0-9]では出来ませんでした。 文字種の変換で行うしかないのでしょうか?

  • wordのワイルドカードを使った置換について

    word2007でワイルドカードを使った置換をしたいと思いますが、うまくいきません。 数字の前の全角空白を半角空白にしたいと思います。、数字は全て半角です。 ○全角空白 △半角空白として 「第○1章」を「第△1章」と置換したいと思います。 置換で検索する文字列に 「○([0-9])」 置換後の文字列       「△\1」 と指定すると、置換後の結果は 「第1△章」 となります。 どうしてでしょうか。 どのように指定すればよいのかお教えください。 インストールしているアプリと関係があるということはあるでしょうか。そんなに複雑な使い方はしていませんが…… よろしくお願いいたします。

  • 置換のことで

    エクセルの置換のVBAのことですが。 あるシートに沢山の文字列が入力されています。 abcという文字列が含まれるセルの最後の部分は、必ず以下のようになります。 カンマ 半角スペース 数字 カンマ 半角スペース 数字  閉じカッコ  ,             13    ,            56       ) 数字はばらばらで、1桁か2桁のどちらかで0はないです。 このような状況で、閉じカッコの左側の数字を全て 1 に置換するVBAが知りたいのですが。

  • MSワード ワイルドカード

    最近気づいたのですが、ワード文章においてワイルドカードを選択して検索置換すると、半角スペースと全角スペースとを区別、英字の大文字と小文字とを区別してくれるように思うのですが、そうでしょうか。  「あいまい検索」とは対照的に、細かい違いも検出するのがワイルドカードでしょうか。

  • 長文において、項目番号の全角括弧を一度に半角括弧に置換したい

    長文において、項目番号の全角括弧を一度に半角括弧に置換したい Word2002のソフトを使用。 長い文章があります。 例えば、項目番号(3):括弧は全角 を(3):括弧は半角に変更したい。 [検索と置換]のダイアロボックス表示し、[検索する文字列]に(3)を、 [置換後の文字列]に(3)と、書き換える語句を入力している。 この方法だと(3)、(4)・・・と一個ずつ変更していかなければならない。 (質問)(1)、(2)、(3)、(4)と項目番号全てを一度に置換することは出来ないのでしょうか。全角の丸括弧()を半角の丸括弧に()に。

  • Excelでの置換の仕方

    昨日もこちらでお世話になり、問題が解決いたしました。 そしてそこで疑問がまた浮上してきました。データーで数字の全角と半角の物が混ざっているので、データーの処理上、半角に統一をしたいと思っています。昨日いただいた回答の中に「事前に「置換」でスペースを削除し、=ASC(A1)等で半角」とアドバイスがありました。 しかしどのように使用していいのか分かりません。 「編集」→「置換」そして検索する文字列とか置換後の文字列とかいろいろと選ぶ項目があると思うのですが、そこからが分かりません。 どうかアドバイスをよろしくお願いいたします。

  • エクセルで空欄を0に置換したい

    excelの表で空欄をまとめて「0」に置換したいのですが、 置換で検索する文字列を 「""」スペース無し 「" "」半角スペース 「" "」全角スペース としても一致するデータはありませんといわれてしまいます。 以前出来たはずなのですが・・・。 どうしたらよいか教えて下さい。 よろしくお願いします。

  • excelで置換が上手くいきません

    excel for office365を使用しています。 各セルに文章が書かれていて、句読点が全角で「,」「.」になっているのを「、」「。」に置換しようとしたところ、「1. 」「2. 」のような「数字+半角カンマ+半角スペース」で書かれている部分が「1。」「2。」といった感じに置換されてしまいます。 関数を使用せずに置換だけでこれを回避する方法をご教示ください。 自分で試した方法としては、一旦「.」を全て「。」に置換した後、ワイルドカードを使って「[0-9]。」を「[0-9]. 」に置換しようとしましたが該当無しとなり、「?。」を「?. 」で変換したら数字部分が全て「?. 」になってしまいました。 ワイルドカード部分を据え置きでそれ以外だけ置換するというのは仕様上できないのでしょうか?

  • Word2002 半角数字、半角英字、全角数字、全角英字を別々に検索及び置換する方法?

    Word2002を使用しています。 その1: そこで、半角数字、半角英字、全角数字、全角英字を別々に検索する方法を知りたいです。VBAなどのプログラミングは使用したくありませ ん。例えば、半角数字のみを検索する(該当文字を強調する。)。 検索のみで、この段階では置換しません。 その2: 上記で見つかった半角文字を全角へ(又はその逆で全角文字を半角文字へ)置換する方法を教えて下さい。 よろしくお願いします。

専門家に質問してみよう