プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/02/28 15:21

> 「はしご高」など、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個並べるとか・・・
    • good
    • 0

こんにちは。



ご質問の意味は、JISで検索して、それ以外のものを吐き出すということですね。ところが、VBA内もUnicode なので、一旦、検索をJISに替えないといけないわけですが、それが出来るか分からないですね。通常、私はもっと簡単な方法しかしていないからです。どの程度のものを望んでいるかにもよります。

たぶん、出来るような気はするのですが、わざわざ、そういうコードを作るのも、自分自身のことなので、面倒なのです。あえて、WordをJISに切り替えて、吐き出すという方法もないというわけではないのですが、試したことがありません。非JIS、Unicodeのみの文字判定ツールは作ったことがありますが、遊びの範囲です。

私は、本当に簡単なことですが、メモ帳やテキストエディタの標準仕様は、JISですし、また、ExcelもJISなので、テキストで貼り付けて、そこで、文字化け「?」を探してしまいます。特に、米国系のニュースサイトは、Unicode 文字が出てきてしまい、本物の「?」かどうか、ちょっとみた分には見分けが付かないことも多いですが。

私の使っているUnicode 文字の正規表現検索(テキストエディタから)
(本物か違うものか区分けが出来ませんが、あまり全体には影響ありません。)

検索値
(\s)\?(\s)|^[??](\s*)
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/02/28 11:09

> Unicode文字



すみませんが・・・Office2000以降内部処理はANSI(ASCII/S-JIS)からUnicodeに変更になってます
よって、Word2000以降では内部処理は全てUnicodeですが?

全部、強調しても、仕方ないでしょ?
何がしたいの?
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/02/28 11:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!