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(マスタ)のデータを更新できるようにしたいのですがどのようにすればよいのでしょうか?
No.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 などで記録しておいた該当行を取り出し、そこに書き込みます
早速のご回答ありがとうございます。
ユーザーフォームへのデータの抽出、表示は 'Bにて表示できました。
変数を使うとうまく動かなかったのでそれぞれのコード入力で出来ました。
ありがとうございます。
コマンドボタンでデータの更新については、s(i) = Me.Controls("textbox" & i).Textの欄でエラーになってしまいます。
実際はテキストボックスとコマンドボックスが混在しているのが原因と思います。
もう少し勉強が必要ですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) このプログラムなんですがsheetにデータを置いて表示できるようにしてありますがsheetに101を 2 2023/02/23 20:13
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) Excel VBAのリストボックスの値を他のフォームに反映させる方法を教えてください。 2 2023/07/14 14:06
- Visual Basic(VBA) Excel VBA 書式変更で困ってます。 オートフィルターの日付フィルターを用いて データの絞り込 2 2022/07/26 22:16
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) フォルダ内のエクセルファイルを開かずにデータ採取する関数式 2 2022/12/22 22:15
- Visual Basic(VBA) VBAでvlookup関数から、別シート参照するやり方・・・ 2 2022/11/14 18:49
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Visual Basic(VBA) vbaのvlookup関数エラー原因を教えていただけないでしょうか。 3 2022/04/25 16:16
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
VLOOKUP関数とテキストボックスの連携
Excel(エクセル)
-
エクセルのユーザーフォームでVLOOKUPと同じ機能をするには?
Excel(エクセル)
-
VLookup関数を使ってラベルに表記させるには?
Visual Basic(VBA)
-
-
4
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
5
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
6
UserForm1.Showでエラーになります。
工学
-
7
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
8
ExcelのComboboxでマウスのスクロールを有効にしたい
Excel(エクセル)
-
9
Excel VBA ユーザーフォーム内のラベルにテキストボックスの小計を出す方法
Visual Basic(VBA)
-
10
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
11
ExcelVBAでテキストボックスの表示形式を小数点第二位まで表示する方法
Visual Basic(VBA)
-
12
エクセルVBAでテキストボックスに入力があった場合のみ、ワークシートに転記したい
Visual Basic(VBA)
-
13
ユーザーフォームで別シートを検索できますか
Excel(エクセル)
-
14
VBAでユーザーフォームにセル値を表示させるには
Visual Basic(VBA)
-
15
VBA テキストボックスの計算
Visual Basic(VBA)
-
16
ユーザーフォームに別シートからデータを反映させたい。
Visual Basic(VBA)
-
17
エクセルVBA ユーザーフォームのTextBoxを日付にしたい
Excel(エクセル)
-
18
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
19
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
20
TextBoxに日付を自動的に入れる
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでの行数を揃える方法
-
ListBoxにAddItemする際、重複...
-
pandasでsqlite3にテーブル作成...
-
Excel VBAのユーザーフォームで...
-
機械語
-
マクロでファイルを読み込み、...
-
JDBCを使ってdate型へのINSERT...
-
一週間前から,今までVBAで行っ...
-
エクセルで去年のデータを今年...
-
【SQL】他テーブルに含まれる値...
-
SELECT INTOで一度に複数の変数...
-
フラグをたてるってどういうこ...
-
オラクルのUPDATEで複数テーブル
-
sqlに記述できない文字
-
SQLで、Join句で結合したテ...
-
UPDATEで既存のレコードに文字...
-
右向き、左向きの速度が最大と...
-
結合したテーブルをSUMしたい
-
truncate tableを使って複数の...
-
Accessの構成をコピーしたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
pandasでsqlite3にテーブル作成...
-
csvデータ不要列の削除をbatフ...
-
Excel VBAのユーザーフォームで...
-
【VB】セルが空になるまで処理...
-
ACCESS VBAでSeekメソッドの処...
-
追加クエリで重複データなしで...
-
JDBCを使ってdate型へのINSERT...
-
自作アプリからAPIで他のアプリ...
-
EXCELで外部データの取り込みが...
-
ListBoxにAddItemする際、重複...
-
データテーブルの使い方に関して
-
エクセル 2つの列にある値の完...
-
マクロでファイルを読み込み、...
-
VBAでの行数を揃える方法
-
【ExcelVBA】範囲選択の方法に...
-
一週間前から,今までVBAで行っ...
-
機械語
-
PHPとMYSQL、DBのデータが空の...
-
Accessでパラメーター以外の削...
-
エクセルで去年のデータを今年...
おすすめ情報