【Word VBA】「○○において」→「in the ○○」に置換するWordマクロ

2010年6月17日

先日のyumihenさんの「『において』のマクロ」の記事から改造版をつくってみました。

solution において → in the solution

という感じで書き換えるものです。

勝手に改造版の作用

選択範囲内の文字列を「○○」としてmyPhrase(1)として取得します。

そして、「○○」の後から、「においてける中ので」が続く限り選択範囲を広げて、選択範囲内の文字列をmyPhrase(2)として取得します。(MoveEndWhileメソッド

つまり、「における」、「において」、「中の」、「の中の」、「の中において」、「の中で」などがmyPhrase(2)になるわけです。

よって、

MoveEndWhile Cset:="においてける中ので", Count:=6

として、6文字を最大文字数と設定してみました。

このロジックはyumihenさんのもの。「で」を追加してみました。

で、この文字列から

検索する文字列: myPhrase(1) & myPhrase(2)
置換後の文字列: "in the " & myPhrase(1)

として置換をしています。

改造の趣旨と工夫

もともとyumihenさんのマクロでは、一つだけを書き換えるのですが、私が勝手に改造したものは、カーソル位置から後半すべての同じパターンを一括して置換してしまいます。

この場合、目に見えないところで勝手に置換されるので、ちょっと怖いですよね。

なので、置換したものは、青文字で書き換えるようにしました。

なので、私のマクロは、

solution において → in the solution

という感じです。

実務で使うとどうなんでしょうか?

まだ、自分が実務で試運転した期間は短いのですが、ひとまず掲載してみなさんの反応を見てみましょう。

注意点

下記のような日本語があります。これを 溶液→solution に置換します。

希薄溶液において溶質粒子の
弱酸性溶液において、濃度が1Mぐらいまでは
樹脂溶液においてしばしば蛋白質の

希薄solution において溶質粒子の
弱酸性solution において、濃度が1Mぐらいまでは
樹脂solution においてしばしば蛋白質の

こんな感じになっちゃいます。

なので、「○○において」の「○○」は、できるだけ具体的にして置換をしたほうがいいですね。

以下のとおりケース2をご覧ください。

こんな感じ。これなら、意図しない置換を最小限に抑えられそうです。

マクロ

水野麻子さんの「マクロ名に工夫と注意を」の記事にもとづいて、今後はマクロ名を半角英数字で作成しようかと思います。

みなさんも工夫して名称を変更してみてください。

注!! 以下のプログラムで間違いがあります。

一見、うまくいくように思えますし、実際にうまく作動してしまいます。

間違い探ししてみてくださいね!答えは、関連ページの記事をたどってみてください。


Sub in_the_solution()
 
 Dim myPhrase(1 To 2) As String
 Dim myRange As Range
 
 Set myRange = Selection.Range
 
 If Selection.Text = vbNullString Then End
 
 With myRange
  myPhrase(1) = .Text
  .Collapse direction:=wdCollapseEnd
  .MoveEndWhile Cset:="においてける中ので", Count:=6
  myPhrase(2) = .Text
 End With
 
 myRange.SetRange Start:=Selection.Start, End:=Selection.Start
 
 With myRange.Find
  .Text = myPhrase(1) & myPhrase(2)
  .Replacement.Text = "in the " & myPhrase(1)
  .Replacement.Font.ColorIndex = wdBlue
  .Forward = True
  .Wrap = wdFindStop
  .Execute Replace:=wdReplaceAll
 End With
 
 Set myRange = Nothing

End Sub

関連ページ

コメント

  • 4. Re:すごいです~(^o^)

    >yumihenさん

    いろいろとアイディアをありがとうございます。

    言われてみて、そうだなと思うことばかり。

    「~による」のバージョンや「として」のバージョンなど、いろいろ展開できるんですね。

  • 3. すごいです~(^o^)

    新田さま、水野さま

    ありがとうございます!
    自分のぷちぷちアイディアをこんな風に膨らませて頂いて、光栄です(^^)

    一括置換までは思い至りませんでした。
    早速使わせて頂きたいと思います。

    実行後のカーソル位置ですが、私個人的には "in the solution" を選択している状態が、次の作業(コピペ)に便利だと思っています。
    なので、自分が書いたマクロでは、変数に格納した"solution" の貼り付けを  InsertAfter でしています。

    でも、これも作業される方の好みでしょうね。
    こういった微調整・改造が利くところが、マクロの良いところですね(*^_^*)

    また、単純な応用ですが、

    「~による、によって、により」 → "by the ..."
    「として、としての、としては」 → "as the ..."

    も自作で使っています。
    新田さんの一括置換バージョンで、これらもお試しさせて頂こうと思います・・・(^^)

    いろいろ発展してくると楽しいですね♪

    yumihen返信する
  • 2. Re:バリエーション

    >水野@教育アーティストさん

    ありがとうございます。

    2つのアイディアと理解させていただきました。

    1つは、「『において』などの日本語部分を残しておいた方がいいかも」ということ。

    日本語部分のニュアンスがあるので、一括削除は避けた方がいい場合があるという考えですね。

    なので、実際に翻訳するときに一つ一つ確認したながら削除した方がいいのでは?というご提案と理解しました。

    なるほど。そうかも。このアイディアいただきです。

    2つめは、「作業後、『において』などの日本語の直前にカーソルがあったほうがいいかも」という点ですね。

    私は、ひょっとしたらこの"in the solution"を移動させるかな?と思ったので、"in the solution"の前にカーソルを置いてみたのですが、作業のやりかたによっては変わりますね。

    とくに、日本語を残す場合。

    「置換後の英語(たとえば、"in the solution")を『選択した状態』で置換を終える」というのもありそうですね。

    別の視点で自分のプログラム・考え方を眺めることができました。

    ご提案をどうもありがとうございます。

    次のブログネタです。

  • 1. バリエーション

    こんにちは。

    このコードだとマクロの実行直後はカーソルがinの直前に来ると思いますが、「において」とか「の中で」の「に」「の」の直前まで移動しておくほうが、後々さらにラクではないかという気がします。

    (言っていること、伝わります?)

    そこにカーソルがあると、「あぁ、これで置換はOK」となったときに、すぐに和文部分を削除して次にすすめますから。

    そうでなければ、マクロ置換後にin the solutionは青、残った和文「において」は赤という具合に色分けしておいて、あとで赤字は一括置換する前提で飛ばしていく、というのでも。
    ・・・色分けは、コードが複雑になりすぎますね。

    ということで、カーソルをsolution直後/において直前のバリエーションをご検討頂ければと。

 

-コード
-