ワイルドカードの活用例を紹介します。先日のコメントへの回答を記事にしました。
Beijing,China – Aug 10, 2020の文字列を、2020年8月10日 北京(中国)に変換する機能を作りたいと考えております。Beijingを北京、Augを8月、などは置換で出来ると思っているのですが、文字列の順番自体を入れ替えることはマクロの技術で可能でしょうか?
文字列の順序を入れ替えるのにはワイルドカードを使います。かつて法務翻訳で見出しの書き方を変換する方法を紹介したことがあります。
(参考:【Word】法務翻訳で便利なワイルドカードの置換例)
今回もこのようなワイルドカードを使い方を紹介します。
日付を変更する場合には、以下の記事で対処できます。
(参考:【コード】英語の日付を日本語の日付にするWordマクロ)
実務で使うには、あらゆる条件を考慮しないと思わぬ誤変換がおきてしまいます。記事の後半で注意点として工夫の仕方も紹介しました。
このワイルドカードでできること
置換前
Beijing, China – Aug 10, 2020
Beijing, China – August 10, 2020
Beijing, China – Aug. 10, 2020
置換後
Aug 10, 2020 Beijing(China)
August 10, 2020 Beijing(China)
Aug. 10, 2020 Beijing(China)
ワイルドカード
検索する文字列:([a-zA-Z]{1,}), ([a-zA-Z]{1,}) – ([JFMASOND][a-zA-Z.]{1,} [0-9]{1,2}, [0-9]{4})
置換後の文字列:\3 \1(\2)
オプション:ワイルドカードを使用するをオン
ワイルドカードをオンにしてください。あと、置換後の文字列に蛍光ペンを設定しておくと、一括置換をした場合でも安心ですね。
[置換後の文字列]欄にカーソルを置いてから、[書式]ボタンをクリックして[蛍光ペン]を選択します。
英語の日付の見つけ方
[JFMASOND][a-zA-Z.]{1,} [0-9]{1,2}, [0-9]{4} を日付の検索に使う理由については、以下の記事を参考にしてください。
(参考:【コード】英語の日付を日本語の日付にするWordマクロ)
注意点
お気づきの方もいらっしゃると思いますが、この置換では国名が2語以上の場合にはヒットしませんし、都市名が2語以上の場合にはおかしな変換になってしまいます。
Wellington, New Zealand – Aug. 10, 2020
San Sebastian, Spain – Aug. 10, 2020
このようなことが起こらないように、何パターンも置換式を作る必要があります。というか、先に予測することは難しいので誤変換が起きたときにその原因を分析して誤変換にならないような対策を考えていくということです。
国名が2語の場合
「2語以上」のように上限をなくすと誤変換の原因になりますので、まずは2語の国名だけを対象に考えてみます。
検索する文字列:([a-zA-Z]{1,}), ([a-zA-Z]{1,} [a-zA-Z]{1,}) – ([JFMASOND][a-zA-Z.]{1,} [0-9]{1,2}, [0-9]{4})
都市名が2語の場合
検索する文字列:([a-zA-Z]{1,} [a-zA-Z]{1,}), ([a-zA-Z]{1,}) – ([JFMASOND][a-zA-Z.]{1,} [0-9]{1,2}, [0-9]{4})
この検索条件では、1語の都市名の直前の関係ない単語を含めて置換してしまいそうなので、単語の先頭を大文字にして誤変換の可能性を減らすとか工夫ができそうです。
検索する文字列:([A-Z][a-z]{1,} [A-Z][a-z]{1,}), ([a-zA-Z]{1,}) – ([JFMASOND][a-zA-Z.]{1,} [0-9]{1,2}, [0-9]{4})
置換後の文字列:\3 \1(\2)
ところが、上記を実行しようとすると以下のメッセージが出てきました。
これはあきらめるしかなさそうですね。
さらに別の工夫もできます。
今回は質問いただいたテキストに使われていたように、国名と日付の間にEn Dashがあるという前提にしています。これが半角ハイフンになっていることもよくあります。同じ文書内で同じ書き手であっても表記が揺れることはよくありますから、ハイフンも何種類か対応するようにしておくといいかもしれません。
Beijing, China – Aug 10, 2020
検索する文字列:([a-zA-Z]{1,}), ([a-zA-Z]{1,}) [–\-] ([JFMASOND][a-zA-Z.]{1,} [0-9]{1,2}, [0-9]{4})
奥が深いですね。
応用技
マクロを作る場合には、このワイルドカードを使った一括置換をマクロの記録にすればいいです。
上記のようにいくつも置換のパターンが出てくると思いますので、 上書き翻訳ツールやぱらぱらに登録して置換を自動化してもいいと思います。