Categories: VBA基礎

EXCEL VBA ユーザーフォームからテキストボックスに入力したデータをシートに転記(UserForm)

 

 

EXCEL VBA ユーザーフォームからテキストボックスに入力したデータをシートに転記(UserForm・TextBox)

 

 

●はじめに

今回説明するのは、ユーザーフォームにテキストボックスを作成し、テキストボックスに文字列を入力して、入力した内容がワークシートに転記する方法を説明いたします。基礎的なユーザーフォームの作成方法につきましては、下記のページを参照して下さい。それでは、サンプルプログラムを交えて順番に説明致します。

●【EXCEL VBA ユーザーフォームの作成方法・操作方法(基礎・入門)UserForm】については、下記を参照して下さい】

 

●【ユーザーフォームを作成する(Microsoft様)、下記を参照して下さい】
https://docs.microsoft.com/ja-jp/office/vba/excel/concepts/controls-dialogboxes-forms/create-a-user-form

 

 

 

 

EXCEL VBA ユーザーフォームからテキストボックスに入力したデータをシートに転記(UserForm・TextBox)

 

 

●プログラム説明 (サンプル①)

下記のサンプルプログラムは、ユーザーフォームからテキストボックスに入力した4項目のデータをワークシートに転記するサンプルプログラムです。入力する項目は【氏名】・【フリガナ】・【郵便番号】・【住所】です。入力した項目をワークシートへ転記する場合は、【登録】ボタンを押す事で転記されます。

1.プログラム実行の流れ

2.ユーザーフォームの作成(UserForm)

 

【プログラムの流れ】
① ユーザーフォームを表示します。
② ユーザーフォームからデータを登録する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
'

 

 

●実行前~実行後 ※プログラム実行後、ユーザーフォームが表示されて、氏名・ふりがな・郵便番号・住所を入力して、入力後「登録」ボタンをクリックします。登録したデータがワークシートに転記されます。
(画面クリックして拡大)

 

 

 

EXCEL VBA ユーザーフォームからテキストボックスに入力した内容に応じて条件判断・別のワークシートへ転記(UserForm・TextBox)

 

 

●プログラム説明 (サンプル②)

下記のサンプルプログラムは、テキストボックスに入力した条件に応じて結果をワークシート別にデータを転記いたします。テキストボックスに住所を入力して、都道府県毎のシートが作成され入力したデータを都道府県毎に分けられたシートにデータが登録されます。ワークシートに既存の都道府県が有ればデータを該当する都道府県シートへデータが追加されます。ワークシートに該当する都道府県名のワークシートが無ければ、新たな都道府県名のワークシートが追加されて、データも追記されます。

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
'


 

 

 

 

●実行前~実行後 ※プログラム実行後、ユーザーフォームが表示されて、氏名・ふりがな・郵便番号・住所を入力して、入力後「登録」ボタンをクリックします。住所データから都道府県別シートを作成して、氏名・フリガナ・郵便番号・住所データが該当する都道府県のシートに転記されました。
(画面クリックして拡大)

 

 

 

EXCEL VBA ユーザーフォームを使いアンケートを入力します。(UserForm・TextBox)

 

 

●プログラム説明 (サンプル③)

下記のサンプルプログラムは、ユーザーフォームを使ってアンケートを入力します。ワークシート「質問内容」からアンケート内容を取得して、アンケートの回答結果をワークシート「回答」に転記するサンプルプログラムです。

 

 

【プログラムの流れ】
①質問内容に記入されている内容「フォーム表示」をクリックして表示します。
②フォームが表示されて、アンケート内容を記入します。
③登録ボタンをクリックして、フォームに入力された内容をシート「回答」へ転記します。

 

【プログラム実行条件】
① ワークシート「質問内容」を作成して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
'


 

 

●実行前~実行後 ※シート「質問内容」を元に、ユーザーフォームにアンケート内容が転記された内容でフォーム表示ボタンをクリックして表示します。ユーザーフォームにアンケート内容を入力した結果が、別シート「回答」に登録した回数に応じてデータとして蓄積されました。
(画面クリックして拡大)

 

 

最後まで、ご覧いただきまして誠に有難うございました。
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。

 

AKIRA