QA@IT

ExcelのVBAで金種計算表をIf文のみで作成したい

10156 PV

ExcelのVBAで金種計算表をIf文のみで作成したいのですが上手くいきません。
下記に金額を入力すると枚数のところにそれぞれの金種の枚数が出てくるようにしたいですが、下記のコードを書いても動作しません。お手数ですがご教示頂けると幸いです。

金種 10000 5000 2000 1000 500 100 50 10  5  1
枚数

金額 555555

金額 = Cells(7,3)
金種10000 = Cells(3,2)
金種5000 = Cells(3,3)
金種2000 = Cells(3,4)

10000円枚数 = Cells(4,2)
5000円枚数 = Cells(4,3)
2000円枚数 = Cells(4,4)

以下プログラミングしたコード

Dim 金額, 一万円札枚数, 五千円札枚数, 二千円札枚数, 千円札枚数, 五百円玉枚数, 百円玉枚数, 五十円玉枚数, 十円玉枚数, 五円玉枚数, 一円玉枚数 As Integer

金額 = Cells(7, 3)

If 金額 >= 10000 Then

一万円札枚数 = 金額 / 10000
金額 = 金額 - (一万円札枚数 * 10000)
一万円札枚数 = Cells(4, 2)

End If

If 金額 >= 5000 Then

五千円札枚数 = 金額 / 5000
金額 = 金額 - (五千円札枚数 * 5000)
五千円札枚数 = Cells(4, 3)

End If

If 金額 >= 2000 Then

二千円札枚数 = 金額 / 2000
金額 = 金額 - (二千円札枚数 * 2000)
二千円札枚数 = Cells(4, 4)

End If

If 金額 >= 1000 Then

千円札枚数 = 金額 / 1000
金額 = 金額 - (千円札枚数 * 1000)
千円札枚数 = Cells(4, 5)

End If

If 金額 >= 500 Then

五百円玉枚数 = 金額 / 500
金額 = 金額 - (五百円玉枚数 * 500)
五百円玉枚数 = Cells(4, 6)

End If

If 金額 >= 100 Then

百円玉枚数 = 金額 / 100
金額 = 金額 - (百円玉枚数 * 100)
百円玉枚数 = Cells(4, 7)

End If

If 金額 >= 50 Then

五十円玉枚数 = 金額 / 50
金額 = 金額 - (五十円玉枚数 * 50)
五十円玉枚数 = Cells(4, 8)

End If

If 金額 >= 10 Then

十円玉枚数 = 金額 / 10
金額 = 金額 - (十円玉枚数 * 10)
十円玉枚数 = Cells(4, 9)

End If

If 金額 >= 5 Then

五円玉枚数 = 金額 / 5
金額 = 金額 - (五円玉枚数 * 5)
五円玉枚数 = Cells(4, 10)

End If

If 金額 = 1 Then

一円玉枚数 = 金額 / 1
金額 = 金額 - (一円玉枚数 * 1)
一円玉枚数 = Cells(4, 11)

End If

End Sub

  • そもそも、枚数の結果を角式が逆転してますが・・・・
    一万円札枚数 = Cells(4, 2) → Cells(4, 2) = 一万円札枚数
    セルに枚数を書くんですよね!
    -

回答

指摘がある通り
~枚数 = Cells(4, x)
ではなく
Cells(4,x) = ~枚数

あと
割り算に/を使うのではなく\を使うと小数点以下が
切捨てられる。また各ifは不要となります。

編集 履歴 (0)

Dim 金額, 一万円札枚数, 五千円札枚数, 二千円札枚数, 千円札枚数, 五百円玉枚数, 百円玉枚数, 五十円玉枚数, 十円玉枚数, 五円玉枚数, 一円玉枚数 As Integer

これは、以下と同義です

Dim 金額 as Variant
Dim 一万円札枚数 as Variant
...
Dim 五円玉枚数 As Variant
Dim 一円玉枚数 As Integer

「一円玉枚数」以外の変数は全てVariant型となるので、「/」で演算した場合自然数がセットされることになります。

Dim 金額 as Integer,一万円札枚数 as Integer ... ,五円玉枚数 As Integer,一円玉枚数 As Integer
等と、変数ごとに型を宣言してください。

或は、配列を使うやり方もあります
const C_一万円札 = 1
...
const C_一円玉 = 10
dim 枚数(1 to 10) as Integer

金額 = Cells(7, 3)
枚数(C_一万円札) = 金額 \ 10000
Cells(4, C_一万円札 + 1) = 枚数(C_一万円札)
...
枚数(C_一円玉) = 金額
Cells(4, C_一円玉 + 1) = 枚数(C_一円玉)

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。