- ベストアンサー
VBA テキストボックスで計算
VBAの勉強を始めたばかりで、見よう見まねで色々作っています。 ユーザーフォームのテキストボックスに、計算結果を表示したいのですが、行き詰まってしまいました。 textbox1 textbox2 . . textbox5 があり、textbox6に、1~5に入力された数字を足して、消費税額が出るようにしたいです。 例えば textbox1・・・100,000 textbox2・・・200,000 と入っていたら textbox6に 【消費税額 15,000円】 と表示させたいです。 textbox1~5は、1から順番に数字を入れていきますが、全てに入るとは限りません。 不足情報等がありましたら、ご指摘下さい。 ご教授の程、よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>a = a + CLng(Me.Controls("TextBox" & i).Value) >こちらにしたところ、 >実行時エラー'13' 型が一致しません すみません、空白のTexBoxがある事を見落としていました。 ,を空白に置換えてみました。 Dim i As Long, a As Long For i = 1 To 5 a = a + Val(Replace(Me.Controls("TextBox" & i).Value, ",", "")) Next Me.TextBox6.Text = "消費税額 " & Format(a * 0.05, "#,##0円")
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 一応、Double 型で扱いますが、空白があると、CLngやCDble は、数値が入っていることを前提とするので、「""(長さ0の文字列)」は、エラーを発生します。Val関数は、「,(カンマ)」までの数字を拾います。だから、事前に、IsNumeric で区分けしなければなりません。 '------------------------------------------- Private Sub CommandButton1_Click() Dim i As Long Dim bSum As Double bSum = 0 For i = 1 To 5 If IsNumeric(Me.Controls("TextBox" & i)) Then bSum = bSum + CDbl(Me.Controls("TextBox" & i)) End If Next i TextBox6.Value = Int(bSum * 0.05) '切り捨ての場合 'TextBox6.Value = Int(bSum * 0.05 + 0.5) '切り上げの場合 End Sub
お礼
おお~! できました! ありがとうございます。 大変勉強になりました。
- watabe007
- ベストアンサー率62% (476/760)
No.2です >例えば >textbox1・・・100,000 >textbox2・・・200,000 入力に , が入るのですね なら >a = a + Val(Me.Controls("TextBox" & i).Value) ↓ a = a + CLng(Me.Controls("TextBox" & i).Value) に変更してください。
お礼
度々、ありがとうございます。 a = a + Val(Me.Controls("TextBox" & i).Value) この式だと、200,000円のときは「10円」となってしまうんですね。 で、 a = a + CLng(Me.Controls("TextBox" & i).Value) こちらにしたところ、 実行時エラー'13' 型が一致しません と出てしまいました・・・。
- watabe007
- ベストアンサー率62% (476/760)
参考に Dim i As Long, a As Long For i = 1 To 5 a = a + Val(Me.Controls("TextBox" & i).Value) Next Me.TextBox6.Text = "消費税額 " & Format(a * 0.05, "#,##0円")
お礼
早速のご回答、ありがとうございます!
例えば入力チェックの方法としては Dim nResultValue as Long nResultValue = 0 if Trim$(Textbox1.text) = vbNullString Then Call MsgBox("入力されていない") Elseif IsNumeric(Textbox1.text) = False Then Call MsgBox("数字ではない") Else nResultValue = nResultValue + CLng(Textbox1.text) End if というのをTextbox1~5まで繰り返して 最後に Textbox6.text = Cstr(nResultValue * 0.05) とすれば問題ないかと
お礼
早速のご回答、ありがとうございます! 知らない単語がいっぱい・・・^^; 一つずつ、検証していきます。
お礼
何度もありがとうございます! こちらの式でもできました! とても勉強になりました。 感謝です。