■13321 / 12階層) |
Excel(エクセル) VBA入門:検索結果をリストボックスに表示する
|
□投稿者/ よねさん -(2018/10/23(Tue) 10:54:14)
| 氏名、住所、郵便番号、都道府県、電話番号、年齢をキーとした例です。
それぞれユーザーフォームにテキストボックスを追加しています。
'検索を実行します。部分一致検索を行っています。
Private Sub CommandButton1_Click()
Dim lastRow As Long
Dim myData, myData2(), myno
Dim i As Long, j As Long, cn As Long
Dim key1 As String, key2 As String, key3 As String, key4 As String, key5 As String, key6 As String
'氏名
If TextBox1.Value = "" Then key1 = "*" Else key1 = "*" & TextBox1.Value & "*"
'住所
If TextBox2.Value = "" Then key2 = "*" Else key2 = "*" & TextBox2.Value & "*"
'郵便番号
If TextBox3.Value = "" Then key3 = "*" Else key3 = "*" & TextBox3.Value & "*"
'都道府県
Dim ListNo As Long
ListNo = ComboBox1.ListIndex
If ListNo < 0 Then
key4 = "*"
Else
key4 = ComboBox1.List(ListNo)
End If
'電話番号
If TextBox4.Value = "" Then key5 = "*" Else key5 = "*" & TextBox4.Value & "*"
'年齢
If TextBox5.Value = "" Then key6 = "*" Else key6 = TextBox5.Value
'検索するデータを配列 myData に格納しています。
With Worksheets("Sheet1")
lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
myData = .Range(.Cells(1, 1), .Cells(Rows.Count, 11).End(xlUp)).Value
End With
'配列 myData の中で検索で一致したデータを配列 myData2 に格納しています。
ReDim myData2(1 To lastRow, 1 To 7)
For i = LBound(myData) To UBound(myData)
If myData(i, 2) Like key1 And myData(i, 7) Like key2 And myData(i, 5) Like key3 And myData(i, 6) Like key4 And myData(i, 11) Like key5 And myData(i, 10) Like key6 Then
cn = cn + 1
myData2(cn, 1) = myData(i, 1) '連番
myData2(cn, 2) = myData(i, 2) '氏名
myData2(cn, 3) = myData(i, 3) 'カタカナ
myData2(cn, 4) = myData(i, 5) '郵便番号
myData2(cn, 5) = myData(i, 7) '住所
myData2(cn, 6) = myData(i, 11) '電話番号
myData2(cn, 7) = myData(i, 10) '年齢
End If
Next i
'検索で一致したデータをリストボックスに表示します。
With ListBox1
.ColumnCount = 7
.ColumnWidths = "20;70;70;30;150;70;30"
.List = myData2
End With
End Sub
|
|