【Word VBA】様々な半角ハイフンを通常の半角ハイフンに置換するWordマクロ(その3)

2016年8月22日

以前の記事「【コード】様々な半角ハイフンを通常の半角ハイフンに置換するマクロ」と「【コード】様々な半角ハイフンを通常の半角ハイフンに置換するマクロ(その2)」で、Wordには複数の種類の文字コードによる偽ハイフンがあるということを説明し、それらを通常の半角ハイフンに置換する仕組みを紹介しました。

最近、ブログ読者の方から別のハイフン(Soft Hyphen)があることを教えていただきました。

また、ハイフンを探しているうちに、Wordで使われる「任意指定のハイフン」が変換の対象外になっていることに気がつきました。

この機会に、合計で11種類のハイフンを扱えるように過去のマクロを改良してみます。

Wordで動く翻訳チェックソフト「色deチェック」で、上記2つのハイフンもチェックできるように次のバージョンで修正します。

このマクロでできること

11種類の偽ハイフンを通常の半角ハイフンに置換します。

置換箇所を明るい緑色で着色します。

マクロの解説

19行目のように、検索する文字列に、ChrW(&HAD)  (ソフトハイフン)と ^- (任意指定のハイフン)とを追加しました。

ソフトハイフンの場合、VBEではUnicodeの文字を表示できないため、文字コードに基づいて表示しています。

以下のように、[記号と特殊文字]ダイアログボックスにて、Soft HyphenのUnicode(16進)の文字コードを探します。

ハイフン

VBEで入力すると、ChrW(&H00AD) が ChrW(&HAD) のように自動的に変換されます。

マクロ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Sub 様々な半角ハイフンを通常の半角ハイフンに置換するマクロ3()
 
  Dim myRange As Range
  Dim strFind As String '検索する文字列
  Dim strRepl As String '置換後の文字列
  Dim myColor As String
 
  '現在の蛍光ペンの色を保存
  myColor = Options.DefaultHighlightColorIndex
 
  '蛍光ペンの色を黄色に設定
  Options.DefaultHighlightColorIndex = wdBrightGreen
 
  '検索する文字列:様々なハイフンの定義11種類
  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

-コード
-, , ,

S