HOME > 即効テクニック > Excel VBA > ユーザーフォーム関連のテクニック > ユーザーフォーム入門 - 住所入力フォームを作成する(5) 〜 ワークシートへの転記

ユーザーフォーム入門 - 住所入力フォームを作成する(5) 〜 ワークシートへの転記|Excel VBA

ユーザーフォーム関連のテクニック

ユーザーフォーム入門 - 住所入力フォームを作成する(5) 〜 ワークシートへの転記

(Excel 2000/2002/2003/2007/2010)

ユーザーフォーム入門 - 住所入力フォームを作成する(4) 〜起動時に住所録ファイルを開く」で開いた住所録ファイルに、ユーザーフォームに入力されたデータを転記する処理を作成します。

コントロールの値をワークシートに出力するには、いろいろな方法がありますが、ここでは、テキストボックスに入力された値をそのまま、1つずつワークシートのセルに転記する方法をご紹介します。

■イベントプロシージャのひな型を作成する

転記する処理は、[登録]ボタンをクリックしたときに行います。
まず、[登録]ボタンClick時のイベントプロシージャを作成しましょう。
ユーザーフォームのフォームモジュールを表示し、オブジェクトボックスで "cmdToroku" を選択、プロシージャボックスで "Click" を選択してください。

すると、コードウィンドウに「cmdToroku_Click()」プロシージャのひな型が作成されます。

Private Sub cmdToroku_Click()

End Sub
  • ※Clickイベントはコマンドボタンの既定のイベントなので、ユーザーフォームの設計ウィンドウで、[登録]ボタンをダブルクリックする方法でも、「cmdToroku_Click()」プロシージャのひな型を作成できます。

■ワークシートへの転記とテキストボックスのクリア

「cmdToroku_Click()」プロシージャに次のコードを作成します。
まず、ワークシート上のデータの最終行を取得し、1を加えて、転記する行の行番号を取得します。最終行を取得するにはEndプロパティを使用します。
そして、対象のセルにユーザーフォームのテキストボックスの値を1つずつ転記します。

転記が終了したら、次の住所データを入力できるよう、ユーザーフォームのテキストボックスをクリアします。
このとき、転記したときと同様に1つ1つコントロールの名前を指定してValueプロパティの値をクリアすることもできますが、コントロール名の命名規則(ここでは "txt"から始まる)等を利用すると、短いコードで処理を行うことができます。
For Each...NextステートメントとIfステートメントの使い方を確認してください。

'[登録]ボタンクリック時の処理
Private Sub cmdToroku_Click()
    Dim RowNum As Long
    Dim Ctrl As Control
    
    With Workbooks(BOOK_NAME).Sheets(1)
        'A列の最終セルからEndプロパティでデータの最終行を取得し、
        '+1をして、次にデータを入力する行の行番号を取得
        RowNum = .Cells(Rows.Count, 1).End(xlUp).Row + 1
        
        'ワークシートの行列を指定してテキストボックスの値を1つずつセルへ代入
        .Cells(RowNum, 1).Value = Me.txtKaisha.Value
        .Cells(RowNum, 2).Value = Me.txtYomi.Value
        .Cells(RowNum, 3).Value = Me.txtYubin.Value
        .Cells(RowNum, 4).Value = Me.txtJusho1.Value
        .Cells(RowNum, 5).Value = Me.txtJusho2.Value
        .Cells(RowNum, 6).Value = Me.txtTEL.Value
        .Cells(RowNum, 7).Value = Me.txtFAX.Value
        .Cells(RowNum, 8).Value = Me.txtEmail.Value
        .Cells(RowNum, 9).Value = Me.txtTantou.Value
    End With
    
    'フォーム上のコントロールすべてをFor Eachステートメントでチェックし、
    'コントロール名が"txt"で始まるもののみ値を初期化
    For Each Ctrl In Me.Controls
        If Ctrl.Name Like "txt*" Then
            Ctrl.Value =""
        End If
    Next Ctrl

End Sub

●補足●

Meキーワードは、フォームモジュール内で使用すると、フォーム自体を表します。
ここでは、Meキーワードを使用していますが、次のように、「Me.」を省略してもかまいません。

.Cells(RowNum, 1).Value = txtKaisha.Value

ただ、Meキーワードを記述することで、自動メンバ表示が有効になり、コントロール名等を速く正確に入力できるというメリットがあります。

次回は、[会社名]テキストボックスに入力された値から、ふりがなを取得する処理を作成していきましょう。