後に改良しました。16-08-22 【コード】様々な半角ハイフンを通常の半角ハイフンに置換するマクロ(その2) 【コード】様々な半角ハイフンを通常の半角ハイフンに置換するマクロ(その3) 【コード】様々な半角ハイフンを通常の半角ハイフンに置換するマクロ(その4)
先日の上書き翻訳セミナーをご受講いただいた方から、ハイフンについてのご質問をいただきましたのでサンプルマクロを作ってみました。
外国からの原文ファイルには様々なハイフンがはいっています。
それらを適切に扱うことは非常に大切です。
特に、上書き翻訳用の辞書を作る場合、原文のハイフンの種類を1つに統一することは必須です。
そうすれば、その統一した1種類のハイフンに対応した辞書を作成すればいいわけですから、置換される確率が格段に高まります。
原文ファイルを美しく整理する技術が大切であることをセミナーではお伝えしましたが、このハイフンの統一もその1つだと思います。
このマクロでできること
本文中にある「様々な半角ハイフン」を「通常のハイフン」に置換し、明るい緑で着色します。
通常のハイフンは、キーボードの数字の0の右隣にあるキーで入力できます。
または、テンキーのマイナス記号で入力できます。
様々な半角ハイフンというのは、水野麻子さんの以下の記事をご覧ください。
Hyphen、Non-Breaking Hyphen、Figure Dash、En Dash、Em Dash、Horizontal Bar、Hyphen Bullet、Minus Signといろいろあります。
(マクロ実行前)
(マクロ実行後)
マクロの解説
コードの中にそのままハイフンの記号を入力できればいいのですが、VBEの画面では記載できない文字列があります。
今回のハイフンのいくつかが、VBEで記載できません。
そのため、文字列を指定するために文字コードを利用しました。
検索する文字列には、16進ユニコードをChrW関数で文字列に変換しています。
文字コードは、「記号と特殊文字」ダイアログボックスで取得できます。
右下のコード体系をUnicode(16進)とします。
40行目でワイルドカードにしています。
.MatchWildcards = True ‘ワイルドカードを使用する
上記の8種類のハイフンのうち1つを検索するようにしています。
マクロ
Sub 様々な半角ハイフンを通常の半角ハイフンに置換するマクロ() Dim myRange As Range Dim strFind As String '検索する文字列 Dim strRepl As String '置換後の文字列 Dim myColor As String '現在の蛍光ペンの色を保存 myColor = Options.DefaultHighlightColorIndex '蛍光ペンの色を黄色に設定 Options.DefaultHighlightColorIndex = wdBrightGreen '検索する文字列:様々なハイフンの定義8種類 strFind = "[" & ChrW(&H2010) & ChrW(&H2011) & _ ChrW(&H2012) & ChrW(&H2013) & _ ChrW(&H2014) & ChrW(&H2015) & _ ChrW(&H2043) & ChrW(&H2212) & "]" '置換後の文字列:通常の半角ハイフン strRepl = ChrW(&H2D) 'myRange(オブジェクト変数)を設定 Set myRange = ActiveDocument.Range(0, 0) '一括置換を実行(「検索と置換」ダイアログボックスの設定) With myRange.Find .Text = strFind '検索する文字列 .Replacement.Text = strRepl '置換後の文字列 .Replacement.Highlight = True .Forward = True .Wrap = wdFindStop .Format = True '書式の設定をオン .MatchCase = False '大文字と小文字の区別する .MatchWholeWord = False '完全に一致する単語だけを検索する .MatchAllWordForms = False '英単語の異なる活用形を検索する .MatchSoundsLike = False 'あいまい検索(英) .MatchFuzzy = False 'あいまい検索(日) .MatchByte = False '半角と全角を区別する .MatchWildcards = True 'ワイルドカードを使用する .Execute Replace:=wdReplaceAll End With '蛍光ペンの色を元に戻す Options.DefaultHighlightColorIndex = myColor 'myRangeを解放 Set myRange = Nothing End Sub
コメント