ユーザーフォーム入門 - 住所入力フォームを作成する(5) 〜 ワークシートへの転記|Excel VBA |
「ユーザーフォーム入門 - 住所入力フォームを作成する(4) 〜起動時に住所録ファイルを開く」で開いた住所録ファイルに、ユーザーフォームに入力されたデータを転記する処理を作成します。
コントロールの値をワークシートに出力するには、いろいろな方法がありますが、ここでは、テキストボックスに入力された値をそのまま、1つずつワークシートのセルに転記する方法をご紹介します。
転記する処理は、[登録]ボタンをクリックしたときに行います。
まず、[登録]ボタンClick時のイベントプロシージャを作成しましょう。
ユーザーフォームのフォームモジュールを表示し、オブジェクトボックスで "cmdToroku" を選択、プロシージャボックスで "Click" を選択してください。
すると、コードウィンドウに「cmdToroku_Click()」プロシージャのひな型が作成されます。
Private Sub cmdToroku_Click()
End Sub
「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キーワードを記述することで、自動メンバ表示が有効になり、コントロール名等を速く正確に入力できるというメリットがあります。
次回は、[会社名]テキストボックスに入力された値から、ふりがなを取得する処理を作成していきましょう。