Home > 即効テクニック > Excel VBA > ユーザーフォーム関連のテクニック > ユーザフォーム入門 - 住所入力フォームを作成する(7) 〜 転記のテクニック別解

即効テクニック

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

ユーザフォーム入門 - 住所入力フォームを作成する(7) 〜 転記のテクニック別解

(Excel 2000)
■転記の方法 − 別解1■
ワークシートへの転記は、テクニック集”ユーザーフォーム入門−住所入力フォームを作成する(4)”のように、セル1つに対し、コントロールの値を1つずつ転記していくのが基本ですが、(4)のサンプルの中でコントロールの値クリアのために使用しているFor Each ステートメントでのループによる手法を応用すれば、以下のようなプロシージャでも転記は可能です。

前提:各テキストボックスのTagプロパティー(空のダミープロパティー)に転記するセルの
   列番号をプロパティーウィンドウより個別に設定。
   (例:txtTELのTagプロパティーは6、txtTantouのTag ⇒ 9)

(サンプル:cmdTouroku_Clickイベントプロシージャを上書き)
'==============宣言セクション========================================
Private Const BOOK_NAME As String = "住所録.xls"

'==============コマンドボタンクリックイベント========================
Private Sub cmdTouroku_Click()

Dim lngRowNum As Integer
Dim Ctrl As Control
Dim i As Integer

With Workbooks(BOOK_NAME).Sheets("sheet1")
lngRowNum = .Cells(65536, 1).End(xlUp).Row + 1

'コントロール名が”txt”で始まるもののみ転記&値クリア
For Each Ctrl In Me.Controls
If Ctrl.Name Like "txt*" Then
    .Cells(lngRowNum, CInt(Ctrl.Tag)).Value = Ctrl.Value
    Ctrl.Value = ""
End If
Next
End With

End Sub
■転記の方法 − 別解2■
仮にコントロールのオブジェクト名をテクニック集”ユーザーフォーム入門 − 住所入力フォームを作成する(2)”のように指定せず、標準の状態(例:TextBox1)や”Txt1”というように、数値インデックスを付加して識別子としているような場合には、Controlsコレクションから各コントロールにアクセスする方法を応用できます。

EX.) Cells(1,1).Value = Me.Controls("TextBox1").Value

この方法を応用すると、転記先のセルの指定位置に従ってコントロールの識別用の数値をオブジェクト名に含めるようにすれば、以下のような転記方法も可能です。
テキストボックスの名称が"txt1 〜 txt9"とすると・・・
'==============宣言セクション========================================
Private Const BOOK_NAME As String = "住所録.xls"

'==============コマンドボタンクリックイベント========================
Private Sub cmdTouroku_Click()

Dim lngRowNum As Integer
Dim i As Integer

With Workbooks(BOOK_NAME).Sheets("sheet1")
lngRowNum = .Cells(65536, 1).End(xlUp).Row + 1

For i = 1 To 9
.Cells(lngRowNum, i).Value = Me.Controls("txt" & i).Value
Me.Controls("txt" & i).Value = ""
Next i

End With

End Sub