- 締切済み
ExcelVBAで文字列の制御をしたいのですが
セルに5文字の数字を文字列として取り込む入力規制をしているのですが、現段階では小数点を入力してもチェックにはじかれません。 小数点その他記号等チェックではじきたいので以下のようなマクロを組みました。 Dim A As String ’値の取得用の変数 Dim i As Integer 'ループカウンタ For i = i To 5 '左からi個の数値を取り出す A = Left(target.Text, i) '取り出した数の右側の文字を検索(小数点があるとすればこの位置) If Len(A) = 2 Then A = Right(A, i) End If If Len(A) = 3 Then A = Right(A, i) End If If Len(A) = 4 Then A = Right(A, i) End If If Len(A) = 5 Then A = Right(A, i) End If '取り出した文字が数値以外ならメッセージを表示 If IsNumeric(A) = False Then Call MsgBox("数値以外が入力されています", vbExclamation) Next これでも何とか希望通りの動きはしたのですが、あまりスマートなプログラムに思えません。 不勉強で申し訳ありませんが、関数で○文字目、ひと文字だけを検索できるもはないのでしょうか? そうすればスマートにいきそうなのですが... このプログラムをもっとスマートな形にできる方法をご存知の方がいらっしゃれば、ご教授お願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- bin-chan
- ベストアンサー率33% (1403/4213)
>関数で○文字目、ひと文字だけを検索できるもはないのでしょうか? Mid関数です。 For i = i To 5 '左からi個の数値を取り出す A = mid(target.Text, i, 1) If IsNumeric(A) = False Then Call MsgBox("数値以外が入力されています", vbExclamation) End if Next i 別解として、 if trim(format(val(target.Text)), "#")<>trim(target.Text) then Call MsgBox("数値以外が入力されています", vbExclamation) End if あたりはどうでしょう?