- ベストアンサー
VBAで入力数値について
Excel VBAでTextBoxに入力された数値が整数か小数か判定し、 小数の場合は、下記のようにしたいのですが、どのようにしたらよいのでしょうか。 TextBoxに入力された数値が、 (1)整数の場合・・・A=TextBox1.Value (2)小数点第一位の場合(1.5など)・・・A=TextBox1.Value*10 (3)小数点第二位の場合(1.55など)・・・A=TextBox1.Value*100 どなたかご教授願います。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
前提として、数値違いの文字や、"."が2個以上記入された場合等は事前にチェックしているものとします。 整数か少数かは、InStrで"."があるかどうかで判断できます。 また、InStrの結果から小数点以降の桁数を算出することができます。 あとは 入力値*(10^桁数) としてあげればよいでしょう。 Dim text As String text = "12.345" Dim value As Integer Dim dec As Integer '小数点の位置 Dim declen As Integer '小数点の桁数 dec = InStr(text, ".") ' 小数点がなければ整数 If dec = 0 Then value = CInt(text) ' 小数点がある Else declen = Len(text) - dec '小数部分の桁数を算出 value = CInt(Val(text) * (10 ^ declen)) End If MsgBox (value) もうひとつ、少々乱暴な方法ですがReplaceで"."を取り外してしまうとか Dim text As String text = "12.345" Dim value As Integer value = CInt(Replace(text, ".", "")) MsgBox (value)
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
ユーザーフォームにコマンドぼたんとテキストボックスをはりつけ。 コマンドボタンのクリックイベントに Private Sub CommandButton1_Click() a = TextBox1.Text MsgBox a If IsNumeric(a) Then Else MsgBox "数字で在りません" Exit Sub End If p = InStr(a, ".") If p = 0 Then Cells(1, "A") = Val(a) Else Cells(1, "A") = Val(a) * 10 ^ (Len(a) - p) End If End Sub セル A1に値を設定。
- nda23
- ベストアンサー率54% (777/1415)
数値かどうかの判断:IsNumeric 数値化:Val(倍制度実数への変換)、CDec(10進数への変換) 文字列化:CStr 文字位置の検索:InStr (1)数値かどうかを判断する。非数値ならエラー (2)数値化してから文字列化する。 (3)"."(ピリオド)の位置を検索する。 (4)ピリオドが存在した場合、文字列長-検索位置→Xとする。 (数値 * 10 ^ X)を文字列化する。 (5)文字列をテキストボックスのValueとする。 ※倍制度実数の10進換算精度は15桁、10進数は29桁
- wolf03
- ベストアンサー率22% (241/1086)
・小数点が入力された文字列にあるか判定 ・有った場合、其れよりも右に何文字有るか確認 ・数値として文字数分だけ10の何乗かを掛ける