- ベストアンサー
文字の判定について
はじめまして。 vba初心者でして、とても困っているのです。 セルの値が数字かどうかの判定はどうやら IsNumeric で出来るようですが、 英数字かどうかの判定方法がわかりません! (半角の数字とアルファベットのみの文字列かどうか) ご存知の方いらっしゃったら教えてください! お願いします。
- みんなの回答 (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 '------------------------------------------------
その他の回答 (2)
- pen_pen_pen
- ベストアンサー率65% (52/79)
以下の関数を作って、全文字についてチェックしたらいかがでしょうか? '一文字を受け取り、それが英数字かどうか調べる関数 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になってれば英数字以外が含まれる。
お礼
早速やってみました。 おかげさまで、期待した結果を得ることができました。 pen_pen_penさん、どうもありがとうございました。
- imogasi
- ベストアンサー率27% (4737/17069)
VarType関数と言うのがあります。これが使えないでしょうか。 http://www.zusaku.com/vbtry.htmlなどのVarType参照
お礼
回答ありがとうございます! これは値を格納する変数の型が分かるのでしょうか?? リンク先を見ても良く分からないのですが (慣れない言葉が多くて…)、色々試してみます。 どうもありがとうございました!
お礼
なるほどー。 これは使い易いですね! とても助かりました。 papayukaさん、ありがとうございました。