難易度:★☆☆(かんたん)
※当校のExcel VBAコースを補足する内容となっています。
【Sample6】金種計算表を作る を少し変更して、お釣りを計算するプログラムを作りましょう。
金種計算プログラムのおさらい
セル「A1」に金額を入力して実行すると、最小単位の紙幣・硬貨がそれぞれ何枚必要かを計算して表示します。ただし、金種は10,000円・5,000円・1,000円・500円・100円・50円・10円・5円・1円の9種類とし、2,000円札は計算に入れないこととします。
配列とmod演算子を使えば、短くてシンプルなコードで書けるんだったね
ソースコードを確認しておきましょう。
Sub 金種計算()
Dim i, j As Long
Dim w_Kinsyu() As Variant
Dim w_Amari As Long
w_Kinsyu = Array(10000, 5000, 1000, 500, 100, 50, 10, 5, 1)
Range("A4:D12") = ""
w_Amari = Cells(1, 1)
j = 4
For i = 0 To 8
If Int(w_Amari / w_Kinsyu(i)) <> 0 Then
Cells(j, 1) = w_Kinsyu(i)
Cells(j, 2) = "円"
Cells(j, 3) = Int(w_Amari / w_Kinsyu(i))
Cells(j, 4) = "枚"
w_Amari = w_Amari Mod w_Kinsyu(i)
j = j + 1
End If
Next i
End Sub
お釣りを計算する仕組みを考えてみよう
金種計算プログラムを、次のように変更します。
- 投入金額をセル「B1」に入力します。
- プログラムを実行すると、4行目を先頭にお釣りが表示されます。
- ジュースはどれも130円(定数として定義)とします。
- 投入金額が130円より少ない場合は、「お金が足りません」というメッセージボックスを表示します。
- この自販機は、5,000円、10,000円も使えます。2,000円札は使えません。
- マクロ名を「お釣り計算」に変更します。
実行時のイメージ
Sub お釣り計算()
Dim i, j As Long
Dim w_Kinsyu() As Variant
Dim w_Amari As Long
Const w_Tanka = 130
w_Kinsyu = Array(10000, 5000, 1000, 500, 100, 50, 10, 5, 1)
Range("A4:D12") = ""
If Cells(1, 2) < w_Tanka Then
MsgBox "お金が足りません"
Exit Sub
End If
w_Amari = Cells(1, 2) - w_Tanka
j = 4
For i = 0 To 8
If Int(w_Amari / w_Kinsyu(i)) <> 0 Then
Cells(j, 1) = w_Kinsyu(i)
Cells(j, 2) = "円"
Cells(j, 3) = Int(w_Amari / w_Kinsyu(i))
Cells(j, 4) = "枚"
w_Amari = w_Amari Mod w_Kinsyu(i)
j = j + 1
End If
Next i
End Sub
再計算しやすいようにしてみよう
VBAのプログラムを実行するとき、今までは「Alt」キーを押しながら「F8」キーを押して、マクロ選択のウィンドウから動かしたいプログラムを選んで「実行」してきました。
挿入した画像をクリックすることによって、プログラムが動くようにしてみましょう。
「実行ボタン」を作ってクリックでプログラムが動く方法は、「ボタンからプログラムを動かす」にあります。
挿入した画像からマクロを実行
- まずは上の画像を右クリックして、「名前を付けて画像を保存」しておきましょう。保存しておくフォルダは特に決まりはありませんが、どこに保存したか覚えておくようにしましょう。一般的にはピクチャフォルダです。
- Excelシートに画像を挿入します。大きさや位置は自由に決めてください。
- 画像を右クリックし、「マクロの登録」をクリックします。
- 「マクロの登録」の画面が表示されるので、マクロ名「お釣り計算」をクリック、さらに「OK」をクリックします。
- 画像をクリックすると、プログラムが動作するようになりました。セル「B1」の数字を書き換えながら、確かめてみましょう。
マクロの登録をした後で画像の大きさや位置を変更したい場合は、画像を右クリックしてハンドル(周りの白い丸印)を表示させてから行います。