Как найти определенную строку.
Модератор: Naeel Maqsudov
-
- Сообщения: 230
- Зарегистрирован: 31 авг 2006, 13:11
Вот такая проблема:
Есть строка на определенном листе (строка в смысле экселевская (Row))
допустим row=1 т.е первая строка на листе.
как ее можно найти на другом листе.
количество столбцов в строке неизвестно.
Есть строка на определенном листе (строка в смысле экселевская (Row))
допустим row=1 т.е первая строка на листе.
как ее можно найти на другом листе.
количество столбцов в строке неизвестно.
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
тупо искать поячеечно... нашёл первую, смотришь дальше, не совпадает, опять с первой

-
- Сообщения: 230
- Зарегистрирован: 31 авг 2006, 13:11
Тупо нельзя (или можно сказать не желательно). Данных много.
Как это сделать с помощью .UsedRange.Find если это возможно
Как это сделать с помощью .UsedRange.Find если это возможно
Есть несколько вариантов:
1. Использовать список (на "другом" листе сделать список, отфильтровать по критериям "определенного" листа и посмотреть, что осталось)
2. СЦЕПИТЬ все ячейки на одном и другом листах и поиск вести по ним
3. ...
1. Использовать список (на "другом" листе сделать список, отфильтровать по критериям "определенного" листа и посмотреть, что осталось)
2. СЦЕПИТЬ все ячейки на одном и другом листах и поиск вести по ним
3. ...
- Aent
- Сообщения: 1129
- Зарегистрирован: 01 окт 2006, 14:52
- Откуда: Saratov,Russia
- Контактная информация:
А что если в момент формирования вашего листа считать в отдельной колонке некую хэш функцию. Например CRC32 по строке,
представляюшей собой сцепленное строковое представление всех ячеек вашей строки? То же делаем для каждого листа при
его изменении. Будут некоторые затраты времени на вычисление значения хэш функции, зато поиск будет очень быстрым.
Делал подобное с базой накладных около 50000. Поиск работал очень быстро ...
представляюшей собой сцепленное строковое представление всех ячеек вашей строки? То же делаем для каждого листа при
его изменении. Будут некоторые затраты времени на вычисление значения хэш функции, зато поиск будет очень быстрым.
Делал подобное с базой накладных около 50000. Поиск работал очень быстро ...
Андрей Энтелис,
aentelis.livejournal.com
aentelis.livejournal.com
-
- Сообщения: 230
- Зарегистрирован: 31 авг 2006, 13:11
Aent,
Спасибо это уже кое что. Буду думать.
Есть у кого-то еще какие-нибудь идеи?
Спасибо это уже кое что. Буду думать.
Есть у кого-то еще какие-нибудь идеи?
Aent, а обычный поиск Экселя медленнее?
- Aent
- Сообщения: 1129
- Зарегистрирован: 01 окт 2006, 14:52
- Откуда: Saratov,Russia
- Контактная информация:
Sokl, а как обычным поиском искать сразу по 10 колонкам ? А если просто сцеплять все требуемые ячейки строки, то во первых
файл пухнен ощутимо сильнее, а во вторых поиск при большом количестве строк существенно медленее. И автофильтр по всем колонкам,
если ты его имел в виду, то же медленее. Cпециально правда не мерял - говорю об ощущениях "на глаз".
файл пухнен ощутимо сильнее, а во вторых поиск при большом количестве строк существенно медленее. И автофильтр по всем колонкам,
если ты его имел в виду, то же медленее. Cпециально правда не мерял - говорю об ощущениях "на глаз".
Андрей Энтелис,
aentelis.livejournal.com
aentelis.livejournal.com
Попробуйте это (решение через автофильтр):
Код: Выделить всё
Sub FindRows()
'процедура выберет все строки в листе 2, совпадающие по значениям с текущей строкой в листе 1
'первая строка листа 2 - должны быть заголовки таблицы - не обрабатываются
'всегда проверяются все поля листа 2, даже если в строке листа 1 другое количество колонок.
Dim cc As Range
If Not Sheets(2).AutoFilterMode Then Sheets(2).UsedRange.Columns.EntireColumn.AutoFilter
For Each cc In Selection.Cells(1, 1).Resize(1, Sheets(2).AutoFilter.Range.Columns.Count)
Sheets(2).Cells(1, 1).AutoFilter Field:=cc.Column, Criteria1:=cc.Value
Next
i = WorksheetFunction.Subtotal(3, Sheets(2).UsedRange.Columns(1)) - 1
MsgBox "Найдено: " & i & " строк"
If i > 0 Then Sheets(2).Activate
End Sub
Всякое решение плодит новые проблемы.