【エクセル】入力フォームの作り方 ~ 集計・入力作業の効率をアップさせる方法 ~


Left Caption

疑問がある人

金額を入力するための入力フォームを作りたい

こんな要望にお応えします。

この記事では、ユーザーフォームのテキストボックスを使って金額を入力するための入力フォームの作り方を詳しく解説しています。

下記のような様式に金額を自動記入する入力フォームの作り方をご紹介しています。

この入力フォームを利用することによって、集計・入力作業の効率をアップさせることができます。

テキストボックスを上手に使いたい!集計・入力作業の効率をアップさせたい!と考えている方は是非参考にしてみてください。

 

広告

金額を自動記入する入力フォームとは

金額を自動記入する入力フォームとはどういうものか説明します。

 

1.数量を入力するだけで合計金額を集計するテキストボックス

下図のように、白色のテキストボックスが手入力、黄色のテキストボックスが自動入力になります。

数量を入力した結果が下図になります。

白色のテキストボックスに値を入力した時点で、黄色のテキストボックスに集計結果が表示されます。

 

Left Caption

ひらめく人

すぐに結果を確認することができるのでとても便利

 

2.ボタンを押すだけで集計結果をセルに記入

下図のように、ボタンを押すだけでテキストボックスの全ての値をシートに記入することができます。

 

数量を記入するだけで集計結果をすぐに確認することができ、その集計結果をシートに反映させることができます。金額を入力するエクセル作業が大量にある方におすすめの入力フォームになっています。

この記事では、金額を自動記入する入力フォームの作り方について詳しく解説しています。

 

入力フォームの作り方

入力フォームを作成する場合、以下の手順で作業を進めると効率的です。

 

  1. シートの様式を決める
  2. 値を入力するセルをピックアップする
  3. VBAを実行する仕組みを決める
  4. 入力フォームの様式を決める
  5. VBAを作成する

最初にVBAの作成から手がける方がいらっしゃいますが、得策ではありません。

VBAの作成途中に様式の変更が発生してしまうと、値を入力するセルの場所がズレる可能性があります。

そうなると作成中のVBAを作り直さないといけなくなるので、無駄な手間と時間がかかってしまいます。上記の手順を意識して入力フォームを作成してみてください。

 

1.シートの様式を決める

入力フォームを作成する際、一番最初にやるべきことはシートの様式を作り込むことです。どんな書類を作成するのか、シートのどのセルを編集するのかを確定しなければVBAを作成することができません。途中で様式の変更が発生しないよう、しっかりと作り込みましょう。

 

 

2.値を入力するセルをピックアップする

VBAの作成で必要になるのが、「値を記入するセルの場所」です。テキストボックスの値をどこのセルに記入するのかをピックアップしておくことで効率よく作業を進めることができます。

Cells( 1 , 1 ) = TextBox1.Value というようにVBAを作っていきます。

上記VBAは、テキストボックス1の値をA1セルに入力する!という意味です。このようなVBAを積み重ねていくことで「金額を自動記入する入力フォーム」を作ることができます。

 

Left Caption

上を目指す人

テキストボックスの数が多くなると、作成するVBAの数も多くなって大変ですが頑張りましょう。

 

3.入力フォームの様式を決める

入力フォームの様式を作成するには、ユーザーフォームでオブジェクトの編集をしていきます。

金額を自動記入する入力フォームは以下のようにオブジェクトを作成していきます。

ユーザーフォームは値を入力する際に表示されるものなのでできるだけ見やすく、扱いやすいものにしましょう。

テキストボックスやコマンドボタンの大きさを変えたり、色を変えたりすることもできます。

プロパティを操作することでいろんな編集を行うことができます。

 

Left Caption

上を目指す人

プロパティをいろいろ操作して扱いやすい入力フォームに仕上げてみてください。

 

4.VBAを実行する仕組みを決める

入力フォームの作成では、「VBAの実行方法」をしっかりと考える必要があります。

「金額を自動記入する入力フォーム」では以下の実行方法が使われてています。

 

  1. ボタンで入力フォームを起動させるVBA
  2. コマンドボタンでテキストボックスの値をセルに記入するVBA
  3. テキストボックスに値を入力すると別のテキストボックスに値を表示するVBA

実行に関するVBAだけでも3種類のVBAが使われています。入力フォームをどのように運用していくのか!どのような設定にすれば使いやすいのか!をしっかり作り込んでみてください。

 

4-1.ボタンで入力フォームを表示させるVBA

「入力フォームが常に表示されていると邪魔くさい!」という方が多いので、ボタンを押すと入力フォームが表示されるVBAを設定します。

標準モジュールに「入力フォームを表示するVBA」を作成します。

Sub 表示()
With UserForm1
    .Show vbModeless
    .Height = 450
    .Width = 600
End With
End Sub

シートにボタンを作成し、「表示VBA」を設定します。

 

 

4-2.コマンドボタンでテキストボックスの値をセルに記入する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を実行すると、標準モジュールに作成する「金額転記1」「金額転記2」というVBAを呼び出し、テキストボックスの値をセルに記入することができます。

 

4-3.テキストボックスに値を入力すると別のテキストボックスに値を表示する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万円の枚数を手入力すると合計が集計される」部分です。ほかの5千円や2千円部分の金額計算は上記サンプルVBAと同じような表記になるので省略します。

テキストボックス毎にチェンジプロパティを設定することで、「テキストボックスを操作するだけでコードを実行する」ことができます。上記のVBAのように、テキストボックス一つ一つに集計金額を表示するVBAを設定していくと入力フォームを作成することができます。

 

Left Caption

上を目指す人

記入しなければならないVBAが大量で大変ですが、頑張ってみてください。

 

よくコマンドボタンを使ってVBAを実行する入力フォームを見かけますが、ボタンをクリックする操作が増えてしまいます。これから入力フォームを作成する場合、操作が手順がなるべく少ない簡単な入力フォームになるようにしましょう。

 

 

5.標準モジュールにシートに値を記入するVBAを作成する

標準モジュールには、テキストボックスの値をシートに入力する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とほとんど同じなので省略します。

 

Left Caption

上を目指す人

テキストボックス一つ一つに値をセルに入力するVBAを設定しなければならないので結構大変な作業ですが頑張ってみてください。

 

金額を自動記入する入力フォームは仕事でよく使われるマクロ

金額を自動記入する入力フォームは仕事でよく使われるマクロです。

 

  • 契約書の作成
  • 伝票の作成
  • 両替表の作成

金額を入力する操作があるエクセルファイルに導入することができます。

下記のサイトでは、上記で紹介している「金額入力フォーム」が設定されたエクセルファイルをダウンロードして使うことができます。

このマクロを使えば、紙幣や硬貨の枚数を入力するだけで合計金額の確認、セルへの入力が可能です。

金額を入力するエクセル業務に最適のマクロになっているので是非参考にしてみてください。

 

<<金額入力フォームが設定されたエクセルのダウンロードはこちら

 

この記事では「ユーザーフォームを使って入力フォームを作成する方法」をご紹介してきましたが、ユーザーフォームを使わずに入力フォームの機能を設定することができます。

それは、「シートから別シートに情報を転記するVBAを使う」ということです。

入力フォームの代わりに、設定シートを作りあらかじめ入力項目一覧を表記しておきます。入力項目一覧表に記入した情報を様式シートに転記すれば入力フォームと同じ効果を得ることができます。

下記の記事では、「シートから別シートに情報を転記するVBA」と「転記VBAを使った契約書作成VBA」について紹介されています。

 

 

 

ユーザーフォームの設定は苦手だけど入力フォームを作成したい!と考えている方におすすめの内容です。

 

VBA初心者が効率化マクロを導入する方法

 

VBAなんて扱ったことないけどエクセル作業を自動化するマクロを導入したい!

このような問題を抱えながら日々のエクセル業務をこなしている方がおおくいらっしゃるのではないでしょうか。

 

こんな問題を解決する方法がこちら

  • マクロの開発を外注に依頼する
  • マクロが設定されたエクセルファイルをダウンロードする
  • 参考書やネットでVBAスキルを身に付ける

 

VBAの勉強を始める前は上記の方法で効率化マクロを導入していました。

 

 

 

完成されたマクロを使ってエクセル業務を処理する

作業効率が2倍以上アップ!!

便利すぎて自分でもマクロを設定したいと考え始める

参考書やネットの情報でVBAスキルを身に付ける

マクロ開発を代行できる程のスキルを習得

 

 

 

VBAは

他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい

という特徴があります。

 

毎日のルーティーン作業にうんざりしている、だれでもできる単純作業に時間を費やしている、という方はあなたに合った方法でVBAを導入しちゃいましょう。

 

マクロの開発を外注に依頼する

マクロの開発を外注に依頼する導入方法は

VBAを全く扱えない方でもエクセル作業を自動化できる最も簡単な方法

です。

 

「こんなエクセル作業を自動化したい」「作った資料を自動的にPDFで保存したい」「決まった様式に写真を自動で貼り付けたい」

こんな感じで実現したい内容を依頼するだけで業務内容に合ったマクロを開発してくれます。

 

Left Caption

ガッツポーズの人

完成まで本業に集中できるので効率的

 

 

デメリットは、費用がかかることだけ。

開発内容、依頼先によってかかる費用は大きく異なります。

私が会社員の頃利用していた業者さんは1マクロあたり2万円~3万円の費用がかかりました。

 

Left Caption

疑問がある人

ちょっと高くない。。。

 

ちなみに、マメBlogでもエクセルマクロ開発代行サービスを承っています。

開発内容の確認、VBAコードの設定、動作確認後の調整、など全ての工程を私(マメ父ちゃん)が行っているので、

費用が安い!スピード納期!!

でやらせてもらっています。

 

ほとんど独学で身に付けたVBAスキルなので、内容によっては開発できないこともあるのでご了承ください。

 

ご相談、見積もり依頼は完全無料ですので気になる方は下記のリンクよりお問合せ下さい。

 

 

マクロが設定されたエクセルファイルをダウンロードする

VBA初心者でも『マクロが設定されたエクセルファイルをダウンロード』ですぐにエクセル作業を自動化することができます。

 

たとえば、

A4用紙に写真を貼り付けてコメントを入力する作業を自動化したい!という場合、

『写真を貼り付けるマクロ』が設定されたエクセルファイルをダウンロードすれば問題解決です。

 

実際に、『写真を貼り付けるマクロ』をダウンロードして使っている様子がこちら

写真貼付けマクロの使い方を示したイラスト

 

 

Left Caption

ガッツポーズの人

写真貼付け作業の効率がめちゃくちゃアップ

 

 

『マクロが設定されたエクセルファイルをダウンロード』する導入方法は、

VBA初心者でもマクロを導入できる、費用が安い、

というメリットがあります。

 

しかし

VBAに関する情報が多く公開されているとはいえ、ネット上で想定するマクロは見つけることが難しい

というデメリットもあります。

 

Left Caption

ガッツポーズの人

お目当てのマクロが見つかればラッキー

 

個人ブログやファイルを販売できるサイト「note」や「Tips」ではいろんなマクロの情報が掲載されているので是非参考にしてみてください。

 

今までマメBlogで受注した効率化マクロを下記のnoteで掲載していますので併せてチェックしてみてください。

 

 

 

参考書やネットでVBAスキルを身に付ける

先程も紹介しましたが、

VBAは他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい

プログラミングです。

 

言い換えると、

情報量が豊富なので自分で勉強できちゃう

ということです。

 

私のVBAスキルはほとんど独学で身に付けたもので、

考えた処理のほとんどをVBAで表現できるレベルにまで到達した!

と思っています。

 

私の作ったマクロをプロのプログラマーが見れば、

お前の書くコードはインチキだ!「変数の宣言」とか「引数」を正しく使えよ!!

と感じるはずです。

 

でも、

私からすればどうでもいい!!!想定した内容を正しく処理できればよくないですか!?

 

独学であっても『写真を貼り付けるマクロ』『全てのシートをPDF出力するマクロ』『連番を振るマクロ』など、

業務内容に合ったマクロを開発できるようになれます。

 

独学でVBAスキルを身に付けるコツは、

エラーが発生してもいいからひたすらコードを書く、なんでもいいからエクセル作業をマクロ化してみる

です。

 

とは言っても、全くの知識0の方は何をすればいいかわからないですよね。

 

VBA知識0の初心者の方は、参考書『たった1秒で仕事が片づくExcel自動化の教科書【増強完全版】』を読んでみてください。

 

VBAの知識0の方でもすいすい読み進められる内容になっています。

やさしい内容にも関わらず「え!!VBAを使えばこんなことできるの!?」と感動すると思います。

 

実際に私はこの参考書を読んでからVBAの勉強を始めました。

 

Left Caption

ひらめく人

VBA学習スタートのきっかけをくれた参考書


 

 

VBAの魅力を発見した後は、

ひたすら自動化したい処理を実現するコードを書くだけ

です。

 

【VBA 写真を貼る】、【VBA PDF出力】、のようにネット検索すれば知りたいコードをすぐにゲットできます。

 

実現したい処理に向かって、「調べる→書いてみる→エラーを改善する→調べる」を繰り返していると

自然といろんなマクロが作れるようになっているはずです。

 

VBAに興味が湧いてきたという方は今からVBA学習をスタートさせちゃいましょう。