さて、水野麻子さんから「マクロで共有の資産をつくる 」の記事で提案いただいたマクロの整形コラボの第一弾が完成しました。
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級合格応援モードさん
コメントどうもありがとうございます。
上記のマクロの改訂にまだ時間がかかりそうです(汗)。。。
いただいたアイディアをうまく生かしたマクロを作りたいと思います。
上記は、ちょっと気を抜きすぎました。。。