2017-09-06 28 views
0

私は、複数の基準に基づいて検索ユーティリティを構築しようとしています。現在のコードは、1つの条件に基づいて検索を行うのに役立ちます。複数の条件でテーブルを検索する - VBA(Excel)

私はDESC、カテゴリー(部分的または完全な検索)に基づいて検索するために探しています

、価格(事業者のいずれかと例えば> 10、< 50すなわち)

以下は、私がしようとしているデータ例であります検索、私は、あまりにも期待される結果のシナリオが含まれている:

Sample output

完全なデータ
検索

SKU Desc Category Price 
1 Pen UTL 5 
2 Pie1 FOOD 15 
3 Pie2 FOOD 17 
4 Pie3 FOOD 25 
5 Pie4 FOOD 30 
6 Paper1 UTL 4 
7 Paper2 UTL 4.5 
8 Paper3 UTL 10 
9 Paper4 UTL 12 
10 Paper5 UTL 14 
11 Calculator1 UTL 50 
12 Calculator2 UTL 70 
13 Calculator3 UTL 90 

誰かの助けが大いにここに評価されるでしょう。私の実際のデータは20Kレコードまでに及ぶでしょう。

以下の現在のコードです:D17との結果がHで表示されます:ここで私は、データがA4で検索する必要がK

Option Explicit 

Sub finddata() 

Dim Catagoryname As String Dim finalrow As Integer Dim i As Integer 'row counter 

Sheets("Data").Range("H5:k17").ClearContents Catagoryname = Sheets("Data").Range("J2").Value finalrow = WorksheetFunction.CountA(Range("A:A")) 

For i = 5 To finalrow 
    If Cells(i, 3) = Catagoryname Then 
     Range(Cells(i, 1), Cells(i, 12)).Copy 
     Range("H100").End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats 
    End If Next i 

End Sub 

Data

+1

あなたにはどのようなコードがありますか? – Luuklag

+0

Excelのフィルタリングの問題は何ですか? – Moher

+0

Userformsを使用して、重複なしでDesc列を追加したComboboxを追加して、選択したdescを使用してDictionaryオブジェクトまたは.Findで検索するか、または単にフィルタリングすることができます – danieltakeshi

答えて

0

@Ashwinは、ここで少しルーチンです私は、11,000以上のレコードのリストにある部分的な名前を検索するために使用します。次に、カテゴリを自動フィルタリングしてリストを絞り込みます。結果は、結果の36の列すべてを表示する必要があるため、ブックの別のシートに掲載されます。追加の自動フィルタが必要な場合は、最後に追加してください。私は検索のために2つの入力ボックスを使用しています。あなたのニーズに合うようにコードを修正することができます。お役に立てれば。

Public Sub SearchForItem() 
    'SEARCH FOR SOMETHING AND OPTION TO SORT BY SOMETHING ELSE 
Dim lngLastRow As Long 
Dim lngRow As Long 
Dim strValue As String 
Dim lngRowOutput As Long 
Dim result As String 
Dim quest1 As String 


result = InputBox(prompt:="What ?", Title:="First Search Item") 
    If result = vbNullString Then 
     Exit Sub 
    Else 
' where does the data end in Sheet1 
    lngLastRow = Sheet2.UsedRange.Rows.Count 

    If lngLastRow = 1 Then Exit Sub ' no data 

' Clear down sheet2, assume we have column headings in row 1 we want to keep 
    Sheet7.Range("6:1048576").Clear 

lngRowOutput = 6 ' where are we going to write the values to in Sheet7 

For lngRow = 6 To lngLastRow 
    strValue = Sheet2.Cells(lngRow, 2).Value ' get value from column B 

    If InStr(1, strValue, result, vbTextCompare) > 0 Then ' can we find "First Search Item" in the text 
     Sheet2.Rows(lngRow).Copy 
     Sheet7.Rows(lngRowOutput).PasteSpecial 
     lngRowOutput = lngRowOutput + 1 
    End If 

Next lngRow 

End If 

    'Go to the results and decide whether to AutoFilter or not 
    Sheets("SResults").Select 
quest1 = MsgBox("Do you want to select a category ?", vbYesNo) 
    If quest1 = vbNo Then 
    Exit Sub 
    Else 
ActiveSheet.Range("$A$5:$AG$106").AutoFilter Field:=3, Criteria1:="=*" & InputBox("Operator to search for?") & "*" 
    End If 
End Sub 
関連する問題