Tooprogram.ru

Компьютерный справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Vba excel сравнение дат

Vba excel сравнение дат

как сравнивать даты в экселе, при написании кода в редакторе VBA?

От: Mckey
Дата:25.01.06 13:21
Оценка:

Здравствуйте, fantaziya, Вы писали:

F>как сравнивать даты в экселе, при написании кода в редакторе VBA?

Sub Test()
Dim D1 As Date
Dim D2 As Date

D1 = «01.01.2006»
D2 = «13.01.2006»
If D1 > D2 Then
‘ Ку-КУ
Else
‘ Трям-Трям
End If
End Sub

От: fantaziya
Дата:25.01.06 13:26
Оценка:

Здравствуйте, Mckey, Вы писали:

M>Здравствуйте, fantaziya, Вы писали:

F>>как сравнивать даты в экселе, при написании кода в редакторе VBA?

F>>заранее спасибо

M>Sub Test()
M> Dim D1 As Date
M> Dim D2 As Date

M> D1 = «01.01.2006»
M> D2 = «13.01.2006»
M> If D1 > D2 Then
M> ‘ Ку-КУ
M> Else
M> ‘ Трям-Трям
M> End If
M>End Sub

а если нужно сравнивать ячейки из таблицы.
т.е. нужно если значение одной ячейки больше другой (в смысле времени — позже), то вывожу одну запись, если это значение в ячейке меньше, то вывожу другую.

т.е. как константы я их задать не могу, мне надо на них ссылаться.

От: Mckey
Дата:25.01.06 13:35
Оценка: 3 (1)

Здравствуйте, fantaziya, Вы писали:

F>Здравствуйте, Mckey, Вы писали:

F>а если нужно сравнивать ячейки из таблицы.
F>т.е. нужно если значение одной ячейки больше другой (в смысле времени — позже), то вывожу одну запись, если это значение в ячейке меньше, то вывожу другую.

F>т.е. как константы я их задать не могу, мне надо на них ссылаться.
F>

Sub Test()
Dim D1 As Date
Dim D2 As Date
D1 = Range(«A1»)
D2 = Range(«A2»)
If D1 > D2 Then
‘ Ку-КУ
Else
‘ Трям-Трям
End If
End Sub

Читать еще:  Координатное выделение в excel

Там где выделено можно использовать и D1 = Range(«A1»).Value

От: fantaziya
Дата:25.01.06 14:01
Оценка:

Здравствуйте, Mckey, Вы писали:

M>Здравствуйте, fantaziya, Вы писали:

F>>Здравствуйте, Mckey, Вы писали:

F>>а если нужно сравнивать ячейки из таблицы.
F>>т.е. нужно если значение одной ячейки больше другой (в смысле времени — позже), то вывожу одну запись, если это значение в ячейке меньше, то вывожу другую.

F>>т.е. как константы я их задать не могу, мне надо на них ссылаться.
F>>

M>Sub Test()
M> Dim D1 As Date
M> Dim D2 As Date
M> D1 = Range(«A1»)
M> D2 = Range(«A2»)
M> If D1 > D2 Then
M> ‘ Ку-КУ
M> Else
M> ‘ Трям-Трям
M> End If
M>End Sub

M>Там где выделено можно использовать и D1 = Range(«A1»).Value

это же очевидно..
спасибо большое

Excel VBA: эффективный способ сравнения дат в больших циклах

Описание программы

Я пытаюсь сделать Sub для создания raports из многих файлов. Каждый файл состоит из строк, упорядоченных по дате, и их не фиксировано. Некоторые из них получили только 300, другие более 10 000. Каждая строка разделена на модули, с описанием некоторых проблем appereance, также есть сумма всех столбцов в каждом модуле. Raport должен представить, сколько проблем из определенного модуля появилось с течением времени, установленным пользователем, в определенных файлах, также проверенных пользователем.

проблема

Мой Sub работает, но я не уверен, правильно ли я делаю это. Для одного файла операция занимает около 6 секунд, но для всех это иногда почти 2 минуты (5000 циклов в файл в самом большом цикле), с довольно длинными. Я почти уверен, что есть более эффективные способы выполнения этой работы. Я думаю, основная проблема заключается в том, как я проверяю дату в каждой строке — это также самый длинный цикл. После некоторого чтения:

Читать еще:  Библиотеки для работы с excel c

Я действительно не понимаю, как применять здесь функции Filter или Find, также я пытался с массивами и Foreach, но время исполнения было почти одинаковым (иногда лучше, иногда нет). Также я думаю, что многие циклы If и вложенные могут замедлять Sub down. Может быть, есть несколько параллельных циклов или использования потоков в Excel VBA, чтобы ускорить его? Я думаю, что Excel всегда использует только 25% proccessor. Также моя попытка дать пользователю небольшую возможность настроить область цикла (Number1 и Number2 в коде) сокращает время от 2 минут до 30 секунд с хорошими настройками, но файлы DataBase необходимо периодически проверять и очищать, поэтому это не лучшее решение.

Я только начинаю программировать, и это мой первый большой проект, поэтому я знаю плохое качество кода, я надеюсь, что вы могли бы направить меня немного, чтобы сделать эту черепаху быстрее. Извините за длинный пост.

Он довольно большой, поэтому я удалил не очень важный мир (он описал).

Как я узнал через некоторое время, НЕТ НУЖНО сравнивать даты, подобные этому в цикле. Никогда. Excel предоставляет фильтры, которые могут использоваться для уменьшения диапазона ячеек только для них, которые соответствуют определенным критериям, описанным в фильтре. Самый простой способ сделать это — включить макрорекордер и установить фильтр на диапазон ячеек. Код должен выглядеть так (после ввода dateStart и dateEnd):

Но, если мы прокручиваем диапазон с этим фильтром, мы все равно получаем одинаковые результаты. Чтобы сделать, если они эффективны, нам нужно использовать только видимые (отфильтрованные) ячейки. Для этого мы можем использовать специальные ячейки:

После замены внешнего цикла этим методом его можно отфильтровать другие параметры из разных столбцов (добавив разные фильтры с разными полями и критериями). Таким образом, нет необходимости использовать для циклов вообще. С помощью этих методов можно сократить время от нескольких минут до нескольких секунд.

Ссылка на основную публикацию
Adblock
detector