機械系エンジニアの備忘録

20代独身社会人。仕事では機械・機構の研究開発を行っているエンジニアが、自分の専門分野ではないpythonを扱って楽しむブログです。

MENU

【Excel-VBA#7】ユーザーフォームに記入された内容をExcelに保存する

ユーザーフォームを使ってExcelとリストにデータを追加する

f:id:stjun:20201115174845p:plain
ユーザーフォームを使ってExcelにデータを追加することができます。

 

1. はじめに

前々回#5、前回#6とユーザーフォームの作り方や使い方を紹介しました。

www.stjun.com

www.stjun.com

今回はその続きとして、ユーザーフォームを使ってExcelにデータを入力します。具体的にはユーザーフォームに入力フォームを新たに作成し、ユーザーが登録ボタンを押したら入力内容がExcelに保存されるプログラムを作ります。 

 

2. 説明

 今回は前回#6の続きになります。

既に以下の画像までは完成しているとして進めます。

まだの方は前回記事をご覧ください。

www.stjun.com

f:id:stjun:20201025233242p:plain

 

2.1 ユーザーフォームを改造する

以下のようなユーザーフォームを改造してください。

「名前」や「住所」のラベルは任意で配置してください。

プロパティの設定の仕方は以下の過去記事を参考にしてください。

www.stjun.com

f:id:stjun:20201115172410p:plain

⓪ユーザーフォーム

Height:400

Width:430


①名前のテキストボックス

オブジェクト名:txtName

Height:18

Left:60

Top:198

Width:108

 

②住所のテキストボックス

オブジェクト名:txtAddress

Height:18

Left:60

Top:226

Width:216

 

③電話番号のテキストボックス

オブジェクト名:txtTell

Height:18

IMEMode:3 - fmIMEModeDisable(数字しか入力できなくなる)

Left:60

Top:255

Width:150

 

④その他のテキストボックス

オブジェクト名:txtEtc

Height:42

Left:60

Top:288

Width:216

 

⑤登録ボタン

オブジェクト名:btnEntry

Caption:登録

Height:18

Left:318

Top:340

Width:78

 

2.2 コードを書く

次にコードを書いていきます。

f:id:stjun:20201115173155p:plain

赤枠のリストから、

左上のリストボックス:btnEntry

右上のリストボックス:Click

を選択してください。

意味としては、「登録ボタン(btnEntry)をクリック(Click)した時にプログラムを実行する」という意味になります。

次に以下のようにコードを追加します。

Private Sub btnEntry_Click()

If txtName.Text = "" Then
    MsgBox "名前を入力してください", vbInformation, "確認"
    Exit Sub
ElseIf txtAddress.Text = "" Then
    MsgBox "住所を入力してください", vbInformation, "確認"
    Exit Sub
End If

'入力フォームの内容をExcekに記載する
Dim Row As Integer
Row = Range("A1048576").End(xlUp).Offset(1).Row
Range("A" & Row).Value = txtName.Text
Range("B" & Row).Value = txtAddress.Text
Range("C" & Row).Value = txtTell.Text
Range("D" & Row).Value = txtEtc

'ユーザーフォームのリストに追加する
With List
    .AddItem
    .List(.ListCount - 1, 0) = txtName.Text
    .List(.ListCount - 1, 1) = txtAddress.Text
    .List(.ListCount - 1, 2) = txtTell.Text
    .List(.ListCount - 1, 3) = txtEtc.Text
End With

'入力フォームのクリア
txtName.Text = ""
txtAddress.Text = ""
txtTell = ""
txtEtc = ""

End Sub

 

以上を実行すると次のように入力フォームが現れます。入力フォームに適当に記入します。

f:id:stjun:20201115180613p:plain

この状態で登録ボタンを押すとExcelに内容が保存され、入力フォームが空になります。

f:id:stjun:20201115180712p:plain

 

2.3 コードの説明

以下のif文は最低でも入力フォームの名前欄と住所欄に記入させるため、どちらかが空欄だったらエラーメッセージを出します。

If txtName.Text = "" Then
    MsgBox "名前を入力してください", vbInformation, "確認"
    Exit Sub
ElseIf txtAddress.Text = "" Then
    MsgBox "住所を入力してください", vbInformation, "確認"
    Exit Sub
End If

f:id:stjun:20201115175954p:plain

 

 次に以下のコードで入力フォームの内容をExcelに記入します。

'入力フォームの内容をExcekに記載する
Dim Row As Integer
Row = Range("A1048576").End(xlUp).Offset(1).Row
Range("A" & Row).Value = txtName.Text
Range("B" & Row).Value = txtAddress.Text
Range("C" & Row).Value = txtTell.Text
Range("D" & Row).Value = txtEtc.Text

Row = Range("A1048576").End(xlUp).Offset(1).Rowについては前記事で説明しました。

 Range("A1048576").End(xlUp).Row はExcelの行を下から順に空欄かどうか判別していき、空欄でなくなった時の行を取得しています。今回はこのコードにOffset(1)が付いていますので、空欄でない行の一個下の行の番号を取得しています。例えば4行目までデータが記入されている場合、5行目を取得できます。

それ以下のコードはExcelのセル番号に入力フォームに記入されたテキスト内容を代入するコードです。

 

最後にユーザーフォームのリストにも追加し、入力フォームをクリアします。

'ユーザーフォームのリストに追加する
With List
    .AddItem
    .List(.ListCount - 1, 0) = txtName.Text
    .List(.ListCount - 1, 1) = txtAddress.Text
    .List(.ListCount - 1, 2) = txtTell.Text
    .List(.ListCount - 1, 3) = txtEtc.Text
End With

'入力フォームのクリア
txtName.Text = ""
txtAddress.Text = ""
txtTell = ""
txtEtc = ""

End Sub

 

3. おすすめ書籍

このシリーズはプログラミング初心者にも非常に分かりやすくてお勧めです。

私はプログラミングを初めて勉強する際、3番目の本を大学時代に買ってすごく助かりました。今でも手元に置いてるくらいです。 

 

4. 最後に

次回は修正する機能を追加してみます。