人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

1304324454
●拡大する

●質問者: pocon
●カテゴリ:コンピュータ
✍キーワード:as EXIT NeXT sub コード
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● きゃづみぃ
●100ポイント ベストアンサー

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

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

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

◎質問者からの返答

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

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


2 ● Mook
●30ポイント

セルのコードは 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

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

◎質問者からの返答

ありがとうございます。

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


3 ● うぃんど
●50ポイント

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
◎質問者からの返答

ありがとうございます。

中点の件了解しました。

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ