
VBA初心者です。sheet1に商品アンケート結果A列~AS列のデータがあります。
フォームにTextBox、ListBox1を配置しました。
TextBoxに「B列」の商品名(例:"いちご")を入力してEnterキー押下すると
"いちご"のレコードA列~AS列のデータをListBox1に表示させたいです。
検索結果の商品名のアドレス取得まではできましたが、A列~AS列すべてのデータをリストボックスに表示させるにはどのようにすれば良いでしょうか。宜しくお願い致します。
サンプルデータ:
A列 B列 C列 ・・・・AS列
住所 /商品名 /種別 /アンケート結果
●東京都 いちごミルク 飲料 ・・・・A
●神奈川県 いちご 果物 ・・・・A
●千葉県 いちごチョコ 菓子 ・・・・A
群馬県 バナナチョコ 菓子 ・・・・B
TextBoxに"いちご"と入力した場合、●のレコードがすべてListBox1に表示させたいです。。
※コード※
Private Sub TextBox_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim Obj As Object
Dim wA1 As Variant
Dim wAddress As Variant
Dim wList As String
Dim ws1 As Worksheet
Set ws1 = Sheets("Sheet1") '元データ 商品アンケート
With ws1
'TextBox 検索
Set Obj = .Cells.Find( _
What:=TextBox.Value, _
LookIn:=xlValues, _
LookAt:=xlPart, _
MatchByte:=False)
'検索対象がない場合はメッセージを表示
If Obj Is Nothing Then
MsgBox "対象データは存在しません。", _
vbOKOnly + vbInformation, "検索"
Else
'リストボックスをクリア
ListBox1.RowSource = ""
'検索結果の最初のアドレスをセット
wA1 = Obj.Address
'検索の繰り返し処理
Do
'検索結果のアドレスをセット
wAddress = Obj.Address
'検索結果セルの値を取得
wList = .Range(wAddress)
'ListBox1に追加
ListBox1.AddItem wList
'次の検索を行う
Set Obj = .Cells.FindNext(Obj)
'最初にヒットしたアドレスと同じ場合は処理を終了
If Obj.Address = wA1 Then Exit Do
Loop
End If
End With

No.7ベストアンサー
- 回答日時:
With ws1.Columns("B:B")
にした為A列が省かれてしまっていました。すみません。
紛らわしくなるので、修正したものを最初から全部書きます。
Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim Obj As Range
Dim wA1 As String
Dim wAddress As Range
Dim ws1 As Worksheet, ws2 As Worksheet
Dim i As Integer
Set ws1 = Sheets("Sheet1")
Set ws2 = Sheets("Sheet5")
With ws1
Set Obj = .Columns("B:B").Find(What:=TextBox1.Value, LookIn:=xlValues, LookAt:=xlPart, MatchByte:=False)
If Obj Is Nothing Then
MsgBox "対象データは存在しません。", _
vbOKOnly + vbInformation, "検索"
Exit Sub
End If
ListBox1.RowSource = ""
wA1 = Obj.Address
Do
Set wAddress = Obj.Offset(0, -1)
i = i + 1
.Range("A" & wAddress.Row & ":AS" & wAddress.Row).Copy Destination:=ws2.Range("A" & i)
Set Obj = .Columns("B:B").FindNext(Obj)
If Obj Is Nothing Then Exit Do
Loop Until Obj.Address = wA1
ListBox1.AddItem ""
ListBox1.List = ws2.Range("A1:AS" & i).Value
ws2.Range("A1:AS" & i).ClearContents
End With
End Sub
ご回答いただき、有難うございます!
修正いただきました内容でリストボックスに検索結果を表示することができました!大変助かりました。有難うございます。

No.6
- 回答日時:
sheet1 とは別のシートを使う事により出来ましたので、一応紹介します。
Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim Obj As Range
Dim wA1 As String
Dim wAddress As Range
Dim ws1 As Worksheet, ws2 As Worksheet
Dim i As Integer
Set ws1 = Sheets("Sheet1")
Set ws2 = Sheets("Sheet5")
With ws1.Columns("B:B")
Set Obj = .Find(What:=TextBox1.Value, LookIn:=xlValues, LookAt:=xlPart, MatchByte:=False)
If Obj Is Nothing Then
MsgBox "対象データは存在しません。", _
vbOKOnly + vbInformation, "検索"
Exit Sub
End If
ListBox1.RowSource = ""
wA1 = Obj.Address
Do
Set wAddress = Obj.Offset(0, -1) '.Address
i = i + 1
.Range("A" & wAddress.Row & ":AS" & wAddress.Row).Copy Destination:=ws2.Range("A" & i)
Set Obj = .FindNext(Obj)
If Obj Is Nothing Then Exit Do
Loop Until Obj.Address = wA1
ListBox1.AddItem ""
ListBox1.List = ws2.Range("A1:AS" & i).Value
ws2.Range("A1:AS" & i).ClearContents
End With
End Sub
ご回答いただき、有難うございます!
別シートを使う発想がなかったので、助かりました。
しかし、B列の商品名以降の列をws2(Sheet5)のA列~AS列にセットしているようで、元データのA列の住所データが入りません。。
Set wAddress = Obj.Offset(0, -1) で住所を取得しているように思えますが・・・。

No.3
- 回答日時:
昨日の回答でもリストの行を増やす処理が抜けていました。
申し訳ありません。Dim i As Integer, j As Integer
'検索結果の最初のアドレスをセット
wA1 = Obj.Address
i = -1
Do
wAddress = Obj.Offset(0, -1).Address
i = i + 1
For j = 0 To 9 '44
ListBox1.AddItem ""
ListBox1.List(i, j) = .Range(wAddress).Offset(0, j)
Next j
'次の検索を行う
で10項目までは表示できました。
参考サイトなどで10項目以上をやってみようとしましたが、追加ができないようです。
必ず1行目になってしまいます、追加でやろうとするとエラーになります。
調べた範囲では、複数行で45項目を表示できているコードがありません。
引き続き時間があれば、調べてみますが、出来ないのかもしれませんね。

No.2
- 回答日時:
論理上はリストボックスのColumnCountを45にして
wA1 = Obj.Address
Do
wAddress = Obj.Offset(0, -1).Address
For i = 0 To 45
ListBox1.AddItem ""
ListBox1.List(0, i) = .Range(wAddress).Offset(0, i)
Next i
'次の検索を行う
Set Obj = .Cells.FindNext(Obj)
'最初にヒットしたアドレスと同じ場合は処理を終了
If Obj.Address = wA1 Then Exit Do
Loop
とすればいいはずなのですが、J列まで表示した時点でエラーになります。
10列以上はエラーになる事がわかりました。
表示項目を10に絞るか、下記サイトを参考にして表示してみて下さい。
http://www.excel-wing.com/study/jitumu/1090
フォーム上のリストボックスに45項目も表示する必要があるのでしょうか。
有難うございます!ご回答いただいたとおり、10列以上は表示されないことを確認しました。ご紹介いただいたサイトを参照し、45列表示できるようになりました!
しかし、テキストボックスで”いちご”と入力すると、検索結果の最終行である”いちごチョコ”1件しかリストボックスに表示されなくなってしまいました。。どうすれば"いちごミルク"、"いちご"、"いちごチョコ"が表示されるようになるでしょうか。。
No.1
- 回答日時:
>●のレコードがすべてListBox1に表示させたいです。
。A~ASまですべてを表示ですか。
取りあえず、A列のみで説明すれば
'検索結果セルの値を取得
wList = .Range(wAddress)
を
'検索結果セルの値を取得
wList = .Range(wAddress).Offset(0,-1).Value
とかで、一度試してみて下さい。
それと
Set Obj = .Cells.Find( _
What:=TextBox.Value, _
LookIn:=xlValues, _
LookAt:=xlPart, _
MatchByte:=False)
も
Set Obj = .Columns("B:B").Find( _
What:=TextBox.Value, _
LookIn:=xlValues, _
LookAt:=xlPart, _
MatchByte:=False)
で十分ではないでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Excel(エクセル) 指定文字列が該当するA列をアクティブセルにするには 3 2022/08/17 13:18
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) 追記する列を増やしたい 2つのデータを検索・照合して元データにないデータを下記マクロで商品名を追記し 9 2022/10/05 10:50
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルVBAリストボックスに表示された検索結果をクリックして、該当するセルをアクティブセルにしたい
Excel(エクセル)
-
エクセルVBA 複数列のリストボックス内を検索して値を複数列表示したい
Excel(エクセル)
-
Excel VBAのリストボックスの値を他のフォームに反映させる方法を教えてください。
Visual Basic(VBA)
-
-
4
EXCELのリストボックスを選択した行が何行目か
その他(プログラミング・Web制作)
-
5
VBA リストボックス(複数条件)で検索し、転記方法についてご教示ください。
Visual Basic(VBA)
-
6
VBA リストボックスをダブルクリックしデータを修正したいのですが…。
Visual Basic(VBA)
-
7
VBAの質問になります Userform内で
Visual Basic(VBA)
-
8
VBAでユーザーフォームを再表示させたい。
Excel(エクセル)
-
9
エクセルVBA ユーザーフォームのTextBoxを日付にしたい
Excel(エクセル)
-
10
VBAで空白行を削除する
Excel(エクセル)
-
11
エクセル VBA ユーザーフォーム リストボックスで選択した値をテキストボックスに自動表示
Visual Basic(VBA)
-
12
VBA フォームのテキストボックスにセルの値を表示させたいが改行していたら改行もあわせて表示させたい
Excel(エクセル)
-
13
【VBA】【ユーザーフォーム_ListBox】オートフィルタで絞りこんだ値だけを取り出したい
Visual Basic(VBA)
-
14
VBAで指定期間の範囲を抽出し、リストボックスに表示したいです。
Visual Basic(VBA)
-
15
【VBA】ユーザーフォーム リストボックスのヘッダー設定方法
Visual Basic(VBA)
-
16
ユーザーフォームのラベルに日付を表示させる方法があればお願いします。出来ればコード書いていただけると
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
煮物こんにゃくの冷凍保存について
-
7文字以上のフルーツをできるだ...
-
北海道では、見かけないもの
-
Excel MATCH関数で検索範囲内...
-
スーパーで買った1つ300円の梨...
-
スポンジケーキってどのくらい...
-
「であり」と「であって」の使...
-
梶井基次郎の檸檬
-
ラズベリーの種の抜き方を教え...
-
エクセルで数字を入力したら文...
-
いちごを1パック買ったのです...
-
ライム(果物)を漢字になおす...
-
教えてください!!
-
中黒「・」か読点「、」か?
-
さくらんぼに似ているが、さく...
-
10年前のにんにく漬け、食べて...
-
スイカは腐るとどんな味がしま...
-
土地を買おうと思っています 目...
-
excelで同日を除いて数えたい
-
10~20代に通じやすい和文通話表
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
煮物こんにゃくの冷凍保存について
-
7文字以上のフルーツをできるだ...
-
スポンジケーキってどのくらい...
-
中黒「・」か読点「、」か?
-
10年前のにんにく漬け、食べて...
-
「であり」と「であって」の使...
-
Excel MATCH関数で検索範囲内...
-
スーパーで買った1つ300円の梨...
-
ライム(果物)を漢字になおす...
-
いちごを1パック買ったのです...
-
EXCELでB1に指定文字が入った場...
-
筍の上の部分が緑色になってい...
-
北海道では、見かけないもの
-
ラズベリーの種の抜き方を教え...
-
しらたきと吐き気
-
エクセルで数字を入力したら文...
-
外はふわふわで(柔らかい)、...
-
ローリエって何のために入れる...
-
教えてください!!
-
離乳食にローリエ
おすすめ情報