タイムマシーンがあったら、過去と未来どちらに行く?

EXCEL VBAの構文について教えてください。

まず、
Sheet2(マスタ)にA4~Z882 までデータがあります。
UserForm2にTextBox1~10まであります。

Sheet1(一覧表)にコマンドボタンで"修正"を用意し、このボタンを押すとUserForm2が表示されます。
このユーザーフォームでは、Sheet1(一覧表)上のActivecellのデータをTextBox1に表示するようにしております。(Private Sub UserForm_Initialize()にて)

ここから教えてほしいのですが、
TextBox1と同じ行のデータをSheet2(マスタ)からvlookupのように各TextBox2~10に表示させたいと思ってます。
どのようなコードを作れば良いのでしょうか?

Sheet2(マスタ)にはA列にActivecellと同一文字列が並んでおります。
B列=Box2、C列=Box3・・・と表示されるようにしたいのです。

また、UserForm2に修正ボタンを設置し、データを訂正後押すとSheet2(マスタ)のデータを更新できるようにしたいのですがどのようにすればよいのでしょうか?

A 回答 (1件)

>TextBox1と同じ行のデータをSheet2(マスタ)からvlookupのように各TextBox2~10に表示させたいと思ってます。


『TextBox1と同じ行のデータ』で良いのでしょうか?
って事はSheet1(一覧表)のActivecellの『行』になります? 'A

そうではなくて『TextBox1の値をSheet2(マスタ)のA列から検索してヒットした行のデータ』でしょうか? 'B

マスタから表示させるのは
Private Sub UserForm_Initialize()
  Dim n As Long
  Dim i As Long

  n = ActiveCell.Row 'A
  Me.Tag = n 'A

'  Dim x 'B
'  x = Application.Match(ActiveCell.Value, Sheets("マスタ").Columns("A"), 0) 'B
'  If IsError(x) Then 'B
'    MsgBox "error" 'B
'    Exit Sub 'B
'  End If 'B
'  n = CLng(x) 'B
'  Me.Tag = n 'B

  Me.TextBox1.Text = ActiveCell.Value
  For i = 2 To 10
    Me.Controls("textbox" & i).Text = Sheets("マスタ").Cells(n, i).Value
  Next
End Sub

こんなコードになります
参照したいマスタのデータがB列からJ列まで、つまり2~9列目までとして
変数iを使ってループし
Me.Controls("textbox" & i) に Sheets("マスタ").Cells(n, i) のデータを設定すれば良いです
変数を使わないでループせずに Me.TextBox2.Text = Sheets("マスタ").Cells(n, 2).Value とか
それぞれ9行書いてもいいです

もし『TextBox1の値をSheet2(マスタ)のA列から検索してヒットした行のデータ』なら
'Aのコードを削除してコメントアウトした'Bのコードを活かしてください
どちらにしても Me.Tag = n などのように、Sheets("マスタ")の該当行をどこかに記録しておきます
Tagを使わず Me.TextBox11.Text = n などと他のコントロールを使って記録しても良いかと思います

>Sheet2(マスタ)のデータを更新
の場合は
Private Sub CommandButton1_Click()
  Dim n As Long
  Dim i As Long

  n = Me.Tag
  Dim s(1 To 10)
  For i = 1 To 10
    s(i) = Me.Controls("textbox" & i).Text
  Next
  Sheets("マスタ").Cells(n, 1).Resize(, 10).Value = s
End Sub

n = Me.Tag などで記録しておいた該当行を取り出し、そこに書き込みます
    • good
    • 0
この回答へのお礼

ありがとう

早速のご回答ありがとうございます。
ユーザーフォームへのデータの抽出、表示は 'Bにて表示できました。
変数を使うとうまく動かなかったのでそれぞれのコード入力で出来ました。
ありがとうございます。

コマンドボタンでデータの更新については、s(i) = Me.Controls("textbox" & i).Textの欄でエラーになってしまいます。
実際はテキストボックスとコマンドボックスが混在しているのが原因と思います。

もう少し勉強が必要ですね。

お礼日時:2020/02/19 10:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A