シートレイアウトはあくまでイメージで、部分的でよいので①、②の処理を行うコード(というか考え方)が知りたい、ということだと理解しました。
\u0026gt; ①ユーザーフォームのマスタナンバー欄に数字を入力することによって
まず \u0026quot;Sub データの取得()\u0026quot; で始まるようなプロシージャではなく、以下のようなマスタナンバーを入力したという「イベント」で自動的に実行されるものにします。
Private Sub txtマスタNo_AfterUpdate()
テキストボックスの名前は適当です。イベントも AfterUpdate の他にいろいろあります(個人的には Exit をよく使います)が、ひとまず引数がなくてシンプルな AfterUpdate とします。
\u0026gt; ”マスタデータ”シートの名前や住所などを表示させたい。
VLOOKUP でもよいですが、取得項目数分繰り返すのもうっとうしいので、MATCH を使うことにします。これでマスタデータの行番号が取得できるので、あとは順に対応するテキストボックスに取り込みます。
\u0026gt; ②変更がなければ登録ボタンより”登録”シートに転記させ、変更があればテキストボックスに入力したうえで転記させたい
変更の有無は関係無いでしょう。要するに「名簿登録」を押したら「登録」シートに転記、ですよね。
まずは「登録」シートの転記先の行番号を取得するのに、シートを明示的に指定します。
lRow = Worksheets(\u0026quot;登録\u0026quot;).Cells(Rows.Count, \u0026quot;A\u0026quot;).End(xlUp).Row + 1
あとはユーザーフォームの表示と逆に、同じ行のセルに順に書き出すだけです。
ということで以下のような感じ。「マスタデータ」も「登録」も図と同じレイアウトだとします。
Enum Koumoku
マスタNo = 1
名前
住所
金融機関
口座番号
End Enum
Private WsMaster As Worksheet, WsRegist As Worksheet
Private Sub btn名簿登録_Click() '②
With WsRegist
Dim lRow As Long
lRow = .Cells(Rows.Count, \u0026quot;A\u0026quot;).End(xlUp).Row + 1
.Cells(lRow, Koumoku.マスタNo).Value = Me.txtマスタNo.Value
.Cells(lRow, Koumoku.名前).Value = Me.txt名前.Value
.Cells(lRow, Koumoku.住所).Value = Me.txt住所.Value
.Cells(lRow, Koumoku.金融機関).Value = Me.txt金融機関.Value
.Cells(lRow, Koumoku.口座番号).Value = Me.txt口座番号.Value
End With
End Sub
Private Sub txtマスタNo_AfterUpdate() '①
With WsMaster
Dim rMaster As Variant
rMaster = Application.Match(CLng(Me.txtマスタNo.Value), .Columns(\u0026quot;A\u0026quot;), 0)
If IsError(rMaster) Then
MsgBox \u0026quot;No Data.\u0026quot;, vbExclamation
Exit Sub
End If
Me.txt名前.Value = .Cells(rMaster, Koumoku.名前).Value
Me.txt住所.Value = .Cells(rMaster, Koumoku.住所).Value
Me.txt金融機関.Value = .Cells(rMaster, Koumoku.金融機関).Value
Me.txt口座番号.Value = .Cells(rMaster, Koumoku.口座番号).Value
End With
End Sub
Private Sub UserForm_Initialize()
Set WsMaster = Worksheets(\u0026quot;マスタデータ\u0026quot;)
Set WsRegist = Worksheets(\u0026quot;登録\u0026quot;)
End Sub
UserForm_Initialize の処理や Enum などは必須ではありませんが、他の処理や可読性を考慮したつもりです。テキストボタンなどの名前は適当ですが、分かりやすいかと思います。