VBAを使った硬貨の最小枚数を求めるプログラムで発生するエラーについて解説します。特に変数jが期待通りに増加しない問題に焦点を当て、その原因と解決方法をステップバイステップで説明します。
1. プログラムの問題点
質問者が提示したコードでは、変数jが1以降増加していないという問題が発生しています。これにより、ループ内で期待する動作が実行されず、正しい結果が得られません。
エラーが発生する原因として、ループ内で変数jが正しく増加しないことが挙げられます。実際の原因は、FM関数内で返される値が期待した値ではない可能性があります。
2. 解決方法:変数の確認と修正
まずは、変数の値を適切に確認することが重要です。具体的には、変数jが0から99まで増加するようにし、FM関数の動作をチェックしてみてください。
また、変数siharaiの計算式や、FM関数の引数として渡す値を再度確認しましょう。siarariの値が適切に更新されていないと、プログラムが期待通りに動作しません。
3. コード修正例
以下は修正されたコードの一例です。
Sub saisyou()
Dim kakaku As Integer
Dim maisu As Integer
Dim j As Integer
Dim min_maisu As Integer
Dim siharai As Integer
Dim tsuri As Integer
min_maisu = 100
kakaku = InputBox("金額を入力してください")
For j = 0 To 99
MsgBox j
tsuri = FM(j)
siharai = kakaku + j
maisu = FM(siharai) + tsuri
If maisu < min_maisu Then
min_maisu = maisu
End If
Next j
MsgBox min_maisu & "枚"
End Sub
4. 追加のデバッグポイント
プログラムが期待通りに動作しない場合、次の点も確認してみてください。
- 変数の初期値が正しいか
- FM関数が正しい値を返すか
- 計算におけるデータ型の問題(例えば、整数型と浮動小数点型の違い)
これらをチェックすることで、プログラムの動作を改善することができます。
まとめ
VBAでのエラー解決には、まず問題が発生している箇所を特定し、変数や関数の動作を確認することが重要です。今回の問題では、変数jが増加しない原因を特定し、FM関数の処理を見直すことで解決できます。この方法を使って、正確な最小枚数を求めるプログラムが完成するでしょう。


コメント