• ベストアンサー

文字の判定について

はじめまして。 vba初心者でして、とても困っているのです。 セルの値が数字かどうかの判定はどうやら IsNumeric で出来るようですが、 英数字かどうかの判定方法がわかりません! (半角の数字とアルファベットのみの文字列かどうか) ご存知の方いらっしゃったら教えてください! お願いします。

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.3

特定のセルに対してなら、データ-入力規則の日本語入力タブで日本語入力を「無効」にしておいた方が手っとり早いけど、、、 (入力出来なくしちゃう) 下記は #2さんの回答とやってる事はまったく同じですが、ループも含めてFunction化してますので、感覚的にIsNumericに近いと思います。 '------------------------------------------------ Sub test()  If myCheck(Range("A1").Text) Then    MsgBox "OK"  Else    MsgBox "NG"  End If End Sub '------------------------------------------------ Function myCheck(ByVal s As String) As Boolean Dim i As Integer  For i = 1 To Len(s)   Select Case Asc(Mid(s, i, 1))   Case 48 To 57, 65 To 90, 97 To 122   Case Else      myCheck = False      Exit Function   End Select  Next i  myCheck = True End Function '------------------------------------------------

de_la_monkey
質問者

お礼

なるほどー。 これは使い易いですね! とても助かりました。 papayukaさん、ありがとうございました。

その他の回答 (2)

回答No.2

以下の関数を作って、全文字についてチェックしたらいかがでしょうか? '一文字を受け取り、それが英数字かどうか調べる関数 Function IsAlphaAndNumber(chara As String) As Boolean Dim code As Integer '初期化 IsAlphaAndNumber = False   '調べる文字を大文字に変換してASCIIコードを取得 code = Asc(UCase(chara)) '文字コードが”A~Zまたは0~9の範囲内ならば英数字である。 If (code >= vbKeyA And code <= vbKeyZ) Or _ (code >= vbKey0 And code <= vbKey9) Then IsAlphaAndNumber = True End If End Function それで、 celVal = ???.Value '←セルの値。 result = True '結果。とりあえずTrueで初期化 For i = 1 To Len(celVal) If Not IsAlphaAndNumber(Mid(celVal,i,1)) Then result = False Exit For End If Next resultがTrueのままなら全部英数字。 Falseになってれば英数字以外が含まれる。

de_la_monkey
質問者

お礼

早速やってみました。 おかげさまで、期待した結果を得ることができました。 pen_pen_penさん、どうもありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

VarType関数と言うのがあります。これが使えないでしょうか。 http://www.zusaku.com/vbtry.htmlなどのVarType参照

de_la_monkey
質問者

お礼

回答ありがとうございます! これは値を格納する変数の型が分かるのでしょうか?? リンク先を見ても良く分からないのですが (慣れない言葉が多くて…)、色々試してみます。 どうもありがとうございました!