1304324454 ExcelVBAについての質問です。

選択範囲内に任意文字コード範囲(添付画像の文字)が含まれていればセルの背景色を変えるようにしたいのですが
以下のコードでは文字コード範囲外のセルも塗りつぶされてしまいます。
どこに問題がありましょうか?

環境:WinXPpro Excel2010

Sub 抽出()

Dim c As Range
 If Not TypeName(Selection) = "Range" Then Exit Sub
  For Each c In Selection
   If c Like "*[" & Chr(&HED40) & "-" & Chr(&HEEFC) & "]*" Then
    c.Interior.ColorIndex = 15
   End If
  Next
End Sub

回答の条件
  • 1人20回まで
  • 登録:2011/05/02 17:20:55
  • 終了:2011/05/02 20:31:24

ベストアンサー

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982011/05/02 17:53:06

ポイント100pt

多分 文字コードが うまく取得できていないのだと思います。

ちょっと変えてみました。

Sub test()

Dim c As Range
    e = ""
    For a = &HED40 To &HEEFC
        e = e + Chr(a)
    Next a

    If Not TypeName(Selection) = "Range" Then Exit Sub
    For Each c In Selection
        For d = 1 To Len(c)
            If InStr(1, e, Mid(c, d, 1)) > 0 Then
                c.Interior.ColorIndex = 15
                Exit For
            End If
        Next d
    Next
End Sub

id:pocon

早速ありがとうございます。(_ _)

ほぼいけたのですが、なぜか中点(・)を含むセルも塗りつぶされました。

2011/05/02 19:00:30

その他の回答(2件)

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982011/05/02 17:53:06ここでベストアンサー

ポイント100pt

多分 文字コードが うまく取得できていないのだと思います。

ちょっと変えてみました。

Sub test()

Dim c As Range
    e = ""
    For a = &HED40 To &HEEFC
        e = e + Chr(a)
    Next a

    If Not TypeName(Selection) = "Range" Then Exit Sub
    For Each c In Selection
        For d = 1 To Len(c)
            If InStr(1, e, Mid(c, d, 1)) > 0 Then
                c.Interior.ColorIndex = 15
                Exit For
            End If
        Next d
    Next
End Sub

id:pocon

早速ありがとうございます。(_ _)

ほぼいけたのですが、なぜか中点(・)を含むセルも塗りつぶされました。

2011/05/02 19:00:30
id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912011/05/02 18:32:55

ポイント30pt

セルのコードは Unicode ですので シフトJIS のコードで処理をしたいのであれば、コード変換が必要だと思います。

Sub 抽出()
    Dim c As Range
    If Not TypeName(Selection) = "Range" Then Exit Sub
    For Each c In Selection
        If StrConv(c.Value, vbFromUnicode) Like "*[" & Chr(&HED40) & "-" & Chr(&HEEFC) & "]*" Then
            c.Interior.ColorIndex = 15
        End If
    Next
End Sub

としてみてどうでしょうか。

id:pocon

ありがとうございます。

結果は当方コードと同じ結果で、文字コード範囲外のセルが塗りつぶされました。

2011/05/02 19:02:26
id:windofjuly No.3

うぃんど回答回数2625ベストアンサー獲得回数11492011/05/02 20:00:00

ポイント50pt

2010が手近になくコメントにしたかったのですが、コメント・トラックバックは表示しておられないので回答欄で失礼します

 

下記のような具合で試してみてください

(古いExcelだと質問文のとおりで動きます。2007から中身が微妙に変わってるようで、いろいろ試してみるしかないようです)

If (c Like "*[" & Chr(&HED40) & "-" & Chr(&HEEFC) & "]*") = True Then

 

>なぜか中点(・)を含むセルも塗りつぶされました

id:takntさんのコードだとEEEDとEEEEを含んでいるために質問文添付画像のように中黒(・)がリストアップされてしまいます

For a = &HED40 To &HEEEC
    e = e + Chr(a)
Next a
For a = &HEEEF To &HEEFC
    e = e + Chr(a)
Next a
id:pocon

ありがとうございます。

中点の件了解しました。

For a = &HED40 To &HEEEC

e = e + Chr(a)

Next a

For a = &HEEEF To &HEEFC

e = e + Chr(a)

Next a

msgbox e

で、すべての外字が取得されませんでしたが

e = ""

For a = &HED40 To &HED7E

e = e + Chr(a)

Next a

For a = &HED80 To &HEDFC

e = e + Chr(a)

Next a

For a = &HEE40 To &HEE7E

e = e + Chr(a)

Next a

For a = &HEE80 To &HEEEC

e = e + Chr(a)

Next a

としたところ、全ての外字が取得できました。

2011/05/02 20:30:37
  • id:Mook
    いろいろ試している間に、解決したようですね。

    Asc、Chr 関数は ShiftJIS への変換を行うようなので、コード変換は不用だったようです。
    PCで認識できない文字は「・」として表示されるので、このあたりはトラブルの多いところですね。

    誤った回答で失礼しました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません