2013-04-11 2 views
0

У меня есть Sheet2 с данными (названиями продуктов) в алфавитном порядке отсортированы по столбцу с 26 столбцами плюс один столбец для числовых данных. На Sheet1 есть список из почти 10 000 наименований продуктов, которые должны быть проверены, есть ли у нас их на Sheet2 или нет. Чтобы искать одно имя одновременно, это вопрос увлеченности, поэтому я подумал, можем ли мы проводить массовые поисковые данные в Sheet1, а рядом с каждой ячейкой будет показан результат поиска с адресом ячейки, где этот продукт находится в Sheet2, или не найдено, такие как:Excel несколько строк поиск

SEARCH STRINGS SEARCH RESULT 

Vodafone   A4 
Mirinda   C105 
Coca-Cola   Y59 
HeroHonda   not found 
Bournvita   S27 
Maggi    not found 

Я сделал некоторый поиск, чтобы найти подобный код для того, что нужно выше, и нашел следующий код: http://www.excelforum.com/excel-programming-vba-macros/714965-search.html, который делает поиск одной строки. Можно ли изменить этот сценарий, чтобы получить желаемые результаты?

Sub DataSearch() 
Dim Data() As Variant 
Dim DstWks As Worksheet 
Dim Food As String 
Dim N As Variant 
Dim R As Long 
Dim Rng As Range 
Dim RngEnd As Range 
Dim SrcWks As Worksheet 

Set SrcWks = Worksheets("Test 2") 
Set DstWks = Worksheets("Test1") 

R = 6 
Food = DstWks.Range("E3") 
N = DstWks.Range("E4") 

    If DstWks.Range("C6") <> "" Then 
    DstWks.Range("C6").CurrentRegion.Offset(0, 1).ClearContents 
    End If 

    Set Rng = SrcWks.Range("A4:E4") 
    Set RngEnd = SrcWks.Cells(Rows.Count, Rng.Column).End(xlUp) 
    Set Rng = IIf(RngEnd.Row < Rng.Row, Rng, SrcWks.Range(Rng, RngEnd)) 

    ReDim Data(1 To Rng.Rows.Count, 1 To Rng.Columns.Count) 
    Data = Rng.Value 

    For I = 1 To UBound(Data, 1) 
     If Data(I, 1) = N And InStr(1, Data(I, 3), Food, vbTextCompare) > 0 Then 
     DstWks.Cells(R, "C").Resize(1, Rng.Columns.Count) = Rng.Rows(I).Value 
     R = R + 1 
     End If 
    Next I 

End Sub 

Всегда признателен за вашу неоценимую помощь.

+0

terry добро пожаловать в StackOverflow :) проверьте этот [post out.] (Http://stackoverflow.com/questions/14578474/copy-to-various-columns-based-on-cell-contents/14584298#14584298) Как упоминалось , итерации поиска через большие диапазоны данных могут привести к огромному снижению производительности. Вы можете включить * wildcard * метод и попробовать. Я поддерживаю массивы здесь. – bonCodigo

ответ

0

Я бы использовал что-то быстрое и грязное, например hlookup, и посмотрел, возвращает ли оно значение, чтобы определить, находится ли оно в 10 000 продуктах.

например. Если предположить, что в листе 2, ваши данные находятся в сохраняются таким образом, что:
- Каждая запись продукта в колонке
- Различные продукты находятся в разных колонках
- Название продукта находится в строке 1, начиная с A1
Также предполагая, что в листе 1,
- названия продуктов в колонке а, начиная с A1
- Там нет других данных в листе

в листе 1, поместить следующую формулу в B2 (и впоследствии копировать это все путь к B10001): =IF(ISNA(HLOOKUP(A1,Sheet2!$A$1:$Z$1,1)),"not found",ADDRESS(1,MATCH(A1,Sheet2!$A$1:$Z$1,0),1))

+0

Большое спасибо OC2PS за ваше практическое решение, которое, я считаю, будет работать, если мы посчитаем, что первая строка - это заголовки столбцов, которые являются алфавитами A-Z, а столбец 27 - NUM. Каждый столбец - это просто названия продуктов, которые начинаются со своего письма, поэтому весь Sheet2 - это просто имена продуктов. Будут ли эти данные влиять на формулу выше? Очень ценится .. – terry

+0

Я не думаю, что это повлияет на формулу. Имена строк и столбцов, определенные в Excel, остаются теми же, независимо от того, хотите ли вы показать их на листе. Эти значения можно по-прежнему ссылаться на ячейку. – OC2PS

+0

Есть ли способ расширить диапазон поиска от (A1, Sheet2! $ A $ 1: $ Z $ 1,1) до (A1, Sheet2! $ A $ 1: $ AA $ 5000,1), чтобы включить все названия продуктов в процедуре поиска? Я попробовал, но не работал, наверняка это HLOOKUP. Если бы мы не смогли расширить диапазон поиска, есть ли другой способ сделать это? Очень признателен. – terry

Смежные вопросы