[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『検索結果をリストボックスに表示』(あや)
ユーザーフォームで完全一致の検索結果をリストボックスに表示させたいのですが、以下のコードを実行してもリストボックスには何も表示されません。
どうか助けてくださいm(_ _)m
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Private Sub commandbutton1_Click() Dim lastrow As Long Dim myData, myData2(), myNo Dim i As Long, j As Long, cn As Long
If TextBox1.Value = "" Or TextBox2.Value = "" Then End
With Worksheets("Sheet1") lastrow = .Cells(Rows.Count, 1).End(xlUp).Row myData = .Range(.Cells(2, 1), .Cells(lastrow, 50)).Value End With
ReDim myData2(1 To lastrow, 1 To 50) For i = LBound(myData) To UBound(myData) If myData(i, 21) = textbox1.Value And myData(i, 22) = textbox2.Value Then cn = cn + 1 myData2(cn, 1) = myData(i, 1) myData2(cn, 2) = myData(i, 20) myData2(cn, 3) = myData(i, 21) myData2(cn, 4) = myData(i, 22) myData2(cn, 5) = myData(i, 23) myData2(cn, 6) = myData(i, 4) myData2(cn, 7) = myData(i, 49) myData2(cn, 8) = myData(i, 50) myData2(cn, 9) = myData(i, 13) myData2(cn, 10) = myData(i, 14) myData2(cn, 11) = myData(i, 15) myData2(cn, 12) = myData(i, 16) myData2(cn, 13) = myData(i, 17) End If Next i With listbox1 .ColumnCount = 13 .ColumnWidths = "50;40;20;20;20;150;150;100;50;30;20;30;80" .List = myData2 End With End Sub
< 使用 Excel:Excel2010、使用 OS:Windows7 >
動かしていないですけど、
このステートメントは正しいですか?(すぐ終わっちゃうような気がするんですけど) ↓ > If TextBox1.Value = "" Or TextBox2.Value = "" Then End
(半平太) 2018/12/04(火) 11:26
よくやる手ですが、List/Combo Box には Listの他に Column Propertyがあります。 myData2の行列を逆にしてColumn Propertyにセットしてやる方がすんなり行く気がします。
Private Sub commandbutton1_Click() Dim lastrow As Long Dim myData, myData2(), myNo Dim i As Long, ii As Long, cn As Long, myCols If TextBox1.Value = "" Or TextBox2.Value = "" Then End With Worksheets("Sheet1") lastrow = .Cells(Rows.Count, 1).End(xlUp).Row myData = .Range(.Cells(2, 1), .Cells(lastrow, 50)).Value End With myCols = Array(1, 20, 21, 22, 23, 4, 49, 50, 13, 14, 15, 16, 17) ReDim myData2(1 To UBound(myCols) + 1, 1 To lastrow) For i = LBound(myData) To UBound(myData) If myData(i, 21) = TextBox1.Value And myData(i, 22) = TextBox2.Value Then cn = cn + 1 For ii = 0 To UBound(myCols) myData2(ii + 1, cn) = myData(i, myCols(ii)) Next End If Next i With ListBox1 .Clear If cn = 0 Then Exit Sub ReDim Preserve myData2(1 To UBound(myCols) + 1, 1 To cn) '<--追加 .ColumnCount = 13 .ColumnWidths = "50;40;20;20;20;150;150;100;50;30;20;30;80" .Column = myData2 End With End Sub
(seiya) 2018/12/04(火) 11:48
一行追加
21列目か22列目には数字が入っていませんか? 例えばTextBox2に「10」と入っていたとして
TextBox2.Value は "10" になります。 もしシート上にあるのが数値なら Val(TextBox2) とすればちゃんと拾えます。
見当違いだったらすみません。
あと、21列目と22列目にTextBox1とTextBox2の値でフィルタをかけてから 配列に入れるのも手だと思いますよ。
(TAKA) 2018/12/04(火) 12:05
Private Sub commandbutton1_Click() Dim lastrow As Long Dim myData, myData2(), myNo Dim i As Long, j As Long, cn As Long If TextBox1.Value = "" Or TextBox2.Value = "" Then End With Worksheets("Sheet1") lastrow = .Cells(.Rows.Count, 1).End(xlUp).Row myData = .Range(.Cells(2, 1), .Cells(lastrow, 50)).Value End With ReDim myData2(1 To lastrow, 1 To 50) For i = LBound(myData) To UBound(myData) If myData(i, 21) = TextBox1.Value And myData(i, 22) = Val(TextBox2) Then cn = cn + 1 myData2(cn, 1) = myData(i, 1) myData2(cn, 2) = myData(i, 20) myData2(cn, 3) = myData(i, 21) myData2(cn, 4) = myData(i, 22) myData2(cn, 5) = myData(i, 23) myData2(cn, 6) = myData(i, 4) myData2(cn, 7) = myData(i, 49) myData2(cn, 8) = myData(i, 50) myData2(cn, 9) = myData(i, 13) myData2(cn, 10) = myData(i, 14) myData2(cn, 11) = myData(i, 15) myData2(cn, 12) = myData(i, 16) myData2(cn, 13) = myData(i, 17) End If Next i With ListBox1 .ColumnCount = 13 .ColumnWidths = "50;40;20;20;20;150;150;100;50;30;20;30;80" .List = myData2 End With End Sub
正常に表示されます
(TAKA) 2018/12/04(火) 12:06
数値・文字列関係なくで
1) 元コード編集案 Private Sub commandbutton1_Click() Dim lastrow As Long Dim myData, myData2(), myNo Dim i As Long, ii As Long, cn As Long, myCols If TextBox1.Value = "" Or TextBox2.Value = "" Then End With Worksheets("Sheet1") lastrow = .Cells(Rows.Count, 1).End(xlUp).Row myData = .Range(.Cells(2, 1), .Cells(lastrow, 50)).Value End With myCols = Array(1, 20, 21, 22, 23, 4, 49, 50, 13, 14, 15, 16, 17) ReDim myData2(1 To UBound(myCols) + 1, 1 To lastrow) For i = LBound(myData) To UBound(myData) If CStr(myData(i, 21)) = TextBox1.Value And CStr(myData(i, 22)) = TextBox2.Value Then cn = cn + 1 For ii = 0 To UBound(myCols) myData2(ii + 1, cn) = myData(i, myCols(ii)) Next End If Next i With ListBox1 .Clear If cn = 0 Then Exit Sub ReDim Preserve myData2(1 To UBound(myCols) + 1, 1 To cn) '<--追加 .ColumnCount = 13 .ColumnWidths = "50;40;20;20;20;150;150;100;50;30;20;30;80" .Column = myData2 End With End Sub
2) 全くの別案
Private Sub commandbutton1_Click() Dim a, x, y, myCols If TextBox1.Value = "" Or TextBox2.Value = "" Then Exit Sub x = Me.TextBox1.Value: y = Me.TextBox2.Value If Not IsNumeric(x) Then x = Chr(34) & x & Chr(34) If Not IsNumeric(y) Then y = Chr(34) & y & Chr(34) With Worksheets("Sheet1").Cells(1).CurrentRegion x = Filter(.Parent.Evaluate("transpose(if((" & .Columns(21).Address & "=" & x & ")*(" & _ .Columns(22).Address & "=" & y & "),row(1:" & .Rows.Count & ")))"), False, 0) If UBound(x) = -1 Then Exit Sub myCols = Array(1, 20, 21, 22, 23, 4, 49, 50, 13, 14, 15, 16, 17) a = Application.Index(.Value, Application.Transpose(x), myCols) End With With ListBox1 .ColumnCount = 13 .ColumnWidths = "50;40;20;20;20;150;150;100;50;30;20;30;80" If UBound(x) = 0 Then .Column = a Else .List = a End If End With End Sub
(seiya) 2018/12/04(火) 12:31
seiyaさんのように、セルの値の方を文字列に変換してもokですね。 (TAKA) 2018/12/04(火) 13:19
>seiyaさん
>TAKAさん
textbox1,textbox2とも主に数値が入るのですが、
seiyaさんの元コード編集案で想定通りに表示されました。
ありがとうございました。
本当に助かりました。
(あや) 2018/12/04(火) 16:54
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.