• ベストアンサー

Word VBAで文書内のUnicode文字を赤色にしたい

Wordで編集した文書内に存在するUnicode文字を赤色にしたいのですが、可能でしょうか? また、そのほかの方法でも強調する方法はありますでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 #2の回答者です。 >Unicodeのみの文字判定ツールというのはどういうものですか? それ自体の理屈は簡単です、その文字コードを、JISに切り替えたときに、文字化けするかどうか、というものです。ただ、それは、JIS,SJIS,区点,Unicode 共有の文字コード検索のアドインで、ずいぶん前に、私のVBAの力を見てもらうためにも作ったものです。 Yahoo のブリーフケースには公開してあるのですが、それを、ここで紹介すると削除されてしまうので、その中身を抜き出して作ってみました。なにぶん、昔に作ったものですから、おかしい部分があるかもしれません。 一応、こちらで試した範囲では、Unicode のみの文字は、記号を含めて、すべて検出するはずです。 JISは、もともと日本独特のものですから、海外に同様のツールはないし、なぜか、ライター用のJIS/区点用のツールがどんどん減ってしまって、Wordに標準装備されていないので、本当は、私も困っています。こらちは、標準的に、Wordを使っているわけではありませんが、納品はWord指定です。 もう1つ困るのは、Office 2007 では、Word側は、Excel側よりも、内部的に、改変されている度合いが高いようです。Word 2003 のVBAコードが、Word 2007 とは共有しないようです。今回のコードは、Word 2003 までしか分かりません。 ------------------------------------------------- '今回は、Wordの標準モジュールに入れてください。 Public Const MYCOLOR As Long = wdColorRed '色-赤 Sub UnicodeLettersSearch() 'Unicode検索プログラム Dim mySelection As Selection Dim num As Long, t As Long Dim TowByte() As String Dim j As Long Dim i As Long Dim ltr As String Selection.HomeKey Unit:=wdStory Selection.EndKey Unit:=wdStory, Extend:=wdExtend Set mySelection = Selection  For i = 1 To Len(mySelection)   ltr = Mid$(mySelection, i, 1)     num = AscW(ltr)     t = Asc(ltr)    If (num <> 63 And t = 63) Or (num > 0 And num < 1000 And num <> t) Then     ReDim Preserve TowByte(j)     TowByte(j) = ltr     j = j + 1    End If  Next i  If j = 0 Then   MsgBox "単語は見つかりません。", vbInformation   Selection.HomeKey Unit:=wdStory   Exit Sub  End If  Application.ScreenUpdating = False  For j = 0 To UBound(TowByte)    WordHilightPrc TowByte(j)  Next  Application.ScreenUpdating = True  Selection.HomeKey Unit:=wdStory End Sub Private Sub WordHilightPrc(ByVal myStr As String)   Selection.Find.ClearFormatting   Selection.Find.Replacement.ClearFormatting   Selection.Find.Replacement.Highlight = True   With Selection.Find     .Text = myStr     .Replacement.Text = myStr     .Replacement.Font.Color = MYCOLOR     .Forward = True     .Wrap = wdFindContinue     .Format = True     .MatchCase = False     .MatchWholeWord = False     .MatchByte = False     .MatchAllWordForms = False     .MatchSoundsLike = False     .MatchWildcards = False     .MatchFuzzy = False   End With   Selection.Find.Execute Replace:=wdReplaceAll End Sub

coral_japan
質問者

お礼

Wendy02さん、お答えありがとうございます。 文字判定ツールやってみました。 すごいです!希望どおりのものです。 とりあえず、こちらを使わせていただこうと思います。 大変助かりました。 ありがとうございました。

その他の回答 (3)

  • Dxak
  • ベストアンサー率34% (510/1465)
回答No.3

> 「はしご高」など、UNICODEにあって、JISにない文字のみ強調したい > です。 [PRB] SHIFT - JIS と Unicode 間の変換問題 - Microsoft http://support.microsoft.com/kb/170559/ja この話ね・・・398個の文字コードチェックすることになるけど? たとえ話で、聞いてね Dim usChar As Object Dim usCode As String For Each usChar In ActiveDocument.Range.Characters usCode = Hex(AscW(usChar.Text)) Select Case usCode Case "2252", …, "9AD9", … usChar.Font.Color = wdColorRed usChar.Bold = 1 Case Else usChar.Font.Color = wdAnimationNone usChar.Bold = 0 End Select Next usChar の様に、Caseのところで398個並べるとか・・・

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 ご質問の意味は、JISで検索して、それ以外のものを吐き出すということですね。ところが、VBA内もUnicode なので、一旦、検索をJISに替えないといけないわけですが、それが出来るか分からないですね。通常、私はもっと簡単な方法しかしていないからです。どの程度のものを望んでいるかにもよります。 たぶん、出来るような気はするのですが、わざわざ、そういうコードを作るのも、自分自身のことなので、面倒なのです。あえて、WordをJISに切り替えて、吐き出すという方法もないというわけではないのですが、試したことがありません。非JIS、Unicodeのみの文字判定ツールは作ったことがありますが、遊びの範囲です。 私は、本当に簡単なことですが、メモ帳やテキストエディタの標準仕様は、JISですし、また、ExcelもJISなので、テキストで貼り付けて、そこで、文字化け「?」を探してしまいます。特に、米国系のニュースサイトは、Unicode 文字が出てきてしまい、本物の「?」かどうか、ちょっとみた分には見分けが付かないことも多いですが。 私の使っているUnicode 文字の正規表現検索(テキストエディタから) (本物か違うものか区分けが出来ませんが、あまり全体には影響ありません。) 検索値 (\s)\?(\s)|^[??](\s*)

coral_japan
質問者

お礼

お答えありがとうございます。 簡単にはできないかもしれませんね。 Unicodeのみの文字判定ツールというのはどういうものですか? 現在、秀丸に貼り付けて、保存するときに警告ダイアログがでるので、それで対応しています。 あらかじめ、WORD上で処理できたらな~と思い、質問しました。 また、いい案がありましたら、お願いします。

  • Dxak
  • ベストアンサー率34% (510/1465)
回答No.1

> Unicode文字 すみませんが・・・Office2000以降内部処理はANSI(ASCII/S-JIS)からUnicodeに変更になってます よって、Word2000以降では内部処理は全てUnicodeですが? 全部、強調しても、仕方ないでしょ? 何がしたいの?

coral_japan
質問者

お礼

お読みいただきありがとうございます。 たしかに、全部UNICODEですね。 「はしご高」など、UNICODEにあって、JISにない文字のみ強調したいです。

関連するQ&A