使用可能文字以外をチェックするには?

解決


メロディ  2009-01-30 11:14:47  No: 141399  IP: 192.*.*.*

環境:Windows XP(SP2),エクセルVB6 です。
度々お世話になっております。
エクセルに入力された文字をチェックし、使用可能文字以外を使用した文字列は、
文字列を赤字にするというのを行いたいのですが、アドバイスお願いします。

わからないのは使用可能文字以外を使用した場合のチェックのところです。
(使用不可能文字をチェックするのはできましたが、使用可能文字を使った
チェック方法で考案中)
前提:使用可能文字  A〜Z,0〜9, =,+,-
お願いいたします。

編集 削除
KG  2009-01-30 12:44:06  No: 141400  IP: 192.*.*.*

>使用不可能文字をチェックするのはできましたが、

この部分がどうやったかわからないけど、条件を
逆にするだけでは、だめなのですか?

編集 削除
メロディ  2009-02-02 10:48:14  No: 141401  IP: 192.*.*.*

コメントありがとうございます。
以前の
>使用不可能文字をチェックするのはできましたが、
についてのコードですが、こんな感じです。
一部禁則文字が抜けていますが、サンプルなので気にしないでください。
これで禁則文字が入っていると、その文字が入った文字列全てが赤字になります。
逆にする方法がわからなくて・・・。
何かアドバイスいただけたらと思います。

---------------------------------------------------------------------
Dim sFileName as string

'禁則文字をprohibitに代入
For Each prohibit In Array("!", "#", "$", "%", "&", "~", "\", "`", "/") 

'禁則文字を検索
If InStr(sFileName, prohibit) > 0 Then

'禁則文字は文字を赤色にする
Worksheets("FileName").Cells(RR, CC).Font.ColorIndex = 3

End If

Next prohibit

編集 削除
魔界の仮面弁士  2009-02-02 11:19:58  No: 141402  IP: 192.*.*.*

これで良いのかな。

Dim found As Boolean
found = False
For Each prohibit In [使用不可能文字の一覧]
  If InStr〜 Then
    〜.ColorIndex = 〜  '…赤文字にするコード
    found = True       '使用不可文字を発見した
  End If
Next

If Not found Then
  '使用不可能文字が一個も無かった場合
End If

編集 削除
メロディ  2009-02-02 12:07:29  No: 141403  IP: 192.*.*.*

魔界の仮面弁士さんご回答ありがとうございます。
申し訳ないんですが、使用不可能文字を使っているか?というチェックではなく、使用可能文字をちゃんと使っているか?という感じでチェックを行いたいのです。ご理解いただける説明ができなくてすみません。

なぜ使用不可能文字だといけないかというと、万が一使用不可能文字の一覧から抜けてしまう記号や文字があるのではないか?という不安から、使用可能文字でチェックをしたかったためです。

A〜Zとか0〜9とか使う文字が多いのですが、その方法でよいものはないでしょうか?(説明下手で申し訳ないです。)

編集 削除
KG  2009-02-02 20:23:29  No: 141404  IP: 192.*.*.*

なんとなくわかった気がします。
正規表現を使えば実現できそうです。
----------------------------------------
    Dim reg As Object
    
    Set reg = CreateObject("VBScript.Regexp")
    reg.Pattern = "^[-A-Z0-9+=]+$"
    If reg.Test(sFileName) Then
        '使用可能文字のみ
    Else
        '使用可能文字以外が含まれている
    End If
------------------------------------------------

みたいなことでしょうか

編集 削除
メロディ  2009-02-03 10:45:55  No: 141405  IP: 192.*.*.*

KGさんありがとうございます。
早速やってみたところうまくいったようです^^
ただパターンの書き方に不安が残ります。
正規表現の参考となるページなどいろいろ調べたりしましたが、
書き方が難しいですね。。。

サンプルでの質問だったので、前提として使用可能文字:A〜Z,0〜9, =,+,-
としていましたが、一部追加をしました。
追加使用可能文字:a-z, (, ), _, .

Reg.Pattern = "^[0-9a-zA-Z-+=()_.]+$"

間違ってたらお手数ですがご指摘下さい。

編集 削除
KG  2009-02-03 20:17:07  No: 141406  IP: 192.*.*.*

"-"を[]内で文字として扱うには[]内の最初か最後しないといけません。
それ以外は問題ないように思えます。


#"."、"("、")"、"+"もメタ文字なので
#エスケープしておいた方が良いのかな・・・自信なし。すみません。

編集 削除
メロディ  2009-02-04 09:23:34  No: 141407  IP: 192.*.*.*

KGさんありがとうございました!
検証中ですが、今は問題なく動いています。
正規表現の記述については、もう少し調べてみます。
発言いただいた方も、ありがとうございました。

編集 削除