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

ExcelVBA

こんにちは、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」です。

慣れないと分かりづらいのですが、これは『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

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

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

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

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

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

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

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

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