|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
26.10.2010, 21:05 | #1 |
Регистрация: 26.10.2010
Сообщений: 5
|
VBA: как определить содержится ли в массиве данное значение
Коллеги, помогите оптимизировать макрос.
Использую часто повторяющуюся операцию: ищу среди ячеек одной колонки листа совпадающее значение. Сейчас использую цикл Do While или комбинацию While Wend + If Then с перебором всех ячеек с помощью Cells (i, k): While i <= dataRows If CLng(.Cells(i, 9).Value) = EDR Then Worksheets("Customers").Cells(k, 2).Value = .Cells(i, 11).Value i = dataRows End If i = i + 1 Wend Но подозреваю, что существует более оптимальный путь. Например, сформировать одномерный массив из значений колонки и затем с помощью какой-то функции (какой?) определить номер ячейки, совпадающей с заданным значением. Есть идеи? Последний раз редактировалось Rimida; 26.10.2010 в 21:13. |
26.10.2010, 23:56 | #2 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
В массиве можно найти соответствие с помощью Match, но совсем недавно, вроде даже на этом форуме, мы выяснили, что простым перебором массива не только быстрее, но и надёжнее получить результат.
Вот, нашёл: http://www.programmersforum.ru/showt...F1%F2%F0%E5%E5 Вообще поиск по листу можно делать с помощью Find - это быстрее, чем перебор ячеек. Код:
Код:
webmoney: E265281470651 Z422237915069 R418926282008
Последний раз редактировалось Hugo121; 27.10.2010 в 00:10. |
27.10.2010, 14:28 | #3 |
Регистрация: 26.10.2010
Сообщений: 5
|
Супер! За метод Find спасибо. Действительно получается быстрее. Ищу ячейку с нужными данными, определяю номер ее строки и провожу необходимые действия с другими ячейками данной строки.
|
27.10.2010, 18:21 | #4 | |
Регистрация: 26.10.2010
Сообщений: 5
|
Блин, Find не работает :-(
Не могу понять причину. Цитата:
|
|
27.10.2010, 18:29 | #5 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Добавьте в параметры частичный поиск xlPart - может пробелы мешают.
Вручную через поиск находит это значение?
webmoney: E265281470651 Z422237915069 R418926282008
|
27.10.2010, 19:13 | #6 |
Регистрация: 26.10.2010
Сообщений: 5
|
xlPart не помогает
вручную - находит! что обидно - сначала в режиме тестирования все заработало, а потом вдруг перестало, причину найти не могу Последний раз редактировалось Rimida; 27.10.2010 в 19:17. |
27.10.2010, 21:48 | #7 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Код рабочий (если убрать два закравшихся пробела), я проверил.
Без примера с ошибкой больше сказать нечего.
webmoney: E265281470651 Z422237915069 R418926282008
|
28.10.2010, 14:06 | #8 |
Регистрация: 26.10.2010
Сообщений: 5
|
Может быть проблема в формате данных? На текстовых данных все работает. С числовыми - нет.
ОК, если можно еще вопрос по оптимизации. Теоретически работа с массивом данных проходит быстрее, чем постоянное обращение к ячейкам листа. Соответственно, можно скопировать нужный мне диапазон листа в массив, обработать его, а затем записать обратно. Вопрос: как это сделать эффективнее? Что-то я не могу найти нужный оператор/функцию. |
28.10.2010, 14:19 | #9 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
В А1:А3 цифры.
Код:
[b1:b3].Value = a или [b1:b3] = a или, чтоб понять суть: [b1].Resize(3, 1) = a
webmoney: E265281470651 Z422237915069 R418926282008
Последний раз редактировалось Hugo121; 28.10.2010 в 14:22. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Выборка записей в поле которых содержится значение nuul | Lokos | БД в Delphi | 1 | 05.08.2010 08:23 |
Значение содержится в массиве | kipish_lp | Microsoft Office Excel | 4 | 19.06.2010 11:31 |
проверить, содержится ли строка в массиве | aurora_87 | Общие вопросы C/C++ | 6 | 28.12.2008 01:25 |
Определить является ли данное число совершенным.. Паскаль. | Karabas | Помощь студентам | 6 | 23.12.2008 21:53 |
Как определить значение по графику? | leonid | Microsoft Office Excel | 4 | 27.05.2008 08:48 |