難易度:★☆☆(かんたん)
※当校のExcel VBAコースを補足する内容となっています。
Excel VBAでは、セル操作に「配列」をよく利用します。効率のよいプログラムを作るためには、この配列操作は欠かせません。まず、金種計算表で使い方を練習しましょう。
Excelにおいて、複数セルの集まりを配列であると説明している場合があります。また、複数セルを対象に1つの数式を作成する配列数式という数式もあります。
今回は、プログラミングにおける配列を取り扱います。
金種計算プログラム
セル「A1」に金額を入力して実行すると、最小単位の紙幣・硬貨がそれぞれ何枚必要かを計算して表示します。ただし、金種は10,000円・5,000円・1,000円・500円・100円・50円・10円・5円・1円の9種類とし、2,000円札は計算に入れないこととします。
金額を大きいお札で除算して、必要な枚数を求めて、残りの金額を計算して…
除算の余りを求めることのできる、「mod演算子」を使うよ
配列を使わずに求める
紙幣・硬貨が何枚必要か、それぞれ変数を準備して求めます。
Sub 金種計算_before()
Dim i, w_Amari As Long
Dim w_10000 As Long
Dim w_5000 As Long
Dim w_1000 As Long
Dim w_500 As Long
Dim w_100 As Long
Dim w_50 As Long
Dim w_10 As Long
Dim w_5 As Long
Dim w_1 As Long
Range("A4:D12") = ""
i = 4
w_Amari = Cells(1, 1)
w_10000 = Int(w_Amari / 10000)
If w_10000 <> 0 Then
Cells(i, 1) = 10000
Cells(i, 2) = "枚"
Cells(i, 3) = w_10000
Cells(i, 4) = "円"
w_Amari = w_Amari Mod 10000
i = i + 1
End If
w_5000 = Int(w_Amari / 5000)
If w_5000 <> 0 Then
Cells(i, 1) = 5000
Cells(i, 2) = "枚"
Cells(i, 3) = w_5000
Cells(i, 4) = "円"
w_Amari = w_Amari Mod 5000
i = i + 1
End If
w_1000 = Int(w_Amari / 1000)
If w_1000 <> 0 Then
Cells(i, 1) = 1000
Cells(i, 2) = "枚"
Cells(i, 3) = w_1000
Cells(i, 4) = "円"
w_Amari = w_Amari Mod 1000
i = i + 1
End If
w_500 = Int(w_Amari / 500)
If w_500 <> 0 Then
Cells(i, 1) = 500
Cells(i, 2) = "枚"
Cells(i, 3) = w_500
Cells(i, 4) = "円"
w_Amari = w_Amari Mod 500
i = i + 1
End If
w_100 = Int(w_Amari / 100)
If w_100 <> 0 Then
Cells(i, 1) = 100
Cells(i, 2) = "枚"
Cells(i, 3) = w_100
Cells(i, 4) = "円"
w_Amari = w_Amari Mod 100
i = i + 1
End If
w_50 = Int(w_Amari / 50)
If w_50 <> 0 Then
Cells(i, 1) = 50
Cells(i, 2) = "枚"
Cells(i, 3) = w_50
Cells(i, 4) = "円"
w_Amari = w_Amari Mod 50
i = i + 1
End If
w_10 = Int(w_Amari / 10)
If w_10 <> 0 Then
Cells(i, 1) = 10
Cells(i, 2) = "枚"
Cells(i, 3) = w_10
Cells(i, 4) = "円"
w_Amari = w_Amari Mod 10
i = i + 1
End If
w_5 = Int(w_Amari / 5)
If w_5 <> 0 Then
Cells(i, 1) = 5
Cells(i, 2) = "枚"
Cells(i, 3) = w_5
Cells(i, 4) = "円"
i = i + 1
End If
w_1 = w_Amari Mod 5
If w_1 <> 0 Then
Cells(i, 1) = 1
Cells(i, 2) = "枚"
Cells(i, 3) = w_1
Cells(i, 4) = "円"
i = i + 1
End If
End Sub
同じようなif文ばかりで分かりにくいし長い…
配列と繰り返し文を組み合わせることで、簡潔に書けるようになりますよ。
配列を使って求める
金種のデータを配列に格納しましょう。
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
すごく短くなった!
コードが短くなるということは可読性も向上します。また、処理の追加や修正など、手直しのにかける手間を大きく減らすことが出来るので、こういったスキルを身につけるのは大事なことなんです。