Страницы: 1
RSS
Поиск совпадений по всей таблице и вывод через запятую значение крайнего левого столбца
 
Друзья, нужна ваша помощь.  
 
Имеем таблицу в которой более 12k записей, и 32 столбца(в кот. ищем). В крайнем левом, находится значение которое необходимо искать по всей таблице и в случае совпадения в какой нибудь из строк, вывести через запятую все совпадения для каждой записи, подробности, попытался описать в файле на примере.  
 
Спасибо-пожалуйста.
 
Ну, вы бы хоть для первых двух значений "Искомого" ручками (Ctrl+F) нашли и заполнили Result...  
Вчитывался в ваше "пояснение" в примечании к файлу несколько минут:  
"В это поле нужно вывести результат поиска для искомого числа 62324. т.е. нужно пройти циклом всю таблицу H2:AM35 и для каждого найденного 62324 вывести через запятую (например) значение столбца "Искомое" по строке в которой было найдено совпадение с 62324 и так для каждой строки. Соотв. для каждой строки свое значение "Искомого"  
Так ничего и не понял... :-(  
Найти-то в табличке ячейки, совпадающие со значениями в первом столбце ("Искомое") - не проблема, а вот что с ними дальше делать - не понятно...  
И к стати, почему вы в примечании говорите, что искать нужно в H2:AM35, а данные в таблице расположены в С2:AН35?
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
http://www.planetaexcel.ru/forum.php?thread_id=18064 <BR>Это решение не подходит? Что-то я тоже задачу не вполне понял, чисто интуитивно предполагаю...
 
Только на такой объём не формулу брать, что в начале, а макрос из конца :)
 
Можно формулу проапгрейдить :) - добавить цикл по массиву выбранных колонок.  
На примере будет работать, но на 12к будет тормозить нереально, тут только макрос переделывать.  
Всё интуитивно, если правильно задачу понял...
 
Можно использовать существующую формулу, только заменить "=" на "Like", а всю таблицу слить построчно в одну колонку через разделитель.  
По крайней мере в B19 работает  
=PERSONAL.XLS!VLOOKUPCOUPLE($A$2:$M$35;4;A19;1;", ")  
поиск по 4 колонке - не хватает всё слить в 4-ую колонку и Like...
 
Вот, если слить всю таблицу в один столбец, то можно этой формулой вытягивать  
 
Function VLOOKUPCOUPLELIKE(Table As Variant, SearchColumnNum As Integer, SearchValue As Variant, _  
                                       RezultColumnNum As Integer, Separator_ As String)  
 
Dim i As Long  
 
Select Case TypeName(Table)  
Case "Range"  
   For i = 1 To Table.Rows.Count  
           If Table.Cells(i, SearchColumnNum) Like "*" & SearchValue & "*" Then  
           If VLOOKUPCOUPLELIKE <> "" Then  
               VLOOKUPCOUPLELIKE = VLOOKUPCOUPLELIKE & Separator_ & Table.Cells(i, RezultColumnNum)  
           Else  
           VLOOKUPCOUPLELIKE = Table.Cells(i, RezultColumnNum)  
           End If  
           End If  
       Next i  
Case "Variant()"  
For i = 1 To UBound(Table)  
If Table(i, SearchColumnNum) Like "*" & SearchValue & "*" Then  
           If VLOOKUPCOUPLELIKE <> "" Then  
               VLOOKUPCOUPLELIKE = VLOOKUPCOUPLELIKE & Separator_ & Table(i, RezultColumnNum)  
           Else  
           VLOOKUPCOUPLELIKE = Table(i, RezultColumnNum)  
           End If  
End If  
Next i  
         
End Select  
       If VLOOKUPCOUPLELIKE = 0 Then VLOOKUPCOUPLELIKE = ""  
End Function
 
Ой, сейчас попробую все советы. Спасибо что откликнулись.
 
Да, простите, ошибся. Искать нужно действительно в диапазоне С2:AН35, а совпадения выводить в столбец Result через напятую. Т.е. например для 62326, в поле Result будет это: 62324, 62325, 62323  
 
 
{quote}{login=Alex_ST}{date=12.08.2010 01:21}{thema=}{post}Ну, вы бы хоть для первых двух значений "Искомого" ручками (Ctrl+F) нашли и заполнили Result...  
Вчитывался в ваше "пояснение" в примечании к файлу несколько минут:  
"В это поле нужно вывести результат поиска для искомого числа 62324. т.е. нужно пройти циклом всю таблицу H2:AM35 и для каждого найденного 62324 вывести через запятую (например) значение столбца "Искомое" по строке в которой было найдено совпадение с 62324 и так для каждой строки. Соотв. для каждой строки свое значение "Искомого"  
Так ничего и не понял... :-(  
Найти-то в табличке ячейки, совпадающие со значениями в первом столбце ("Искомое") - не проблема, а вот что с ними дальше делать - не понятно...  
И к стати, почему вы в примечании говорите, что искать нужно в H2:AM35, а данные в таблице расположены в С2:AН35?{/post}{/quote}
 
В модуле листа запустите:  
Sub for_SemX()  
  Dim iCell As Range, iRow%, Result$, Delim$  
  Delim = ", "  
  For iRow = 2 To 35  
     Result = ""  
     For Each iCell In Range("C2:AH35")  
        If iCell.Value = Cells(iRow, 1).Value And iCell.Row <> iRow Then  
           If Result = "" Then  
              Result = Cells(iCell.Row, 1).Value  
           Else  
              Result = Result & Delim & Cells(iCell.Row, 1).Value  
           End If  
        End If  
     Next iCell  
     Cells(iRow, 2).Value = Result  
  Next iRow  
End Sub  
 
 
 
Вау!  
Капча 49994
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
34 строки считает 0,5 сек.  
Сколько будет считать 12к?
 
Ну, не знаю, насколько часто эту операцию топик-стартеру нужно повторять...  
Если редко, то можно и подождать, покурить...  
А если нужна скорость, то можно сначала диапазон в массив перекинуть. Во много раз быстрее будет...  
Но тут уже подумать надо, а у меня работа по работе появилась срочная...
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Да, 3 минуты ждать на каждый чих... Поэтому и нужно код по ссылке взять и переделать - менее секунды будет.
 
Про чих не читать - это ведь не формула...
 
Вот это СПАСИБИЩЕ!!!! Просто, то что нужно.    
Где плюсануть вам карму не нашел, но полагаю там и так все хорошо.  
 
Спасибо всем.  
 
{quote}{login=Alex_ST}{date=12.08.2010 02:59}{thema=}{post}В модуле листа запустите:  
Sub for_SemX()  
  Dim iCell As Range, iRow%, Result$, Delim$  
  Delim = ", "  
  For iRow = 2 To 35  
     Result = ""  
     For Each iCell In Range("C2:AH35")  
        If iCell.Value = Cells(iRow, 1).Value And iCell.Row <> iRow Then  
           If Result = "" Then  
              Result = Cells(iCell.Row, 1).Value  
           Else  
              Result = Result & Delim & Cells(iCell.Row, 1).Value  
           End If  
        End If  
     Next iCell  
     Cells(iRow, 2).Value = Result  
  Next iRow  
End Sub  
 
 
 
Вау!  
Капча 49994{/post}{/quote}
Страницы: 1
Читают тему
Наверх