金額を自動記入する入力フォームの作り方【サンプルマクロダウンロード可能】
金額を自動記入する入力フォームの作り方を解説していきます。
紹介している入力フォームを使えば、効率的に金額をシートに記入することができるので契約書や伝票の作成にとても便利です。
記事の最後では、「金額を自動記入する入力フォーム」が設定されたエクセルファイルをダウンロードすることができます。
エクセル業務の効率をアップさせたい!という方は是非参考にしてみてください。
金額を自動記入する入力フォームとは
金額を自動記入する入力フォームとは、紙幣や硬貨の数量をテキストボックスに入力するだけで集計・セルに値を入力することができるVBAです。
このVBAを使えば、シートに金額を入力するエクセル作業の効率をアップさせることが可能です。
テキストボックスを使って入力フォームを作りたい!金額を入力するエクセル作業が多い!という方は是非この記事の内容を参考にしてみてください。
シートの様式を作り込む
VBAを作成する前に、シートに記載する様式の設定を完璧に作り込んでください。
VBAを作り始めた後に様式の変更が発生すると作成途中のVBAを1から修正しなければならなくなるので二度手間になってしまいます。
この記事では、上図のような様式に金額を自動記入する入力フォームの作成方法を解説していきます。
ユーザーフォームのオブジェクトを作成
シートの様式を作成したら、入力フォームの様式を作成していきます。
今回紹介する入力フォームは上記のような様式になっています。
紙幣や硬貨毎に数量を入力すると自動的に集計が表示される。そして「実行ボタン」を押すと表示された内容の値がシートに入力される。という入力フォームになります。
白色のテキストボックスは手入力、黄色のテキストボックスは集計結果を自動表示という設定にします。
色や文字の大きさを編集することで扱いやすい入力フォームにすることができます。
入力フォームはできるだけ扱いやすいものに仕上げましょう。
テキストボックスに設定するVBA
「テキストボックスに数量を手入力すると、隣のテキストボックスに集計結果を表示する」というVBAを設定します。
Private Sub TextBox1_Change()
On Error Resume Next
Go1 = UserForm1.TextBox1.Value * 10000
Go2 = UserForm1.TextBox2.Value * 5000
Go3 = UserForm1.TextBox3.Value * 2000
Go4 = UserForm1.TextBox4.Value * 1000
Go5 = UserForm1.TextBox5.Value * 500
Go6 = UserForm1.TextBox6.Value * 100
Go7 = UserForm1.TextBox7.Value * 50
Go8 = UserForm1.TextBox8.Value * 10
Go9 = UserForm1.TextBox9.Value * 5
Go10 = UserForm1.TextBox10.Value * 1
Go11 = UserForm1.TextBox11.Value * 500
Go55 = Val(UserForm1.TextBox1.Value) + Val(UserForm1.TextBox2.Value) + Val(UserForm1.TextBox3.Value) + Val(UserForm1.TextBox4.Value) + Val(UserForm1.TextBox5.Value) + Val(UserForm1.TextBox6.Value) + Val(UserForm1.TextBox7.Value) + Val(UserForm1.TextBox8.Value) + Val(UserForm1.TextBox9.Value) + Val(UserForm1.TextBox10.Value) + Val(UserForm1.TextBox11.Value) + Val(UserForm1.TextBox12.Value) + Val(UserForm1.TextBox13.Value)
Go53 = Go1 + Go2 + Go3 + Go4 + Go5 + Go6 + Go7 + Go8 + Go9 + Go10 + Go11 + UserForm1.TextBox25.Value + UserForm1.TextBox26.Value
If UserForm1.TextBox1.Value <> "" Then
UserForm1.TextBox14 = Format(Go1, "#,##0")
UserForm1.TextBox55 = Format(Go55, "#,##0")
UserForm1.TextBox53 = Format(Go53, "#,##0")
End If
On Error GoTo 0
End Sub
上記VBAは、「両替前の1万円の数量を手入力すると、合計が集計される」部分です。
ほかの紙幣や硬貨のテキストボックスにも上記のようなVBAを設定する必要がありますが、コードが大量なので省略します。
コマンドボタンに設定するVBA
コマンドボタンには、「シートに表示されている値を計消してリセットするいVBA」と「テキストボックスに表示された値をシートに記入するVBA」を設定します。
Private Sub CommandButton1_Click()
'セルに入力されている値をリセット
Range(Cells(27, 12), Cells(41, 35)).ClearContents
'標準モジュールに設定した「セルに金額を記入するVBA」を呼び出す
Call 金額転記1
Call 金額転記2
'今日の日付を入力するToday関数を設定
Cells(3, 11).Formula = "=Today()"
'入力フォームを閉じる
Unload Me
End Sub
上記VBAは、Callを使って「テキストボックスに表示された値をシートに値を記入するVBA」を呼び出して実行しています。Callで呼び出すVBAは標準モジュールに記入します。
VBAを分けることにより、「編集がしやすい」「見やすくキレイなVBAになる」メリットがあります。
複雑なVBAを作成する場合、分けて作成したVBAをCallで呼び出しす技術はかなり使えるので自由に扱えるようにしておきましょう。
標準モジュールに設定するVBA
標準モジュールには、「テキストボックスに表示された値をシートに記入するVBA」を設定します。
Sub 金額転記1()
'テキストボックスの集計をセルに入力(両替前)
Dim Go1 As Long
Dim Go2 As Long
Dim Go3 As Long
Dim Go4 As Long
Dim Go5 As Long
Dim Go6 As Long
Dim Go7 As Long
Dim Go8 As Long
Dim Go9 As Long
Dim Go10 As Long
Dim Go11 As Long
Dim Go25 As Long
Dim Go26 As Long
Dim Go53 As Long
Dim i As String
Go1 = UserForm1.TextBox1.Value * 10000
i = Len(UserForm1.TextBox1.Value * 10000)
For j = 1 To 9
If UserForm1.TextBox1.Value = "0" Then
GoTo Label1
ElseIf IsNumeric(Go1) And (i - j >= 0) Then
Cells(27, 24 - j) = Mid(Go1, (i + 1) - j, 1)
End If
Next
Label1:
Go2 = UserForm1.TextBox2.Value * 5000
i = Len(UserForm1.TextBox2.Value * 5000)
For j = 1 To 9
If UserForm1.TextBox2.Value = "0" Then
GoTo Label2
ElseIf IsNumeric(Go2) And (i - j >= 0) Then
Cells(28, 24 - j) = Mid(Go2, (i + 1) - j, 1)
End If
Next
Label2:
Go3 = UserForm1.TextBox3.Value * 2000
i = Len(UserForm1.TextBox3.Value * 2000)
For j = 1 To 9
If UserForm1.TextBox3.Value = "0" Then
GoTo Label3
ElseIf IsNumeric(Go3) And (i - j >= 0) Then
Cells(29, 24 - j) = Mid(Go3, (i + 1) - j, 1)
End If
Next
Label3:
Go4 = UserForm1.TextBox4.Value * 1000
i = Len(UserForm1.TextBox4.Value * 1000)
For j = 1 To 9
If UserForm1.TextBox4.Value = "0" Then
GoTo Label4
ElseIf IsNumeric(Go4) And (i - j >= 0) Then
Cells(30, 24 - j) = Mid(Go4, (i + 1) - j, 1)
End If
Next
Label4:
Go5 = UserForm1.TextBox5.Value * 500
i = Len(UserForm1.TextBox5.Value * 500)
For j = 1 To 9
If UserForm1.TextBox5.Value = "0" Then
GoTo Label5
ElseIf IsNumeric(Go5) And (i - j >= 0) Then
Cells(31, 24 - j) = Mid(Go5, (i + 1) - j, 1)
End If
Next
Label5:
Go6 = UserForm1.TextBox6.Value * 100
i = Len(UserForm1.TextBox6.Value * 100)
For j = 1 To 9
If UserForm1.TextBox6.Value = "0" Then
GoTo Label6
ElseIf IsNumeric(Go6) And (i - j >= 0) Then
Cells(32, 24 - j) = Mid(Go6, (i + 1) - j, 1)
End If
Next
Label6:
Go7 = UserForm1.TextBox7.Value * 50
i = Len(UserForm1.TextBox7.Value * 50)
For j = 1 To 9
If UserForm1.TextBox7.Value = "0" Then
GoTo Label7
ElseIf IsNumeric(Go7) And (i - j >= 0) Then
Cells(33, 24 - j) = Mid(Go7, (i + 1) - j, 1)
End If
Next
Label7:
Go8 = UserForm1.TextBox8.Value * 10
i = Len(UserForm1.TextBox8.Value * 10)
For j = 1 To 9
If UserForm1.TextBox8.Value = "0" Then
GoTo Label8
ElseIf IsNumeric(Go8) And (i - j >= 0) Then
Cells(34, 24 - j) = Mid(Go8, (i + 1) - j, 1)
End If
Next
Label8:
Go9 = UserForm1.TextBox9.Value * 5
i = Len(UserForm1.TextBox9.Value * 5)
For j = 1 To 9
If UserForm1.TextBox9.Value = "0" Then
GoTo Label9
ElseIf IsNumeric(Go9) And (i - j >= 0) Then
Cells(35, 24 - j) = Mid(Go9, (i + 1) - j, 1)
End If
Next
Label9:
Go10 = UserForm1.TextBox10.Value * 1
i = Len(UserForm1.TextBox10.Value * 1)
For j = 1 To 9
If UserForm1.TextBox10.Value = "0" Then
GoTo Label10
ElseIf IsNumeric(Go10) And (i - j >= 0) Then
Cells(36, 24 - j) = Mid(Go10, (i + 1) - j, 1)
End If
Next
Label10:
Go11 = UserForm1.TextBox11.Value * 500
i = Len(UserForm1.TextBox11.Value * 500)
For j = 1 To 9
If UserForm1.TextBox11.Value = "0" Then
GoTo Label11
ElseIf IsNumeric(Go11) And (i - j >= 0) Then
Cells(37, 24 - j) = Mid(Go11, (i + 1) - j, 1)
End If
Next
Label11:
Go25 = UserForm1.TextBox25.Value * 1
i = Len(UserForm1.TextBox25.Value * 1)
For j = 1 To 9
If UserForm1.TextBox25.Value = "0" Then
GoTo Label25
ElseIf IsNumeric(Go25) And (i - j >= 0) Then
Cells(38, 24 - j) = Mid(Go25, (i + 1) - j, 1)
End If
Next
Label25:
Go26 = UserForm1.TextBox26.Value * 1
i = Len(UserForm1.TextBox26.Value * 1)
For j = 1 To 9
If UserForm1.TextBox26.Value = "0" Then
GoTo Label26
ElseIf IsNumeric(Go26) And (i - j >= 0) Then
Cells(39, 24 - j) = Mid(Go26, (i + 1) - j, 1)
End If
Next
Label26:
Go53 = UserForm1.TextBox53.Value * 1
i = Len(UserForm1.TextBox53.Value * 1)
For j = 1 To 9
If UserForm1.TextBox53.Value = "0" Then
GoTo Label53
ElseIf IsNumeric(Go53) And (i - j >= 0) Then
Cells(41, 24 - j) = Mid(Go53, (i + 1) - j, 1)
End If
Next
Label53:
For j = 1 To 13
If UserForm1.Controls("TextBox" & j).Value = "0" Then
GoTo Label60
Else
Cells(26 + j, 12) = UserForm1.Controls("TextBox" & j).Value
Cells(41, 12) = UserForm1.TextBox55.Value
End If
Label60:
Next
End Sub
上記VBAは「両替前の全てのテキストボックスの値をシートに記入する」という内容です。
「両替後の全てのテキストボックスの値をシートに記入するVBA」は上記VBAのテキストボックス番号とセルの場所を変更するだけなので省略します。
金額を自動記入する入力フォームのダウンロード
金額を自動記入する入力フォームの設定方法を解説してきましたが、コード量が多く全てをご紹介することができていません。
この記事で紹介されている「金額を自動記入する入力フォーム」を使ってみたい!という方は下記でエクセルファイルをダウンロードすることができます。
契約書や伝票作成業務が多い!という方は是非利用してみてください。
この記事が気に入ったらサポートをしてみませんか?