Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Поиск адреса последнего и предпоследнего значения в таблице - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Поиск адреса последнего и предпоследнего значения в таблице
mrdc Дата: Воскресенье, 19.10.2014, 20:52 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 40% ±

Excel 2010
Всем привет! Столкнулся с проблемой низкой производительности в Excel при большом количестве строк с использованием моего метода поиска последнего и предпоследнего значения в массиве данных.

Описание таблицы с данными (упрощенно):
столбцы:
A - наименование
B - значение

Наименования периодически повторяются, но при этом они добавляются в конец текущих записей из внешнего источника без пересортировки.
Было необходимо найти адреса последнего и предпоследнего значения одного наименования:
ННН - 83043
ААА - 12345
БББ - 23456
ВВВ - 84548
ААА - 93030
В данном случае адрес последнего значения ААА - столбец А,строка 5, а предпоследнее - столбец А,строка 2.
Решено было вот так: отдельный столбец для каждого наименования (заголовок - наименование из столбца А), потом делался СЧЁТЕСЛИ(A:A;$C$2) для наименования ННН, СЧЁТЕСЛИ(A:A;$D$2) для наименования ААА и т.д. Потом =ЕСЛИ(А2=$С$2;МИН($C$3:C4)-1;"") "протягивался" для всех строк в столбце С (для наименования ННН) и напоследок =ПОИСКПОЗ(1;C:C;0) и =ПОИСКПОЗ(2;C:C;0) - в таком случае находится последнее и предпоследнее значение для ННН, адрес узнаем при помощи =АДРЕС(). Все работает, но если мало строк - добавили (10-20 тыс строк) - excel зависает и приходится вручную добавлять столбцы для новых наименований, поэтому возникла необходимость оптимизировать для большого количества строк (сотни тысяч) и уникальных наименований - до 1000.
В идеале было бы хорошо добавлять данные в БД (SQL), а в excel уже просто анализировать эти данные из БД, но пока будет храниться в excel для упрощения конструкции и ускорения внедрения.
[moder]Нужен пример
К сообщению приложен файл: 4861355.xlsx (27.0 Kb)


Сообщение отредактировал mrdc - Понедельник, 20.10.2014, 10:36
 
Ответить
СообщениеВсем привет! Столкнулся с проблемой низкой производительности в Excel при большом количестве строк с использованием моего метода поиска последнего и предпоследнего значения в массиве данных.

Описание таблицы с данными (упрощенно):
столбцы:
A - наименование
B - значение

Наименования периодически повторяются, но при этом они добавляются в конец текущих записей из внешнего источника без пересортировки.
Было необходимо найти адреса последнего и предпоследнего значения одного наименования:
ННН - 83043
ААА - 12345
БББ - 23456
ВВВ - 84548
ААА - 93030
В данном случае адрес последнего значения ААА - столбец А,строка 5, а предпоследнее - столбец А,строка 2.
Решено было вот так: отдельный столбец для каждого наименования (заголовок - наименование из столбца А), потом делался СЧЁТЕСЛИ(A:A;$C$2) для наименования ННН, СЧЁТЕСЛИ(A:A;$D$2) для наименования ААА и т.д. Потом =ЕСЛИ(А2=$С$2;МИН($C$3:C4)-1;"") "протягивался" для всех строк в столбце С (для наименования ННН) и напоследок =ПОИСКПОЗ(1;C:C;0) и =ПОИСКПОЗ(2;C:C;0) - в таком случае находится последнее и предпоследнее значение для ННН, адрес узнаем при помощи =АДРЕС(). Все работает, но если мало строк - добавили (10-20 тыс строк) - excel зависает и приходится вручную добавлять столбцы для новых наименований, поэтому возникла необходимость оптимизировать для большого количества строк (сотни тысяч) и уникальных наименований - до 1000.
В идеале было бы хорошо добавлять данные в БД (SQL), а в excel уже просто анализировать эти данные из БД, но пока будет храниться в excel для упрощения конструкции и ускорения внедрения.
[moder]Нужен пример

Автор - mrdc
Дата добавления - 19.10.2014 в 20:52
Nic70y Дата: Воскресенье, 19.10.2014, 20:56 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 8984
Репутация: 2359 ±
Замечаний: 0% ±

Excel 2010
давайте файл-пример, 20 тыс не надо и 20 хватит.


ЮMoney 41001841029809
 
Ответить
Сообщениедавайте файл-пример, 20 тыс не надо и 20 хватит.

Автор - Nic70y
Дата добавления - 19.10.2014 в 20:56
gling Дата: Воскресенье, 19.10.2014, 22:50 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2557
Репутация: 695 ±
Замечаний: 0% ±

2010
Здравствуйте. Без Вашего файла-примера могу предложить вариант. Не знаю как будет работать с большим объемом данных.
К сообщению приложен файл: mrdc.xlsx (21.0 Kb)


ЯД-41001506838083
 
Ответить
СообщениеЗдравствуйте. Без Вашего файла-примера могу предложить вариант. Не знаю как будет работать с большим объемом данных.

Автор - gling
Дата добавления - 19.10.2014 в 22:50
mrdc Дата: Понедельник, 20.10.2014, 10:38 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 40% ±

Excel 2010
Доброе утро! Прикрепил файл, сейчас посмотрю Ваше предложение.
В моем примере "Последнее значение" и "Предыдущее значение" - просто номер строки, а не значение в этой ячейке.


Сообщение отредактировал mrdc - Понедельник, 20.10.2014, 10:41
 
Ответить
СообщениеДоброе утро! Прикрепил файл, сейчас посмотрю Ваше предложение.
В моем примере "Последнее значение" и "Предыдущее значение" - просто номер строки, а не значение в этой ячейке.

Автор - mrdc
Дата добавления - 20.10.2014 в 10:38
ShAM Дата: Понедельник, 20.10.2014, 11:51 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1347
Репутация: 249 ±
Замечаний: 0% ±

Excel 2010
Формула Владимира (gling) Вам подойдет.
Сделал на Вашем файле без проверки на существование. На 25000 строк, вроде нормально работает. Проверяйте на полном объеме.
К сообщению приложен файл: mrdc_2.xlsx (29.5 Kb)
 
Ответить
СообщениеФормула Владимира (gling) Вам подойдет.
Сделал на Вашем файле без проверки на существование. На 25000 строк, вроде нормально работает. Проверяйте на полном объеме.

Автор - ShAM
Дата добавления - 20.10.2014 в 11:51
mrdc Дата: Понедельник, 20.10.2014, 13:58 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 40% ±

Excel 2010
Какая-то аномалия: мой пример из прикрепленного файла перестал работать, также не работает вариант в mrdc_2.xlsx, вариант Владимира работает. %)
 
Ответить
СообщениеКакая-то аномалия: мой пример из прикрепленного файла перестал работать, также не работает вариант в mrdc_2.xlsx, вариант Владимира работает. %)

Автор - mrdc
Дата добавления - 20.10.2014 в 13:58
krosav4ig Дата: Понедельник, 20.10.2014, 14:58 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 997 ±
Замечаний: 0% ±

Excel 2007,2010,2013
еще вариант для разнообразия
для C3 формула
Код
=ПОИСКПОЗ(;СЧЁТЕСЛИ(СМЕЩ($A11:$A20000;СТРОКА($A$1:$A$20000););C1);)

для C5
Код
=ПОИСКПОЗ(1;СЧЁТЕСЛИ(СМЕЩ($A11:$A20000;СТРОКА($A$1:$A$20000););C1);)

формулы массивные, вводятся по Crtl+Shift+Enter


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщениееще вариант для разнообразия
для C3 формула
Код
=ПОИСКПОЗ(;СЧЁТЕСЛИ(СМЕЩ($A11:$A20000;СТРОКА($A$1:$A$20000););C1);)

для C5
Код
=ПОИСКПОЗ(1;СЧЁТЕСЛИ(СМЕЩ($A11:$A20000;СТРОКА($A$1:$A$20000););C1);)

формулы массивные, вводятся по Crtl+Shift+Enter

Автор - krosav4ig
Дата добавления - 20.10.2014 в 14:58
mrdc Дата: Понедельник, 20.10.2014, 19:05 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 40% ±

Excel 2010
gling, спасибо! Все работает. Подскажите, пожалуйста, как разместить данные формулы не в строках 1 и 2, т.к. если переношу их ниже - данные становятся неверны: видимо, массив "привязан" к текущей строке в качестве начальной точки отсчета.

По скорости: массив данных ~ 348 000 строк, 22 столбца, просматриваемый диапазон - 350 000 строк в одном столбце, уникальных наименований - 229, т.е. для каждого находится последнее и предыдущее значения = 458 значений.
Ноутбук, процессор C2D 2,5Ггц, 2 ядра, RAM 3,5GB - добавление значений занимает около 1 минуты, вне зависимости добавляем одно значение или массив.


Сообщение отредактировал mrdc - Понедельник, 20.10.2014, 19:07
 
Ответить
Сообщениеgling, спасибо! Все работает. Подскажите, пожалуйста, как разместить данные формулы не в строках 1 и 2, т.к. если переношу их ниже - данные становятся неверны: видимо, массив "привязан" к текущей строке в качестве начальной точки отсчета.

По скорости: массив данных ~ 348 000 строк, 22 столбца, просматриваемый диапазон - 350 000 строк в одном столбце, уникальных наименований - 229, т.е. для каждого находится последнее и предыдущее значения = 458 значений.
Ноутбук, процессор C2D 2,5Ггц, 2 ядра, RAM 3,5GB - добавление значений занимает около 1 минуты, вне зависимости добавляем одно значение или массив.

Автор - mrdc
Дата добавления - 20.10.2014 в 19:05
krosav4ig Дата: Понедельник, 20.10.2014, 19:39 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 997 ±
Замечаний: 0% ±

Excel 2007,2010,2013
mrdc, в формуле gling, для последнего значения замените СТРОКА() на 1, для предпоследнего - на 2
добавление значений занимает около 1 минуты, вне зависимости добавляем одно значение или массив.

Автопересчет формул включен? Если да, то попробуйте добавлять данные при отключенном автопересчете, потом выполнить запустить пересчет клавишей F9. выделить диапазон с формулами, которые нужно пересчитать и выполнить макрос
[vba]
Код
Sub пересчет()
      Selection.Calculate
End Sub
[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

Сообщение отредактировал krosav4ig - Понедельник, 20.10.2014, 19:41
 
Ответить
Сообщениеmrdc, в формуле gling, для последнего значения замените СТРОКА() на 1, для предпоследнего - на 2
добавление значений занимает около 1 минуты, вне зависимости добавляем одно значение или массив.

Автопересчет формул включен? Если да, то попробуйте добавлять данные при отключенном автопересчете, потом выполнить запустить пересчет клавишей F9. выделить диапазон с формулами, которые нужно пересчитать и выполнить макрос
[vba]
Код
Sub пересчет()
      Selection.Calculate
End Sub
[/vba]

Автор - krosav4ig
Дата добавления - 20.10.2014 в 19:39
mrdc Дата: Понедельник, 20.10.2014, 19:47 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 40% ±

Excel 2010
krosav4ig, это вряд ли ускорит процесс - сразу после добавления идет пересчет значений для всех наименований. Данные вставляю массивом, поэтому пересчет идет только 1 раз для всех значений, а если вставлять по 1 строке - тогда, конечно, автопересчет надо отключать и пересчитывать уже после внесения данных.
Думаю все-таки на vba переписать - должно ускорить процесс.
 
Ответить
Сообщениеkrosav4ig, это вряд ли ускорит процесс - сразу после добавления идет пересчет значений для всех наименований. Данные вставляю массивом, поэтому пересчет идет только 1 раз для всех значений, а если вставлять по 1 строке - тогда, конечно, автопересчет надо отключать и пересчитывать уже после внесения данных.
Думаю все-таки на vba переписать - должно ускорить процесс.

Автор - mrdc
Дата добавления - 20.10.2014 в 19:47
AndreTM Дата: Понедельник, 20.10.2014, 21:49 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
Думаю все-таки на vba переписать - должно ускорить процесс.
Конечно, должно ускорить - если правильно алгоритм описать. Или сразу SQL-запросами обрабатывать, используя ADODB.
И, кстати, совершенно необязательно
было бы хорошо добавлять данные в БД (SQL), а в excel уже просто анализировать эти данные из БД
поскольку вы можете книги Excel использовать как БД напрямую :)


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
Сообщение
Думаю все-таки на vba переписать - должно ускорить процесс.
Конечно, должно ускорить - если правильно алгоритм описать. Или сразу SQL-запросами обрабатывать, используя ADODB.
И, кстати, совершенно необязательно
было бы хорошо добавлять данные в БД (SQL), а в excel уже просто анализировать эти данные из БД
поскольку вы можете книги Excel использовать как БД напрямую :)

Автор - AndreTM
Дата добавления - 20.10.2014 в 21:49
krosav4ig Дата: Вторник, 21.10.2014, 00:38 | Сообщение № 12
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 997 ±
Замечаний: 0% ±

Excel 2007,2010,2013
mrdc, вот кстати ссылка на тему ADO и SQL запросов к данным в книгах excel


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщениеmrdc, вот кстати ссылка на тему ADO и SQL запросов к данным в книгах excel

Автор - krosav4ig
Дата добавления - 21.10.2014 в 00:38
mrdc Дата: Вторник, 21.10.2014, 09:44 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 40% ±

Excel 2010
Для 1 040 937 строк и 458 значений пересчет стал порядка 4-5 секунд hands

P.S. Естественно с парой трюков под конкретные данные.


Сообщение отредактировал mrdc - Вторник, 21.10.2014, 10:47
 
Ответить
СообщениеДля 1 040 937 строк и 458 значений пересчет стал порядка 4-5 секунд hands

P.S. Естественно с парой трюков под конкретные данные.

Автор - mrdc
Дата добавления - 21.10.2014 в 09:44
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!