【Word VBA】日本語と英語の順序を入れ替えるWordマクロ

2010年5月31日

さて、水野麻子さんから「マクロで共有の資産をつくる 」の記事で提案いただいたマクロの整形コラボの第一弾が完成しました。

Cocoさん、マクロのご提案をありがとうございます。

もともと秀丸のマクロで作られたものですが、ワードに翻訳して、少し味付けしました。

作用

以下のように、語順を変えます。

上記の2つの例のように、文字列を選択した状態でマクロを実行すると、日本語と英語の位置をひっくり返ります。

そして、最後の日本語は削除されて、カーソルが最後に位置します。

用途

CT(ワード) やSimplyTerms (エディタ)を用いた翻訳において、日本語の原文から、主要な名詞や動詞を英語に一括置換します。

その日本語と英語が混在した文章から英文を作る場合に、英単語の順序をひっくり返すことがたびたび出てきます。

その作業を自動化したマクロです。

考え方

昨日の「半角英数字・記号を検索する」で紹介したワイルドカードを用います。

置換での順序の入れ替えについては、水野麻子さんが無料で公開されている電子ブック「Microsoft Office Word(R) ワイルドカード徹底活用ガイド 」のP.23の事例に近いかもしれません。

色がわかりづらいですが、こんな感じで順序入れ替えしています。

[検索する文字列]:([ -~]{1,})([! -~]{1,})([ -~]{1,})([! -~^9^11^13]{1,})
[置換後の文字列]:\3\2\1

半角英数字(数字、アルファベット以外に、半角スペース、半角記号($や!など)を含む)を上記のように、[ -~]で、示してみました。

これは、「Wordで実践」の155ページからヒントをもらっています。

また、日本語については、「タブ、改行(ソフトリターン、ハードリターン)をのぞく半角英数字以外の文字」という定義で探しています。

これは、水野麻子さんの「秀丸で全角文字を検索する 」の記事に掲載されていた以下の考え方の応用ですね。

全角文字=半角ではない文字

4つめの条件式で、タブや改行(^9^11^13)を検索対象から除外するのは、安全策としてやっているので、別になくてもかまいません。

ただ、選択範囲の末尾にタブや改行が含まれてしまうと、変な処理になりますから、その回避のためです。

技あり!

Cocoさんからご提案いただいたマクロの考え方に、素敵だなと思うアイディアが入っています。

ワイルドカードで4つの文字列を検索しているのですが、4つめの日本語

(上記検索式では、([! -~^9^11^13]{1,}) → \4に対応)は置換後表示しないんですね。

つまり、「削除する」ことになっているんです。

私もこのマクロと同じような考え方のものを使っていますが、こういう使い方をしていなかったので、これは面白い考え方ですね。

不要な日本語の削除も同時に行ってしまうというおいしさ。素敵です。

応用方法

いくつか応用が考えられますが、それは後ほど。(今後のブログのネタにさせていただきます)

注意点

フォントの種類をSymbolにした場合のギリシャ文字は、半角英数字として認識されません。

逆に、日本語文字として認識されてしまいます。

どのような処理結果になるのか、ご自身で入力してご確認ください。

プログラム

実は、マクロの間違いに気がつきました。実務では使わないでくださいね。
修正版は、最後に記載される関連記事をご覧ください。

Sub 順序入れ替えマクロ()

 Dim SS As Long 'カーソル位置
 
 'カーソルの開始位置を記憶
 SS = Selection.Start
 
 '文字列が選択されていない場合には処理を実行しない
 If Selection.Start = Selection.End Then End
 
 '置換処理の実行
 Selection.Find.ClearFormatting
 Selection.Find.Replacement.ClearFormatting
 With Selection.Find
  .Text = "([ -~]{1,})([! -~]{1,})([ -~]{1,})([! -~^9^11^13]{1,})"
  .Replacement.Text = "\3\2\1"
  .Forward = True
  .Wrap = wdFindStop
  .Format = False
  .MatchCase = False
  .MatchWholeWord = False
  .MatchByte = False
  .MatchAllWordForms = False
  .MatchSoundsLike = False
  .MatchFuzzy = False
  .MatchWildcards = True
  .Execute
  If .Found = True And Selection.Start = SS Then
   .Execute Replace:=wdReplaceOne
   Selection.Collapse Direction:=wdCollapseEnd 'カーソルを置換後の文字列の末尾に移動
  Else
   MsgBox "選択範囲内で置換対象が見つかりませんでした。"
  End If
 End With
 
 '検索条件の削除
 Selection.Find.ClearFormatting
 Selection.Find.Replacement.ClearFormatting
 With Selection.Find
  .Text = ""
  .Replacement.Text = ""
  .Forward = True
  .Wrap = wdFindContinue
  .Format = False
  .MatchCase = False
  .MatchWholeWord = False
  .MatchByte = False
  .MatchAllWordForms = False
  .MatchSoundsLike = False
  .MatchWildcards = False
  .MatchFuzzy = True
  .Execute
 End With

End Sub

関連記事

・日本語と英語の順序入れ替えマクロ ←現在地

・ワードの検索のクセ

・日本語と英語の順序入れ替えマクロ(2)

コメント

 

  • 5. Re:ありがとうございます。

    >翻訳者Coco@英検1級合格応援モードさん

    コメントどうもありがとうございます。

    上記のマクロの改訂にまだ時間がかかりそうです(汗)。。。

    いただいたアイディアをうまく生かしたマクロを作りたいと思います。

    上記は、ちょっと気を抜きすぎました。。。

  • 4. Re:ありがとうございます。

    >翻訳者Coco@英検1級合格応援モードさん

    コメントどうもありがとうございます。

    上記のマクロの改訂にまだ時間がかかりそうです(汗)。。。

    いただいたアイディアをうまく生かしたマクロを作りたいと思います。

    上記は、ちょっと気を抜きすぎました。。。

  • 3. Re:シンボルフォント

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

    シンボルのフォントをありがとうございます。
    使えました!!

    今までずっと作りたかったシンボルフォントの検索を用いたマクロができました。

    英文明細書中にシンボルフォントのギリシャ文字が用いられているときに、日本語だけを着色するマクロです。

    私の英文明細書の書き方なので、他の方には役立つかどうかわかりませんが、マクロの例として試運転をしてから、みなさんに公開しようと思います。

  • 2. シンボルフォント
    半角アルファベットにシンボルフォントをかけた場合のギリシャ文字コードを秀丸で調べたら、
    大文字0xF041(10進換算61505)~0xF05A(61530)、小文字0xF061(61537)~ 0xF07A(61562)でした。半角アスキーの範囲をChr、ユニコードの範囲をChrW関数で組み合わせて指定することができれば、シンボルフォントのギリシャ文字を挟む場合にも対応できるかもしれません。試してないので分かりませんが。
  • 1. ありがとうございます。

    新田さん、ご紹介いただきまして、ありがとうございます。

    私は今英検1級合格応援モードですが、英検が終わったら秀丸モードに入ろうと思っています。その時は、ぜひまたお力をお借りできれば嬉しいです!

 

-コード
-, ,