![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?a65a0e2)
VBA初心者ながら、顧客管理用に入力フォームなどを作っています。
検索フォームを作成し、名前や住所などをキーワードに実行ボタンを押して検索すると、顧客シートからデータを引っ張ってきて、検索フォームの下に対象リストが表示されます。(今回の場合は顧客シートのNo1、12、17のデータを引っ張ってきています。)
そこから、イメージとしては、画像のように3件結果が出力された内、一番上の検索結果をクリックすると、入力フォームに選択した対象者の情報が表示されるようなことをしたいのですが、何から手をつけたらよいかがわかりません・・・。
ちなみに、検索フォームに表示される値は、実際の入力フォームに入力する項目より少ない(例えば、入力フォームでは「ふりがな」がありますが、検索フォームに検索結果としては「ふりがな」は表示されていません。)
かなり大雑把な質問ですが、アドバイスなど頂けると幸いです。
![「Excel VBA 検索した値を入力フォ」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/e/756001_5756eb094badd/M.png)
No.2ベストアンサー
- 回答日時:
リストで選択したデータが存在する行番号が rowNumber に正しく取得できていますか?
私のサンプルで想定している環境は以下のように想定しています。
・ データ群が書き込まれているシートの 1行目が項目名になっていて、2行目からデータが入力されている。
・ 1つのデータは 1行で完結する。
・ 1列目(A列)には抜けもれなく通し番号が振ってある。(1件目の A2 が 1 で、 2件目の A2 が2、以下 1ずつ増えていっている)
・ 検索フォームのリストボックスの 1列目は、データ群のシートの A列の値(通し番号)が表示されている。
という状況なので、
1. 検索結果のリストから 1つのクリックする。
2. クリックされたリスト項目の 1列目の値をもとに、元の場所の行番号を割り出す。(元のデータのシートは 2行目からデータが始まっているのでリスト項目 1列目の値に 1 を加算すれば元の行番号になる)
もし以下のような環境だと、選択したリスト項目の内容から元のデータの行番号を推察することができません。
・ データ群のシートの 1列目は ID となっていて、改廃されていくと番号が飛ぶこともある。
・ 検索フォームのリストの 1列目は ID の値である。
この場合はリストボックスの 1列目に隠し列を作って起き、元の行番号を表示させておくのはどうでしょうか。
1列目の列幅を 0 pt にすれば見えません。(ColumnWidth プロパティ)
御礼が遅くなってしまって申し訳ござません。
一応、条件としては問題無いようなんですが、初心者なので教えて頂いた点以外に問題があるかもしれません・・・。
教えて頂いた点を参考にもう一度、トライしてみます。
色々とありがとうございました。勉強になりました!
No.3
- 回答日時:
こんにちわ
ユーザーフォーム1の質問ではないと思いますが、
入力項目が多いので、簡単にしてみました。
'"顧客シート"のA列~Q列にデータがある
'氏名は2(B)列、住所は4(D)列、電話番号は6(F)列、メールアドレスは8(G)列
'ColumnWidthsが、0だと表示しない(ふりがな)
'xyLIst配列は、一次元目が列、二次元目が行になっている。
'Me.ListBox1.Column() = xyLIstで行列入れ替えている。
'UserForm1にはTextBox1、CommandButton1、CommandButton2、
'CommandButton3、CommandButton4、ListBox1が有る。
'ここからUserForm1のコード
Const cSheetName As String = "顧客シート"
Private Sub UserForm_Initialize()
Me.CommandButton1.Caption = "氏名で検索"
Me.CommandButton2.Caption = "住所で検索"
Me.CommandButton3.Caption = "電話番号で検索"
Me.CommandButton4.Caption = "メールアドレス検索"
Me.ListBox1.ColumnCount = 10
Me.ListBox1.ColumnWidths = _
"30;50;0;150;150;50;50;150;50;50"
End Sub
Private Sub CommandButton1_Click() '氏名で検索
'氏名は2(B)列、住所は4(D)列、電話番号は6(F)列、メールアドレスは8(G)列
Call 検索(2)
End Sub
Private Sub CommandButton2_Click() '住所で検索
'氏名は2(B)列、住所は4(D)列、電話番号は6(F)列、メールアドレスは8(G)列
Call 検索(4)
End Sub
Private Sub CommandButton3_Click() '電話番号で検索
'氏名は2(B)列、住所は4(D)列、電話番号は6(F)列、メールアドレスは8(G)列
Call 検索(6)
End Sub
Private Sub CommandButton4_Click() 'メールアドレス検索
'氏名は2(B)列、住所は4(D)列、電話番号は6(F)列、メールアドレスは8(G)列
Call 検索(8)
End Sub
Private Sub 検索(ByVal 検索列 As Long)
Dim xyLIst As Variant
Dim Ws As Worksheet, xText As String
Dim i As Long, j As Long, k As Long, n As Long
Dim iCol As Long, iRow As Long
xText = Me.TextBox1.Text
If xText = "" Then
MsgBox "TextBoxに入力してください。"
Exit Sub
End If
Set Ws = Sheets(cSheetName)
iCol = Ws.Range("A1").CurrentRegion.Columns.Count
iRow = Ws.Range("A1").CurrentRegion.Rows.Count
ReDim xyLIst(1 To iCol, 1 To 1)
n = 0
For i = 2 To iRow
If InStr(Ws.Cells(i, 検索列).Value, xText) Then
n = n + 1
ReDim Preserve xyLIst(1 To iCol, 1 To n)
For j = 1 To iCol
xyLIst(j, n) = Ws.Cells(i, j).Value
Next j
End If
Next i
If n = 0 Then Exit Sub
Me.ListBox1.Column() = xyLIst
End Sub
使用方法
まず、テキストボックスに入力します。
その後、検索ワードの種類に会ったコマンドボタンをクリックする。
No.1
- 回答日時:
検索用フォームの名前が UserForm1 で入力用フォームの名前を UserForm2 として
例えば UserForm1 の ListBox の 1列目の値から 「選択したデータが元のワークシートの何行目にあるか」 を推測できるとします。
UserForm2 の Initialize イベントの中で UserForm1 の 「ListBox で選択されている行の 1列目の値」 を取得し、この値を元にオリジナル データのシート上での行番号を算出する。
その行番号を元にしてシート上に格納されている各列のデータを UserForm2 の各種コントロールに入れ込む。
という感じ。
Form2 のコード
------------------------------
Option Explicit
Dim rowNumber As Long ' オリジナルデータが書き込まれている行番号
Private Sub UserForm_Initialize()
' UserForm1 の ListBox で選択されている行のデータから行番号を算出。
' 「+ 1」 とかはシートのヘッダー行数に合わせて適宜調整。
rowNumber = UserForm1.ListBox1.List(UserForm1.ListBox1.ListIndex, 0) + 1
' データを読み込んでフォーム上のコントロールに配置する
Call ReadData(rowNumber)
End Sub
Private Sub ReadData(rowNumber As Long)
' ブックやシートの参照方法はお好きに
Dim dataSheet As Worksheet
Set dataSheet = ThisWorkbook.Worksheets(1)
Me.TextBox1.Text = dataSheet.Cells(rowNumber, 1).Value
Me.TextBox2.Text = dataSheet.Cells(rowNumber, 2).Value
Me.TextBox3.Text = dataSheet.Cells(rowNumber, 3).Value
End Sub
ありがとうございます。
教えて頂いた通りやってみたのですが、どうしても一覧リストに表示された検索結果をクリックしても、入力フォームに表示されません・・・。
こちらのオブジェクトの名前などにしてみたのですが、これがそもそもちがうのかもしれません。
Private Sub UserForm_Initialize()
'検索フォーム の ListBox で選択されている行のデータから行番号を算出。 ' 「+ 1」 とかはシートのヘッダー行数に合わせて適宜調整。
rowNumber = 検索フォーム.一覧リストボックス.List(検索フォーム.一覧リストボックス.ListIndex, 0) + 1
' データを読み込んでフォーム上のコントロールに配置する
Call ReadData(rowNumber)
End Sub
Private Sub ReadData(rowNumber As Long)
' ブックやシートの参照方法はお好きに
Dim dataSheet As Worksheet
Set dataSheet = ThisWorkbook.Worksheets("相談者情報")
Me.IDラベル = dataSheet.Cells(rowNumber, 1).Value
Me.初回月テキストボックス.Text = dataSheet.Cells(rowNumber, 2).Value
Me.氏名テキストボックス.Text = dataSheet.Cells(rowNumber, 3).Value
Me.ふりがなテキストボックス.Text = dataSheet.Cells(rowNumber, 4).Value
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Visual Basic(VBA) Excel VBAのリストボックスの値を他のフォームに反映させる方法を教えてください。 2 2023/07/14 14:06
- Access(アクセス) Accessで予定表を作成しようとしてます。 テーブル フィールド名 連番 オートナンバー型 年月日 2 2023/07/23 11:40
- その他(ブラウザ) Mycrosoft Edge フォームの履歴を完全に削除したい 3 2022/08/11 09:59
- JavaScript ラジオボタンによるフォームの開閉を行いたい 3 2022/03/31 21:30
- Access(アクセス) Accessでセレクタをダブルクリックで別フォームで詳細表示 3 2022/12/20 10:36
- Access(アクセス) Accessフォーム 一部のレコードだけを抽出する方法について 1 2022/06/28 18:45
- Access(アクセス) Access 複数条件検索の設定が上手く行きません 1 2022/07/22 20:37
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
このQ&Aを見た人はこんなQ&Aも見ています
-
これまでで一番「情けなかったとき」はいつですか?
これまでの人生で一番「情けない」と感じていたときはいつですか? そこからどう変化していきましたか?
-
スマホに会話を聞かれているな!?と思ったことありますか?
スマートフォンで検索はしてないのに、友達と話していた製品の広告が直後に出てきたりすることってありませんか? こんな感じでスマホに会話を聞かれているかも!?と思ったエピソードってありますか?
-
最強の防寒、あったか術を教えてください!
とっても寒がりなのですが、冬に皆さんがされている最強の防寒、あったか術が知りたいです!
-
あなたの人生で一番ピンチに陥った瞬間は?
これまでの人生で今振り返ると「あの時、1番ピンチだったなぁ...」という瞬間はありますか?
-
「これいらなくない?」という慣習、教えてください
現代になって省略されてきたとはいえ、必要性のない慣習や風習、ありませんか?
-
ユーザーフォームに別シートからデータを反映させたい。
Visual Basic(VBA)
-
VBA フォームに入力された数値を検索条件としたい
Visual Basic(VBA)
-
エクセルで検索結果をユーザーフォームに表示したいのですが
Excel(エクセル)
-
-
4
エクセルVBAでテキストボックスに入力があった場合のみ、ワークシートに転記したい
Visual Basic(VBA)
-
5
VBA。リストボックスの値を別のユーザーフォームのテキストボックスに反映したい。
Access(アクセス)
-
6
excel VBA ユーザーフォームを消すとTextBoxから反映させたセルの値も戻ってしまう
Excel(エクセル)
-
7
Excel VBAのリストボックスの値を他のフォームに反映させる方法を教えてください。
Visual Basic(VBA)
-
8
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
9
ユーザーフォームへのデータ入力を繰り返す方法
Visual Basic(VBA)
-
10
Excelで検索結果をテキストボックスに表示
Windows Vista・XP
-
11
コマンドボタンのEnterイベント後に、フォーカスを移動したい。
その他(Microsoft Office)
-
12
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
13
エクセルVBA 複数列のリストボックス内を検索して値を複数列表示したい
Excel(エクセル)
-
14
入力済み、選択したセルに連動した行のデータをユーザーフォームで呼び出すには
Excel(エクセル)
-
15
ユーザーフォームに入力したデータを保持する方法
Visual Basic(VBA)
-
16
ユーザーフォームで別シートを検索できますか
Excel(エクセル)
-
17
エクセルVBA テキストボックス検索
Excel(エクセル)
-
18
VBAのユーザーフォームで、テキストボックスを連携させたいのですが。
Visual Basic(VBA)
-
19
ユーザーフォームのテキストボックスに前回入力した値を表示する Excel
Visual Basic(VBA)
-
20
ユーザーフォームのラベルに日付を表示させる方法があればお願いします。出来ればコード書いていただけると
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで、あるセルの値に応じて...
-
B列の最終行までA列をオート...
-
URLのリンク切れをマクロを使っ...
-
Cellsのかっこの中はどっちが行...
-
vba 2つの条件が一致したら...
-
Worksheets メソッドは失敗しま...
-
VBAのFind関数で結合セルを検索...
-
IIF関数の使い方
-
【VBA】2つのシートの値を比較...
-
エクセル 2つの表の並べ替え
-
VBA 何かしら文字が入っていたら
-
VBAを使って検索したセルをコピ...
-
オートフィルタをマクロで作成...
-
Changeイベントでの複数セルの...
-
複数csvを横に追加していくマク...
-
VBAで、離れた複数の列に対して...
-
データグリッドビューの一番最...
-
エクセル アクティブセルから...
-
SUM関数の範囲を変数を代入して...
-
VBAで指定範囲内の空白セルを左...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
B列の最終行までA列をオート...
-
Cellsのかっこの中はどっちが行...
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
vba 2つの条件が一致したら...
-
IIF関数の使い方
-
VBA 何かしら文字が入っていたら
-
VBAのFind関数で結合セルを検索...
-
【VBA】2つのシートの値を比較...
-
文字列の結合を空白行まで実行
-
Changeイベントでの複数セルの...
-
URLのリンク切れをマクロを使っ...
-
VBAで指定範囲内の空白セルを左...
-
【Excel VBA】 B列に特定の文字...
-
VBAを使って検索したセルをコピ...
-
VBAで、特定の文字より後を削除...
-
エクセル 2つの表の並べ替え
-
データグリッドビューの一番最...
-
rowsとcolsの意味
-
VBAでのリスト不一致抽出について
おすすめ情報