【エクセル】vba初心者向け『入力フォーム』の作り方”コード記述編”

DIY エクセルVBA

こんにちは、Fujiya(@fujiya_xyz)です。

この記事では”デジタルDIY”ということで、エクセルの「VBAプログラミングをやってみたい人向け」に、実用的な自動化ツールの作り方を説明しています。

そして、今回は前回作業『オブジェクト作成編』の続きとなっています。

オブジェクト編で作った入力フォームですが、現状は全く作動しない状態です。

プログラムコードを記述することで、自分の思った通りの動作させます。

「プログラミング」というと文字がたくさん並んでいるイメージの人が多いと思いますが、この文字は「命令文」です。

例えば、ボタンを押したらA1のセルに「あ」と入力する。

この動作を行うようにコードを使って命令をしていきます。

今回の自動入力ツールでは『入力フォームに入力されたデータを、ボタンが押された場合に各セルに転記する』というコードを書いていきます。

是非最後までお付き合いください。

【エクセル】vba初心者向け”コード記述編”

入力フォームへの入力

  1. オブジェクト名の設定
  2. ユーザーフォームの初期化
  3. 登録ボタンを押したときの処理をしていく
  4. 連続してデータ入力する
  5. 【excel】vba初心者向け”コード記述編”|まとめ

オブジェクト名を設定

各オブジェクト(パーツ)に名前を決めていきます。

入力フォームのオブジェクトの種類は4種類使っていますが、同じ種類のものが複数あるので1つ1つ認識できるようにそれぞれに名前を決めていくわけです。

前回の”オブジェクト編“でやってもいい作業なのですが、コードとオブジェクトは関係が深いので今回の作業に組み込みました。

手順はキャプションを変更するときと同様に「オブジェクト名」を変更するだけ。(下画像)

オブジェクト名の変更

具体的には「TextBox1」となっているオブジェクト名を「氏名テキストボックス」に変更します(氏名ラベルのテキストボックスであれば)。

基本的に名前は何でもアリなのですが、後でわかりやすい名前を付けておくと作業効率がよくなります。

オブジェクト名を設定

こんな感じです。コマンドボタンも忘れずに変更しましょう。

※今回はラベルのオブジェクト名の変更は必要ありません。

変更作業が終わったら編集画面の上部にある再生ボタンみたいな「Sub/ユーザーフォームの実行」を押してみましょう。(下画面)。

プログラムの実行

エクセルシート画面にユーザーフォームが表示されるはず(下画像)。今はボタンを押しても何もできませんけどね。

ユーザーフォームのテスト

ユーザーフォームの初期化

フォームを右クリックして「コード表示」を選択します。

コード入力画面が出てきますので左のコンボボックスを「UserForm」、右のコンボボックスを「Initialize」にします。

ユーザーフォームの初期化

下のコードが表示されます(余分なコードは削除)。

Private Sub UserForm_Initialize()

End Sub

コードの間に一行スペースがあると思うのですが、ここに初期化の際のコードを入力します。

Private Sub UserForm_Initialize()
性別コンボボックス.AddItem "男"
性別コンボボックス.AddItem "女"
End Sub

なんか難しそうですが、こんな感じです。

コンボボックスをクリックした時に「男」か「女」を選べるようにしたいので「オブジェクト名.AddItem”単語”」という感じでコードを入れます。コピペでOK。

男女のコンボボックス

登録ボタンを押したときの処理をしていく

初期化の時と同様にコード入力画面の上、左のコンボボックスを「登録ボタン」、右のコンボボックスを「Click」にします。

Private Sub 登録ボタン_Click()
'入力の処理
Worksheets("Sheet1").Cells(1, 1).Value = 氏名テキストボックス.Text
Worksheets("Sheet1").Cells(1, 2).Value = ふりがなテキストボックス.Text
Worksheets("Sheet1").Cells(1, 3).Value = 性別コンボボックス.Text
Worksheets("Sheet1").Cells(1, 4).Value = 住所テキストボックス.Text
End Sub

上記のコードを記述していきます。

これは登録ボタンが押されたときに各テキストボックス・コンボボックスのテキストを”Sheet1″のシートの一番上の行に入力するというプログラムです。

氏名テキストボックスのテキストをシートの1列目1行目に入力するというコード(Worksheets(“Sheet1”).Cells(1, 1).Value = 氏名テキストボックス.Text)を見ていただくと分かるのですが、「=」の右のデータを左データに転記するというのが決まりになっています。

また『.Cells(行, 列)』という決まりになっていて、『.Cells(1, 1)』が1列目1行目という意味。

しかし、これだけだと入力されたときにテキストボックス内にそのままデータが残ってしまい、次々に入力できない・・・。

なので、登録ボタンを押した後には、テキストボックス内のデータを空欄にする必要があります。それが下記。

Private Sub 登録ボタン_Click()
'入力の処理
Worksheets("Sheet1").Cells(1, 1).Value = 氏名テキストボックス.Text
Worksheets("Sheet1").Cells(1, 2).Value = ふりがなテキストボックス.Text
Worksheets("Sheet1").Cells(1, 3).Value = 性別コンボボックス.Text
Worksheets("Sheet1").Cells(1, 4).Value = 住所テキストボックス.Text

'登録した後、テキストボックスを空欄にする処理
氏名テキストボックス.Text = ""
ふりがなテキストボックス.Text = ""
性別コンボボックス.Text = ""
住所入力テキストボックス.Text = ""
End Sub

これで入力フォームに連続しての入力が可能になりました。

それでは1度実行してみましょう。

編集画面の上部にある再生ボタンみたいな「Sub/ユーザーフォームの実行」を押し、表示されたユーザーボックスにテキトーな文字を入力します。

入力のテスト

問題なく動作するはず。エラーが起きた人はコードの間違いがないかチェックしてみましょう。

連続してデータ入力する

現状だとシートの1行目にしか入力出来ないです。続けて登録しても、先に登録した人を上書きしてしまう・・・。

なので、下の行に次々と登録していく処理のコードを加えます。

ここでは「変数」という数学的な用語を使っていきますが、あまり深く考えなくて平気です。

コードを加えたのが以下。

Private Sub 登録ボタン_Click()
'変数
最終セル = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row + 1

'入力の処理
Worksheets("Sheet1").Cells(最終セル, 1).Value = 氏名テキストボックス.Text
Worksheets("Sheet1").Cells(最終セル, 2).Value = ふりがなテキストボックス.Text
Worksheets("Sheet1").Cells(最終セル, 3).Value = 性別コンボボックス.Text
Worksheets("Sheet1").Cells(最終セル, 4).Value = 住所テキストボックス.Text

'登録した後、テキストボックスを空欄にする処理
氏名テキストボックス.Text = ""
ふりがなテキストボックス.Text = ""
性別コンボボックス.Text = ""
住所テキストボックス.Text = ""
End Sub

変数は「最終セル = Worksheets(“Sheet1”).Cells(Rows.Count, 1).End(xlUp).Row + 1」です。

慣れないと分かりづらいのですが、Worksheets(“Sheet1”).Cells(Rows.Count, 1).End(xlUp).Row + 1というのは『Sheet1というシートの一番下に行き、1列目の一番上のデータがある行の”1つ下の行“』という意味です。変数としてはこれを「最終セル」と置き換えますという感じ。

上記したように『.Cells(行, 列)』なので、行の部分に変数を入れています。

再度実行してみると連続登録が出来るはず。

連続的に登録する

自動入力ツールの完成です。

今回の作業は終了です。お疲れ様でした。

【エクセル】vba初心者向け”コード記述編”|まとめ

今回記述したコードをまとめるとこんな感じになります。

Private Sub UserForm_Initialize()
性別コンボボックス.AddItem "男"
性別コンボボックス.AddItem "女"
End Sub

Private Sub 登録ボタン_Click()
'変数
最終セル = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row + 1

'入力の処理
Worksheets("Sheet1").Cells(最終セル, 1).Value = 氏名テキストボックス.Text
Worksheets("Sheet1").Cells(最終セル, 2).Value = ふりがなテキストボックス.Text
Worksheets("Sheet1").Cells(最終セル, 3).Value = 性別コンボボックス.Text
Worksheets("Sheet1").Cells(最終セル, 4).Value = 住所テキストボックス.Text

'登録した後、テキストボックスを空欄にする処理
氏名テキストボックス.Text = ""
ふりがなテキストボックス.Text = ""
性別コンボボックス.Text = ""
住所テキストボックス.Text = ""
End Sub

コピペして使ってみたら、次は実際にコードを打ってみましょう。

コードをみると同じ文字がたくさん並んでますよね。見た目をシンプルにするために、コードを省略する方法もあります。

シンプルにした方が膨大なコードになった時にメンテナンスしやすいですが、今回は解説していません。

このツールはあくまでも超基礎であり、他にも機能がたくさん作れます。

どんな機能が作れるのかは、僕の作った名簿管理ツールを見ていただくとわかりやすいと思います。

⇒参考:【無料ダウンロード】エクセルVBAで『名簿作成』

次回は「入力フォームにデータが無い場合の警告メッセージ」と「エクセルを開いたときに自動で入力フォームを表示するコード」を紹介したいと思っています。

次回の作業「エクセル起動時に自動表示」と「msgbox」

今回の記事は以上になります。
最後までお付き合いいただき、ありがとうございました