今回説明するのは、ユーザーフォームにテキストボックスを作成し、テキストボックスに文字列を入力して、入力した内容がワークシートに転記する方法を説明いたします。基礎的なユーザーフォームの作成方法につきましては、下記のページを参照して下さい。それでは、サンプルプログラムを交えて順番に説明致します。
●【EXCEL VBA ユーザーフォームの作成方法・操作方法(基礎・入門)UserForm】については、下記を参照して下さい】
●【ユーザーフォームを作成する(Microsoft様)、下記を参照して下さい】
https://docs.microsoft.com/ja-jp/office/vba/excel/concepts/controls-dialogboxes-forms/create-a-user-form
下記のサンプルプログラムは、ユーザーフォームからテキストボックスに入力した4項目のデータをワークシートに転記するサンプルプログラムです。入力する項目は【氏名】・【フリガナ】・【郵便番号】・【住所】です。入力した項目をワークシートへ転記する場合は、【登録】ボタンを押す事で転記されます。
1.プログラム実行の流れ
【プログラムの流れ】
① ユーザーフォームを表示します。
② ユーザーフォームからデータを登録する4項目をテキストボックスに入力します。
③ 【登録】ボタンクリックでテキストボックスに入力したデータをワークシートへ転記します。
④ ワークシートにデータを転記する前に、現在ワークシートに登録されているデータの行数+1を把握します。
⑤ テキストボックスに入力された4項目のデータを追記として、現在登録行数+1の行へ転記されます。
⑥ テキストボックスに入力された4項目のデータをクリアー(空白)します。
【プログラム実行条件】
① ユーザーフォームを作成する。
② ワークシートのA1~E1タイトルを作成する。(転記先のワークシートを作成)
① ユーザーフォーム(UserForm1)にコード(プログラム)を記述します。
'
'
Private Sub CommandButton1_Click()
lRow = Cells(Rows.Count, "A").End(xlUp).Row + 1 'A列の再最終行を取得
Cells(lRow, "A") = lRow - 1 '連番生成1~セルA列に登録
Cells(lRow, "B") = TextBox1.Text 'テキストボックス①氏名をセルB列に登録
Cells(lRow, "C") = TextBox2.Text 'テキストボックス②ふりがなをセルC列に登録
Cells(lRow, "D") = TextBox3.Text 'テキストボックス③郵便番号をセルD列に登録
Cells(lRow, "E") = TextBox4.Text 'テキストボックス④住所をセルE列に登録
'テキストボックスをクリアー
TextBox1.Text = "" 'テキストボックス①をクリアー
TextBox2.Text = "" 'テキストボックス②をクリアー
TextBox3.Text = "" 'テキストボックス③をクリアー
TextBox4.Text = "" 'テキストボックス③をクリアー
End Sub
'
② Module1にユーザーフォームを表示するコード(プログラム)を記述します。こちらのコードを実行します。
'
'
Sub TextBox01() 'ユーザーフォームの表示
UserForm1.Show
End Sub
'
下記のサンプルプログラムは、テキストボックスに入力した条件に応じて結果をワークシート別にデータを転記いたします。テキストボックスに住所を入力して、都道府県毎のシートが作成され入力したデータを都道府県毎に分けられたシートにデータが登録されます。ワークシートに既存の都道府県が有ればデータを該当する都道府県シートへデータが追加されます。ワークシートに該当する都道府県名のワークシートが無ければ、新たな都道府県名のワークシートが追加されて、データも追記されます。
1.プログラム実行の流れ
【プログラムの流れ】
① ユーザーフォームを表示します。
② ユーザーフォームからデータを登録する4項目をテキストボックスに入力します。
③ 【登録】ボタンクリックでテキストボックスに入力したデータをワークシートへ転記します。
④ テキストボックスに該当する都道府県名のシートが有るか検索します。該当のワークシート有れば・・・⑥へ 無ければ・・・⑤へ
⑤ 該当する都道府県のワークシートが無ければ、新たなワークシート名でシートを追加します。
⑥ 該当ワークシートにデータを転記する前に、該当のワークシートに登録されているデータの行数を把握します。
⑦ 該当のワークシートに登録されているA列の最終行を取得します。
⑧ テキストボックスに入力された4項目のデータを追記として、該当するワークシート+現在登録行数+1の行へデータを転記します。
⑨ テキストボックスに入力された4項目のデータをクリアー(空白)します。
【プログラム実行条件】
① ユーザーフォームを作成する。
① ユーザーフォーム(UserForm1)にコード(プログラム)を記述します。
'
'
Private Sub CommandButton1_Click()
Dim ws, SetWs As Worksheet
Dim Address, SearchName As String
Dim lRow As Long
Address = TextBox4.Text 'テキストボックス④住所をAddres(変数)へ代入
If InStr(Address, "都") > 0 Then '住所から都道府県を探します。都道府県名をSearchNameに代入します。
SearchName = Left(Address, InStr(Address, "都"))
ElseIf InStr(Address, "道") > 0 Then
SearchName = Left(Address, InStr(Address, "道"))
ElseIf InStr(Address, "府") > 0 Then
SearchName = Left(Address, InStr(Address, "府"))
ElseIf InStr(Address, "県") > 0 Then
SearchName = Left(Address, InStr(Address, "県"))
Else
MsgBox "住所に都道府県名がありません"
Exit Sub
End If
'マクロ実行ブックの全シートにループ処理を実行する
For Each ws In ThisWorkbook.Worksheets '全ワークシートを調べる
If ws.Name = SearchName Then '既存のワークシートが有るか調べる
Ws_hit = True
Set SetWs = Worksheets(SearchName) '該当のワークシートをセットします。
Exit For '該当のワークシートがあればループから抜ける
End If
Next ws
If Ws_hit = False Then '該当のワークシートが無い
Worksheets.Add '該当のワークシートが無いので追加
ActiveSheet.Name = SearchName 'ワークシート名を変更
Set SetWs = Worksheets(SearchName)
With SetWs
.Cells(1, "A") = "連番"
.Cells(1, "B") = "氏名"
.Cells(1, "C") = "ふりがな"
.Cells(1, "D") = "郵便番号"
.Cells(1, "E") = "住所"
End With
End If
With SetWs
lRow = .Cells(Rows.Count, "A").End(xlUp).Row + 1 'A列の再最終行を取得
.Activate
.Cells(lRow, "A") = lRow - 1 '連番生成1~セルA列に登録
.Cells(lRow, "B") = TextBox1.Text 'テキストボックス①氏名をセルB列に登録
.Cells(lRow, "C") = TextBox2.Text 'テキストボックス②ふりがなをセルC列に登録
.Cells(lRow, "D") = TextBox3.Text 'テキストボックス③郵便番号をセルD列に登録
.Cells(lRow, "E") = TextBox4.Text 'テキストボックス④住所をセルE列に登録
End With
'テキストボックスをクリアー
TextBox1.Text = "" 'テキストボックス①をクリアー
TextBox2.Text = "" 'テキストボックス②をクリアー
TextBox3.Text = "" 'テキストボックス③をクリアー
TextBox4.Text = "" 'テキストボックス③をクリアー
End Sub
'
② Module1にユーザーフォームを表示するコード(プログラム)を記述します。こちらのコードを実行します。
※ユーザーフォーム表示のボタンにマクロ登録を行う。
'
'
Sub TextBox01() 'ユーザーフォームの表示
UserForm1.Show
End Sub
'
下記のサンプルプログラムは、ユーザーフォームを使ってアンケートを入力します。ワークシート「質問内容」からアンケート内容を取得して、アンケートの回答結果をワークシート「回答」に転記するサンプルプログラムです。
【プログラムの流れ】
①質問内容に記入されている内容「フォーム表示」をクリックして表示します。
②フォームが表示されて、アンケート内容を記入します。
③登録ボタンをクリックして、フォームに入力された内容をシート「回答」へ転記します。
【プログラム実行条件】
① ワークシート「質問内容」を作成してB列に質問内容を記入します。
② ワークシート「回答」を作成してセルの1行目に表題を作成します。
① ユーザーフォーム(UserForm1)にコード(プログラム)を記述します。
'
'
Private Sub CommandButton1_Click() '回答内容をシート「回答」に転記
Dim Ws02 As Worksheet
Dim I, lRow As Long
Set Ws02 = Worksheets("回答")
With Ws02
lRow = .Cells(Rows.Count, "A").End(xlUp).Row + 1 'A列の再最終行を取得
.Activate
.Cells(lRow, "A") = lRow - 1 '連番生成1~セルA列に登録
.Cells(lRow, "B") = TextBox1.Text 'テキストボックス①氏名をセルB列に登録
.Cells(lRow, "C") = TextBox2.Text 'テキストボックス②質問内容①をC列に登録
.Cells(lRow, "D") = TextBox3.Text 'テキストボックス③質問内容②をセルD列に登録
.Cells(lRow, "E") = TextBox4.Text 'テキストボックス④質問内容③をセルE列に登録
End With
'テキストボックスをクリアー
TextBox1.Text = "" 'テキストボックス①をクリアー
TextBox2.Text = "" 'テキストボックス②をクリアー
TextBox3.Text = "" 'テキストボックス③をクリアー
TextBox4.Text = "" 'テキストボックス③をクリアー
End Sub
'
'
'
Private Sub UserForm_Initialize() '質問内容をラベルへ転記します。
Dim Ws01 As Worksheet
Set Ws01 = Worksheets("質問内容") 'ワークシート名をセット
Label1.Caption = "氏名" 'ラベル1と氏名に変更します。
Label2.Caption = Ws01.Cells(2, "B") 'ラベル2を質問内容①に変更します。
Label3.Caption = Ws01.Cells(3, "B") 'ラベル3を質問内容②に変更します。
Label4.Caption = Ws01.Cells(4, "B") 'ラベル④を質問内容③に変更します。
End Sub
'
② Module1にユーザーフォームを表示するコード(プログラム)を記述します。こちらのコードを実行します。
※ユーザーフォーム表示のボタンにマクロ登録を行う
'
'
Sub TextBox01() 'ユーザーフォームの表示
UserForm1.Show
End Sub
'