

コントロール配列にしたテキストボックスに数値を入力し、その数値に金種(10000円、5000円、1000円・・・)を乗算します。
そこで得られた結果を足して、ラベルに表示させたいと思っています。
現在、テキストボックスに数値を入れると
・小さい数値ならば、うまく加算できる
・大きい数値ならば、オーバーフローする
・何も記述しない(空白)とエラーがデータ型が違うという、エラーがでる
といった状態です。何がおかしいのか頭を悩ませていますので、アドバイスをお願いします。
***********************************************
For i = 0 To 8
Maisuu(i) = Val(txtKinsyu(i).Text)
Next i
lngGoukei = Maisuu(0) * 10000 + Maisuu(1) * 5000 + Maisuu(2) * 1000 _
+ Maisuu(3) * 500 + Maisuu(4) * 100 + Maisuu(5) * 50 _
+ Maisuu(6) * 10 + Maisuu(7) * 5 + Maisuu(8) * 1
lblGoukei.Caption = lngGoukei
***********************************************
No.3ベストアンサー
- 回答日時:
この場合 Dim文で変数をLong(16桁数値)に宣言します。
それとテキストボックスが空白かどうかの判断をします。
IF文を追加しました。しかしまだ問題があります。
テキストに数字以外が入力された時はエラーになりそうですが...ここまででテストしてみて下さい。
Dim Maisuu(8) ,IngGoukei as Long
For i = 0 To 8
'テキストボックスが空白でない場合
If Len(txtKinsyu(i).Text)>0 then
Maisuu(i) = Val(txtKinsyu(i).Text)
Else
Maisuu(i)=0
End If
Next i
lngGoukei = Maisuu(0) * 10000 + Maisuu(1) * 5000 + Maisuu(2) * 1000 _
+ Maisuu(3) * 500 + Maisuu(4) * 100 + Maisuu(5) * 50 _
+ Maisuu(6) * 10 + Maisuu(7) * 5 + Maisuu(8) * 1
lblGoukei.Caption = lngGoukei
No.4
- 回答日時:
これでいかがでしょうか? No.3 の laputart さんとほとんど同じです。
Dim i as Long, Maisuu(8) as Currency
For i = 0 To 8
If IsNumeric(txtKinsyu(i).Text) Then
Maisuu(i) = CCur(txtKinsyu(i).Text)
Else
Maisuu(i) = 0
End If
Next
lblGoukei.Caption = CStr(Maisuu(0) * 10000 + Maisuu(1) * 5000 + ... + Maisuu(8) * 1)
最後の部分は省略させていただきました。
chieri23 さんが書かれていたものと同じコードです。
・オーバーフローは、Currency 型で宣言することで、とりあえず回避しています。もっと大きな金額の場合は、工夫がいります。
・データ型が違うというのは、空欄は数字ではないので、Val 関数で数値変換できないためのエラーです。IsNumeric 関数で回避しています。
ありがとうございます。
ちなみに私は数値以外の入力を避けるため、Keypressで次のように制限をかけました。
***********************************
If str >= "0" And str <= "9" Then
'数字の場合は何もしない
ElseIf str = Chr(8) then
'[BackSpace]がおされたときも何もしない
Else
KeyAscii = 0
'文字を無効にする
************************************
No.2
- 回答日時:
課題か何かですか?
lngGoukeiは変数名からLong型と判断しましたが、Maisuu(i)は何型の配列
なのでしょうか?どっちにしろ lngGoukeiを振り切る値(Helpにてご自分で
上限を調べて下さい)が入った場合はオーバーフローします。
ちなみに3つ目の問題は空白かどうかチェックすればいいのでは?
そうですね・・・
課題ってほどでもないのですが。
問題はlong型で解決しました。
空白の問題はゴチャゴチャソースを直している間に何事もないように解決してしまったのです。
解決後のソースを参考までに載せておきます。
でも、何で解決したんでしょう・・・
これじゃあ勉強にならないですよね。
***********************************
'入力処理
For i = 0 To 8
lngMaisuu(i) = Val(txtKinsyu(i).Text)
Next i
lngGoukei = lngMaisuu(0) * 10000 + lngMaisuu(1) * 5000 + lngMaisuu(2) * 1000 _
+ lngMaisuu(3) * 500 + lngMaisuu(4) * 100 + lngMaisuu(5) * 50 _
+ lngMaisuu(6) * 10 + lngMaisuu(7) * 5 + lngMaisuu(8) * 1
'後始末処理
lblGoukei.Caption = lngGoukei
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行時エラー 438になった時の...
-
【マクロ】エラー【#DIV/0!】が...
-
VBAがブレークモードになっ...
-
ADODB.Streamを使用してUTF-8を...
-
EXCEL VBAマクロ中断でデバッグ...
-
カーソルオープンでエラー(ORA...
-
なぜエラーになるのでしょうか...
-
AccessVBAでExcelを起動し、罫...
-
エクセルでURLに特定文字が含ま...
-
Debug.exe実行時にWinMainCRTSt...
-
VBからAccessへの接続でエラー
-
Invalid procedure call or arg...
-
ACCESSのエラーで困っています
-
エクセルエラー13型が一致しま...
-
エクセルVBA、フリーフォームで...
-
psapi.dllのGetModuleBaseName...
-
トランスポートレベルのエラー
-
Excelの条件式について
-
【VBA】ボタンに登録したマクロ...
-
VB2010 CreateMailslot失敗
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
VBAがブレークモードになっ...
-
【マクロ】エラー【#DIV/0!】が...
-
実行時エラー -'-2147417848
-
実行時エラー3001「引数が間違...
-
実行時エラー48発生時のDLL特定...
-
【Excel VBA】マクロをボタンに...
-
マクロについて教えてください...
-
なぜこんな初歩的なVBAのIf文で...
-
VB6+SQL サーバー 2000 で 実行...
-
OLEDB.NETで接続できない
-
EXCEL/VBAで、自分のPCだけエラ...
-
ExcelVBA Range クラスの Page...
-
Invalid procedure call or arg...
-
VBAでのエラー
-
AccessVBAでExcelを起動し、罫...
-
[Delphi] データセットは閉じて...
-
VBAで実行時エラー'424' オブジ...
-
なぜエラーになるのでしょうか...
-
ADODB.Streamを使用してUTF-8を...
おすすめ情報