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も見ています
-
見学に行くとしたら【天国】と【地獄】どっち?
みなさんは、一度だけ見学に行けるとしたら【天国】と【地獄】どちらに行きたいですか? 理由も聞きたいです。
-
【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
【お題】・忍者がやってるYouTubeが炎上してしまった理由
-
最強の防寒、あったか術を教えてください!
とっても寒がりなのですが、冬に皆さんがされている最強の防寒、あったか術が知りたいです!
-
【選手権お題その3】この画像で一言【大喜利】
とあるワンシーンを切り取った画像。この画像で一言、お願いします!
-
今から楽しみな予定はありますか?
いよいよ2025年が始まりました。皆さんには、今から楽しみにしている予定はありますか?
-
エクセルVBAリストボックスに表示された検索結果をクリックして、該当するセルをアクティブセルにしたい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
煮物こんにゃくの冷凍保存について
-
ライム(果物)を漢字になおす...
-
7文字以上のフルーツをできるだ...
-
「であり」と「であって」の使...
-
北海道では、見かけないもの
-
ふにゃふにゃになったキウイっ...
-
スポンジケーキってどのくらい...
-
切ったら梨の真ん中が茶色黒く...
-
ハーブソルトを代用できるもの...
-
中黒「・」か読点「、」か?
-
イチゴのへたの取り方
-
唐辛子売りに来たお婆さんがい...
-
外はふわふわで(柔らかい)、...
-
野菜の煮込み料理で野菜の臭み...
-
パイナップルにたかる虫
-
宅配ピザのおまけで付いてくる...
-
レーズンの洋酒漬けを作る時気...
-
スルメを食べた後にみかんを食...
-
変ですか?リンゴの音がダメ...
-
エクセル 同名の場合はB列にC...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スポンジケーキってどのくらい...
-
煮物こんにゃくの冷凍保存について
-
7文字以上のフルーツをできるだ...
-
Excel MATCH関数で検索範囲内...
-
切ったら梨の真ん中が茶色黒く...
-
中黒「・」か読点「、」か?
-
洋ナシをお弁当に入れたいので...
-
教えてください!!
-
北海道では、見かけないもの
-
「であり」と「であって」の使...
-
ふにゃふにゃになったキウイっ...
-
ハーブソルトを代用できるもの...
-
スーパーで買った1つ300円の梨...
-
ライム(果物)を漢字になおす...
-
離乳食にローリエ
-
EXCELでB1に指定文字が入った場...
-
エクセルで数字を入力したら文...
-
スルメを食べた後にみかんを食...
-
サフランの賞味期限
-
ガーデンサラダとはどういうサ...
おすすめ情報