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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2009, 06:22   #61
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Здравствуйте, Tidus.
По Вашим вопросам из поста № 49:
Цитата:
2. А почему вы выбрали именно "E" ,а не цифру 5 например?Имеет ли цифра или буква принципиальное значение?
Синтаксис VBA допускает и так и так. Разницы нет.
Цитата:
3. Что такое + 4 ? (Я не нашел отличий в работе кода, если убрать +4)
Вы же Сами просили, чтобы результат вставлялся в столбец "I", начиная с 5-й строки. Отсюда и +4.
Цитата:
5. Перенес ваш код в свой файл, запустил макрос, и у меня вылезла ошибка run time error 13 - type mismatch. С чем это может быть связано?
В какой строке кода появляется ошибка? Какое значение при этом имеет переменная i?
Цитата:
1. Когда в столбце указывается интервал от 00:00 до 19:00, то этот интервал ваш макрос не учитывает в своих расчётах. Почему так происходит?И как это поправить, ведь время должно лежать в диапазоне от 00:00 до 20:00.

4. Если мне нужен диапазон времени от 1:10 до 12:15, как правильно его поменять в коде.
А вот здесь требуются уточнения.
1. Всегда ли начальное время (0:00:00 или 1:10) обязательно будет присутствовать?
2. Если, например, конечное время установлено 12:15, то следующее после него в таблице время может быть как больше, так и меньше?
3. В общем случае, есть столбец с значением времени, в котором это время, начиная с произвольной величины увеличивается. Т.е. имеем "кучу" промежутков времени, каждый из которых представляет увеличивающийся диапазон. Задача - найти максимумы значений из соответствующего столбца, из каждого промежутка времени, ограниченного заданными значениями. Так?
4. Прикрепите пример файла. Не нужно все 40 метров. Достаточно 100 строк, среди которых будут встречаться все возможные варианты.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 30.11.2009, 17:46   #62
mchip
Форумчанин
 
Регистрация: 24.06.2008
Сообщений: 516
По умолчанию

Вот ещё один пример расчета формулами без макросов:
Вложения
Тип файла: zip пример.zip (47.6 Кб, 15 просмотров)
Можно сделать все! Было бы время, да деньги...
mchip вне форума Ответить с цитированием
Старый 30.11.2009, 20:18   #63
Tidus
Форумчанин
 
Регистрация: 08.09.2009
Сообщений: 133
По умолчанию

Цитата:
Сообщение от mchip Посмотреть сообщение
Вот ещё один пример расчета формулами без макросов:
mchip,у вас тоже оригинальное решение. Вы не могли бы описать алгоритм вычислений и добавить в свое сообщение кроме файла ещё и используемые формулы к файлу с пояснениями в своем посте,- так будет более наглядно и полезнее для участников ветки. А так, огромное спасибо за такое решение. Я думаю, что этот способ положу в свою копилку знаний.
Tidus вне форума Ответить с цитированием
Старый 30.11.2009, 22:46   #64
Tidus
Форумчанин
 
Регистрация: 08.09.2009
Сообщений: 133
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
В какой строке кода появляется ошибка? Какое значение при этом имеет переменная i?
Код:
Case w: j = j + 1: b(j) = a(i, 3): c(k, 1) = Application.Max(b): k = k + 1
Кажется я нашёл, почему вылетает ошибка!, 3 часа потратил. Когда у меня анализируется заполненных свыше 65536 ячеек (у меня это строка 65542), то функция их не может считать и вылазиет ошибка Можете проверить, откройте мой файл, нажмите кнопку "Пуск" и увидите, что вылезет ошибка. Удалите в моем файле строчку 65542 и нажмите кнопку "Пуск" и ошибка исчезнет и код сработает. Реально ли решить данную проблему?


Цитата:
А вот здесь требуются уточнения.
1. Всегда ли начальное время (0:00:00 или 1:10) обязательно будет присутствовать?
Нет, необязательно. Мне нужно, чтобы я мог изменять этот диапазон в любом временном диапазоне с любым шагом.Там есть диапазон от xx:xx до 12:15 - частный случай, я этот диапазон буду менять в коде макроса. (Если сможете, сделайте это на листе, чтобы просто выбирать диапазон, я буду только рад и другие форумчане скажут спасибо).

Цитата:
2. Если, например, конечное время установлено 12:15, то следующее после него в таблице время может быть как больше, так и меньше?
Да, последующее время может быть и меньше, но только после 23:55, так как начался новый день и время снова с нуля. Но также 12:15 цифры может и не быть!Тогда диапазон должен браться внутри ограничивающих фифр например 12:14, 12:13,12:12,12:11,12:10 и т.д пока не буудт найдены границы временного диапазона. А ваш макрос эти границы не может определить, так как не обнаруживаются 00:00 и 20:00, обычно вместо 00:00 день начинается с 00:05 и макрос "не видит" границы диапазона.

Цитата:
3. В общем случае, есть столбец с значением времени, в котором это время, начиная с произвольной величины увеличивается. Т.е. имеем "кучу" промежутков времени, каждый из которых представляет увеличивающийся диапазон. Задача - найти максимумы значений из соответствующего столбца, из каждого промежутка времени, ограниченного заданными значениями. Так?
Да, куча промежутков времени, она должна попадать в диапазон, даже если начальных цифр в диапазоне нет. Ага вы правильно поняли, задача остается той же. Файл прилагается, вы сразу поймёте, там первые 5 дней хорошие варианты примеров, чтобы отладить код.
Вложения
Тип файла: zip Primer.zip (2.88 Мб, 7 просмотров)

Последний раз редактировалось Tidus; 30.11.2009 в 22:54.
Tidus вне форума Ответить с цитированием
Старый 01.12.2009, 01:07   #65
mchip
Форумчанин
 
Регистрация: 24.06.2008
Сообщений: 516
По умолчанию

Все довольно просто.
В зеленой области формулой массива проверяем наличие всех значений.
Код:
{=ЧАСТОТА(A:A;E1:E5)}
т.е. сколько раз встречаются комбинации 0:00, 0:05 .... 0:20
в данных вычислениях результат проверки не используется (вставил только из за IgorGO, у него проверка реализована другим способом)

В столбце G высчитываем позицию очередного массива по следующей формуле:
Код:
=ПОИСКПОЗ($E$1;СМЕЩ($A$1;1+G2;;100;);0)+G2
$E$1 - значение для поиска (0:00)
СМЕЩ($A$1;1+G2;;100 - высчитывает диапазон для поиска с учетом предыдущего результата

В столвце H собственно высчитывается сам результат
Код:
=МАКС(СМЕЩ($A$1;G2;1;5;1))
Можно сделать все! Было бы время, да деньги...
mchip вне форума Ответить с цитированием
Старый 01.12.2009, 07:15   #66
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Посмотрите вложение. В ячейке "I4" задается временной интервал (через дефис, без пробелов). Найденные максимумы вставляются в столбец "H". С Вашего позволения, для наглядности, в столбец "I" вставляются даты, соответствующие найденным максимумам. Если требуется - доработайте макрос "под себя". Процедура должна выполняться быстро.
Вложения
Тип файла: rar Forum_2.rar (2.83 Мб, 8 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 01.12.2009, 14:56   #67
Tidus
Форумчанин
 
Регистрация: 08.09.2009
Сообщений: 133
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Посмотрите вложение. В ячейке "I4" задается временной интервал (через дефис, без пробелов). Найденные максимумы вставляются в столбец "H". С Вашего позволения, для наглядности, в столбец "I" вставляются даты, соответствующие найденным максимумам. Если требуется - доработайте макрос "под себя". Процедура должна выполняться быстро.
Да, спасибо, эта версия макроса работает намного быстрее и теперь берёт больше 65536 строчек и анализирует внутри указанного диапазона, да ещё и проставляет даты, это очень радует Код почти отлажен, но возникли вопросы:
1. Как отменить изменения, которые были внесены макросом, после нажатия кнопки "Пуск". Поддерживает ли это эксель2007?
2. Например, удаляю одну дату в первом столбце (1.09.1999) и у меня строчка с удаленной датой не анализируется. Целесообразней было бы сделать так, что если я удалил время во 2 столбце, то строка не анализировалась, но никак не дату.
3. Этот макрос написан для одного столбца, то есть он ищет максимальные значения в одном столбце и вставляет их в другой столбец. Изменив всего 1 цифру, макрос будет анализировать уже другой столбец и также вставлять макс. значения в столбец. А если мне нужно анализировать сегодня два столбца, а завтра 3-5 столбцов, то как быть?
Задача такая: выбрать макс. значения из 3 столбца и вставить их в 5 столбец, а потом мне нужно выбрать макс. значения из 4 столбца и вставить их уже в 6 столбец.
Я вижу такие варианты решения этой задачи: - Можно создать копию это же макроса и вставить вторую кнопку, которая считает уже по другому столбцу;
- Или же можно просто изменять код этого макроса каждый раз, когда необходимо выбрать, из каких именно столбцов планирует выбирать макс. значения и в какие именно столбцы вставлять эти значения.
Вы профессиональный программист. Как бы вы решили эту задачу?

Последний раз редактировалось Tidus; 01.12.2009 в 15:02.
Tidus вне форума Ответить с цитированием
Старый 02.12.2009, 06:29   #68
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Во вложении реализован поиск и вставка по произвольным столбцам. А также, ввод временного интервала. Все параметры задаются в форме.
Теперь вопросы к Вам:
Цитата:
1. Как отменить изменения, которые были внесены макросом, после нажатия кнопки "Пуск".
А что нужно отменять? Ведь макрос "не трогает" исходных данных.
Цитата:
...строчка с удаленной датой не анализируется.
А как быть в случае, если дата в 1-м столбце отсутствует? Какой дате в этом случае соответствует время во 2-м столбце?
Вложения
Тип файла: rar Forum_3.rar (2.84 Мб, 6 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 02.12.2009, 22:16   #69
Tidus
Форумчанин
 
Регистрация: 08.09.2009
Сообщений: 133
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Во вложении реализован поиск и вставка по произвольным столбцам. А также, ввод временного интервала. Все параметры задаются в форме.
Вау!Супер, теперь все переменные передаются в форму и анализируются с помощью макроса.
Цитата:
Теперь вопросы к Вам:
А что нужно отменять? Ведь макрос "не трогает" исходных данных.
Да, макрос не трогает, но если случайно вставить не в тот столбец, то данные обновятся в этом столбце и заменятся вставленными значениями, удалив наши важные данные в нашем столбце, в который мы некорректно по ошибке вставили.
Это на самом деле общий вопрос, который меня мучал с того самого момента, когда я начал использовать макросы. Иногда бывает случается и так, что при отладке макроса происходит замена не тех ячеек, которые я планировал и они стираются, а потом думал, как вернуть всё обратно и ничего не остаётся, как закрывать файл без сохранения и открывать заново.
Цитата:
А как быть в случае, если дата в 1-м столбце отсутствует? Какой дате в этом случае соответствует время во 2-м столбце?
А я вообще не планировал делать привязку к дате, меня интересует время А дату можно просто переносить справа в дополнительный столбец для наглядности, чтобы контролировать все ли даты вошли в столбик. Пожелание по корректировке кода:
1. Нужно, чтобы справа вставлялось сначала время, потом дата (дата в принципе уже вставляется). Привязку в коде делать нужно конкретно к времени. Если время отсутствует, значит и строчка не должна обрабатываться, если же отсутствует дата, то строка все-равно должна обрабатываться, так как время у нас имеется.
2. Проверьте у себя:когда нажимаю ПУСК, затем вбиваю дату от 0:00 до 3:05 , для поиска: 4 столбец и для вставки 8 столбец. Жму ОК, макрос срабатывает и что мы видим: напротив строки 3:05 самое большое значение 1,6075, но макрос его не увидел и вставил значение 1,6072. Нонсенс, проверял с другими строками - всё работает на Ура, именно с этой строкой - не хочет.
3. А можно ли сделать так,чтобы форма хранила последние введенные данные в форму во всех полях при повторном нажатии кнопки Пуск?
4. Заметил такой глюк, через некоторое время когда я нажимаю на кнопку Пуск у меня вылетает такая ошибка: Run-time Error '75' Could not find specified object. Дебагер отображает ошибку в строчке Private Sub CommandButton1_Click(): UserForm1.Show 0: End Sub
Потом при сохранении вылетела ошибка о восстановлении документа, странное поведение Экселя однако и так каждый раз.

P.S. благодаря этому макросу я сейчас провожу очень серьёзные научные исследования на валютных рынках Форекс. Уже тестирую идеи великого трейдера Ларри Вильямса и нашёл кое-какую закономерность движения валюты. Я думаю, что данная тема неспроста набирает всё бОльшую популярность на этом форуме и такие вот макросы сейчас становятся всё более актуальными, так как Эксель позволяет анализировать большой объем данных с высочайшей скоростью.

Последний раз редактировалось Tidus; 03.12.2009 в 00:48.
Tidus вне форума Ответить с цитированием
Старый 03.12.2009, 07:33   #70
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Посмотрите вложение. Постарался исправить все неточности и реализовать все Ваши пожелания. Теперь, при нажатии кнопки "Пуск", заполняем форму и нажимаем "ОК". Если данные внесены верно, выполняется поиск и вставка значений, согласно данным, внесенным в форму. Причем, в указанный столбец заносится максимальное значение, в следующий столбец (правее) - дата (если она присутствует), а в следующий - время. Форма скрывается. При следующем нажатии на кнопку "Пуск", появится форма с внесенными ранее значениями и кнопка "Отмена" будет активна. Если ее нажать - произойдет возврат в предыдущее состояние и кнопка деактивируется. Обратите внимание, что вернуть можно только на 1 шаг назад. Т.е., если выполнить 2 поиска подряд, то вернуть можно только то состояние, которое было перед последним поиском.
Вложения
Тип файла: rar Forum_4.rar (2.82 Мб, 11 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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