Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.09.2009, 03:09   #11
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

кода нет, написал формулы
Вложения
Тип файла: rar Книга153.rar (4.1 Кб, 19 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 09.09.2009, 03:40   #12
Tidus
Форумчанин
 
Регистрация: 08.09.2009
Сообщений: 133
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
кода нет, написал формулы
Игорь, а вы вообще умудрились без макроса выполнить задачу, да уж, я в шоке.... Поясните пожалуйста эту формулу по кусочкам, как она работает. Особый интерес представляет то, что внутри в скобках, такого я даже в справочнике по Экселю не видел: =МАКС(ДВССЫЛ("R" & ни & "C2:R" & ки & "C2") И каким образом из этой формулы вы задали выборку именно из временного интервала, оч интересно...

Спасибо ребята, - не ожидал такого оперативного ответа. Сейчас попробую по образцу перенести макрос на свой рабочий лист с миллионом строчек и выполнить его уже там Посмотрим, что получится. Так что я сюда ещё загляну. Пошёл я спать!Всем спок. ночи!

Последний раз редактировалось Tidus; 09.09.2009 в 04:20.
Tidus вне форума Ответить с цитированием
Старый 09.09.2009, 06:12   #13
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Сейчас попробую по образцу перенести макрос на свой рабочий лист с миллионом строчек и выполнить его уже там Посмотрим, что получится.
Если речь идет о 1000000 строк, то лучше работать не с ячейками рабочего листа, а с элементами массива. Посмотрите вложение. По моим тестам, процедура выполняется в 7,5 раз быстрее, чем макрос от motorway.
Вложения
Тип файла: rar test4.rar (11.1 Кб, 16 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 09.09.2009, 11:55   #14
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

было бы странно если бы Гейтс догадался, что решая вашу задачу, я формулу, определяющую строку, с которой начинается интервал (там где время 0:00 ) назову "ни" (начало интервала), а строку, содержащую 0:20, назову "ки" (конец интервала) и написал бы об этом в документации...)))
Код:
=МАКС(ДВССЫЛ("R" & ни & "C2:R" & ки & "C2";))
вообще - это вершина айсберга.
Все работает на основании дополнительных формул:

Код:
дано="R1C1:R" & СЧЁТ(Лист1!C1) & "C1"
определяет интервал с записями с значениями времени. в примере = R1C1:R23C1

Код:
кво=СЧЁТЕСЛИ(Лист1!C1;ВРЕМЯ(;;))
определяет сколько раз встретилось 0:00 в данных. в примере = 3

Код:
нмр=Кво+1-СТРОКА()
считает номер интеравала, зависит от строки в которой определяется. Для первой строки получим = Кво, для каждой последующей на 1 меньше.

Код:
ни=НАИБОЛЬШИЙ((ДВССЫЛ(дано;)=ВРЕМЯ(;;))*СТРОКА(ДВССЫЛ(дано;));Нмр)
видимо самая сложная из формул, определяет строку в которой находится 0:00. конструкция (ДВССЫЛ(дано=ВРЕМЯ(;)*СТРОКА(ДВ ССЫЛ(дано) возвращает номер строки, если в данных 0:00, или значение 0, если в даных время не 0:00. {1;0;0;0;0;0;0;8;0;...16;0;...} время равно 0:00 в 1,8 и 16-й строках. соответственно ни=НАИБОЛЬШИЙ({1;0;0;0;0;0;0;8;0;.. .16;0;...};нмр) для первой строки вернет для 1 (3-й наибольший элемент в массиве), для 2-й строки вернет 8 (второй наибольший элемент).

ки - конец интервала, определяет строки, где время равно 0:20. По принципу работы полный аналог "ни".
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 09.09.2009, 13:52   #15
Tidus
Форумчанин
 
Регистрация: 08.09.2009
Сообщений: 133
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
было бы странно если бы Гейтс догадался, что решая вашу задачу, я формулу, определяющую строку, с которой начинается интервал (там где время 0:00 ) назову "ни" (начало интервала), а строку, содержащую 0:20, назову "ки" (конец интервала) и написал бы об этом в документации...)))
Да, я тоже поржал )))) Дело в том, что эти формулы на вашем листе я так и не нашёл, потом сегодня заметил, что они скрыты и разбросаны в произвольных ячейках на листе и не отображаются. Это вы так маскируетесь или это проделки Билла в Excelе 2007?
Tidus вне форума Ответить с цитированием
Старый 09.09.2009, 13:53   #16
DV68
Форумчанин
 
Регистрация: 05.08.2009
Сообщений: 465
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
Код:
ни=НАИБОЛЬШИЙ((ДВССЫЛ(дано;)=ВРЕМЯ(;;))*СТРОКА(ДВССЫЛ(дано;));Нмр)
IgorGO,
подскажите плиз, формулы ни и ки, они ведь формулы массива? Но в именнованных я не увидел фигурных скобок. Или я ошибаюсь про формулы массива?
"Все следует делать настолько простым, насколько это возможно, но не проще." Альберт Эйнштейн
DV68 вне форума Ответить с цитированием
Старый 09.09.2009, 13:58   #17
Tidus
Форумчанин
 
Регистрация: 08.09.2009
Сообщений: 133
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Если речь идет о 1000000 строк, то лучше работать не с ячейками рабочего листа, а с элементами массива. Посмотрите вложение. По моим тестам, процедура выполняется в 7,5 раз быстрее, чем макрос от motorway.
Да, motorway использует временные ячейки на листе, а так как эти ячейки на листе мне очень нужны то я хочу взять ваш алгоритм. С массивами будет более правильно. Только загвоздка....как просмотреть написанный вами код в книге (в закладке макросы нет ни одного макроса)?Эксель 2007, мне же этот код нужно будет скопировать в другую книгу.

Последний раз редактировалось Tidus; 09.09.2009 в 16:04.
Tidus вне форума Ответить с цитированием
Старый 09.09.2009, 14:02   #18
Tidus
Форумчанин
 
Регистрация: 08.09.2009
Сообщений: 133
По умолчанию

Цитата:
Сообщение от DV68 Посмотреть сообщение
IgorGO,
подскажите плиз, формулы ни и ки, они ведь формулы массива? Но в именнованных я не увидел фигурных скобок. Или я ошибаюсь про формулы массива?
это походу переменные, а код он давал выше...
Tidus вне форума Ответить с цитированием
Старый 09.09.2009, 15:31   #19
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

если в этих временных ячейках должно что-то быть на листе, можно просто их переместить в другое место листа или на др. лист
motorway вне форума Ответить с цитированием
Старый 09.09.2009, 16:35   #20
Tidus
Форумчанин
 
Регистрация: 08.09.2009
Сообщений: 133
По умолчанию

Цитата:
Сообщение от motorway Посмотреть сообщение
если в этих временных ячейках должно что-то быть на листе, можно просто их переместить в другое место листа или на др. лист
Пока других програмистов нет, может вы подскажите, как просмотреть код в экселе?Теперь и ваш код исчез из макросов на листе...
Tidus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
5 максимальных значений в сводной таблице в новом Excel Катик7 Microsoft Office Excel 2 03.09.2009 17:26
Случайный выбор значений из списка Stoodentka Microsoft Office Excel 4 14.07.2009 07:56
Выбор значений по отдельной группе michi SQL, базы данных 2 15.10.2008 22:35
Запись файлов в *.тхт с учетом повторяющихся значений Arteom Общие вопросы Delphi 3 03.04.2008 17:26
выбор значений в цикле Melok Паскаль, Turbo Pascal, PascalABC.NET 3 15.12.2007 22:56