以前の記事(【コード】様々な半角ハイフンを通常の半角ハイフンに置換するWordマクロ(その3) )の修正です。
前回の記事では、Wordで使われる表記の異なるハイフンが11種類とし、それらをすべて半角ハイフンに置換するマクロを紹介しました。
ところが、私がこのときに挙げた「任意指定のハイフン」はやはり対象外とした方がいいですね。ブログの読者の方からご指摘をいただきまして、よくよく考えてみたらその通りでした。ご指摘をありがとうございました!
<目次>
任意指定のハイフンとは?
以下の記事にて紹介されているとおり、行に収まらない単語を任意の位置で分割するためのハイフンです。
行の末尾の文字列と次の行の先頭の文字列をつなぐハイフンですね。
このハイフンを単語が行の末尾に来た場合にのみ出現するものですから、エンダッシュやエムダッシュなどと表記統一をする必要はもともとありません。
ですから、今回のマクロからは除外するべき項目です。
前回の記事執筆時にはあまり考えずに入れてしまいすみませんでした。
このマクロでできること
以下の1~10に対応する10種類の偽ハイフンを通常の半角ハイフンに置換します。
置換箇所を明るい緑色で着色します。
- Hyphen
- Non-Breaking Hyphen
- Figure Dash
- En Dash(半角ダッシュ)
- Em Dash(全角ダッシュ)
- Horizontal Bar
- Hyphen Bullet
- Minus Sign
- Soft Hyphen
- 改行をしないハイフン
- Hyphen-Minus(半角ハイフン)
- Fullwidth Hyphen-Minus(全角ハイフン)
Wordでの表記は以下の通りです。
上記は、游ゴシック体で表記しています。別のフォントを使うと、ハイフンの長さが変わりますのでご注意ください。
つまり、ハイフンは、見た目ではなんの記号なのか判断がつかないということです。
なお、編集記号を表示した場合、以下のようになります。
「改行をしないハイフン」は、細い線になります。これは文字ではなく、Wordで使われている制御ですから、文字コードがありません。
Word 2003とWord 2016で確認してみたのですが、「改行をしないハイフン」を印刷する場合には半角ハイフン(11番)と同じように見えます。
今後公開する色deチェック(Wordで動く翻訳チェックソフト)では、この10種類のハイフンを11番のHyphen-Minusに変換するような仕様にします。
マクロの解説
15行目のように、前回のコードから ^-(改行をしないハイフン)を削除しました。
マクロ
Sub 様々な半角ハイフンを通常の半角ハイフンに置換するマクロ4() Dim myRange As Range Dim strFind As String '検索する文字列 Dim strRepl As String '置換後の文字列 Dim myColor As String '現在の蛍光ペンの色を保存 myColor = Options.DefaultHighlightColorIndex '蛍光ペンの色を黄色に設定 Options.DefaultHighlightColorIndex = wdBrightGreen '検索する文字列:様々なハイフンの定義10種類 strFind = "[" & ChrW(&H2010) & ChrW(&H2011) & _ ChrW(&H2012) & ChrW(&H2013) & _ ChrW(&H2014) & ChrW(&H2015) & _ ChrW(&H2043) & ChrW(&H2212) & _ ChrW(&HAD) & "^~" & "]" '置換後の文字列:通常の半角ハイフン strRepl = ChrW(&H2D) '一括置換を実行(「検索と置換」ダイアログボックスの設定) With Selection.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