Всем ДД. в «В4» число в формате даты 12.07.2005 |
|
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Здравствуй, Миш. Я сам — дурнее всякого примера! … |
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
ДВ! Тоже экономлю |
Немного не точно написал. |
|
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
Range(«B4:B6») — это уже диапазон |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
{quote}{login=Михаил}{date=28.02.2011 07:44}{thema=}{post}Немного не точно написал. Я сам — дурнее всякого примера! … |
В диапазоне только даты — (сам сейчас заполняю, автоподстановкой). |
|
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Вернее Я сам — дурнее всякого примера! … |
Про массив и цикл я понимаю. Просто не получалось сравнить |
|
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
{quote}{login=Михаил}{date=28.02.2011 07:51}{thema=}{post}Юр, ну можно, конечно, написать в коде |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Юра, Васмк представляет даты, как #12.07.2005#(можно увидеть в окне переменных). Вопрос, а как такой же формат использовать в коде? Не сталкивался? Собственно, вопрос не только к Юре. Если у кого мысли(или варианты) есть — давайте обсудим. Я сам — дурнее всякого примера! … |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Флуд, конечно, глянул на три первые поста темы и мелькнуло — старперы собрались, доминошники(сам никогда ни в домино, ни в другие игры… мне интересны головоломки):-) Я сам — дурнее всякого примера! … |
Hugo Пользователь Сообщений: 23249 |
Привет, Сергей. Dim a As Date, b As Date Если так написать, то в Locals обе переменные одинаковы. |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
{quote}{login=Hugo}{date=28.02.2011 08:32}{thema=}{post}Привет, Сергей. Я сам — дурнее всякого примера! … |
Hugo Пользователь Сообщений: 23249 |
Не знаю… Я помню ту тему — тоже потыкался, так ничего не получилось… |
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
Да, интересно… Вот, например, время я ввожу так: |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
{quote}{login=Юрий М}{date=28.02.2011 09:08}{thema=}{post}Да, интересно… Вот, например, время я ввожу так: Я сам — дурнее всякого примера! … |
Kuzmich Пользователь Сообщений: 7998 |
Может быть так |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Офигеть. Дело в разделителях. Какого же он в переменных показывает… Ну да, Locals… Kuzmich, спасибо! Короче, или никак, или с буржуйскими разделителями:-) Я сам — дурнее всякого примера! … |
Serge Пользователь Сообщений: 11308 |
{quote}{login=KukLP}{date=28.02.2011 09:15}{thema=Re: }{post}…дедушка Эксель прелагает нам множество других путей…{/post}{/quote}Какой-же он дедушка, если ему только 26-й годик? |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Серег, все познается… А если сложить все года разработчиков, на него затраченные? Я помню еще Quattro, QuattroPro, Supercalc — где они сейчас? Так что Экс считаю уже умуденным сединами. И очень уважаю(можно даже сказать люблю). Думаю(зная тебя) и ты со мной спорить не станешь:-) Я сам — дурнее всякого примера! … |
Serge Пользователь Сообщений: 11308 |
Нет. |
R Dmitry Пользователь Сообщений: 3103 Excel,MSSQL,Oracle,Qlik |
#24 28.02.2011 23:54:10 ну и не забываем что формат всегда mm/dd/yyyy
|
|
Функции для работы с датой и временем в VBA Excel. Синтаксис, параметры, спецсимволы, примеры. Функции, возвращающие текущие дату и время по системному таймеру.
Функция Date
Date – это функция, которая возвращает значение текущей системной даты. Тип возвращаемого значения – Variant/Date.
Синтаксис
Пример
Sub PrimerDate() MsgBox «Сегодня: « & Date End Sub |
Функция DateAdd
DateAdd – это функция, которая возвращает результат прибавления к дате указанного интервала времени. Тип возвращаемого значения – Variant/Date.
Синтаксис
DateAdd(interval, number, date) |
Параметры
Параметр | Описание |
---|---|
interval | Обязательный параметр. Строковое выражение из спецсимволов, представляющее интервал времени, который требуется добавить. |
number | Обязательный параметр. Числовое выражение, задающее количество интервалов, которые необходимо добавить. Может быть как положительным (возвращается будущая дата), так и отрицательным (возвращается предыдущая дата). |
date | Обязательный параметр. Значение типа Variant/Date или литерал, представляющий дату, к которой должен быть добавлен интервал. |
Таблицу аргументов (значений) параметра interval
смотрите в параграфе «Приложение 1».
Примечание к таблице аргументов: три символа – y, d, w – указывают функции DateAdd
на один день, который необходимо прибавить к исходной дате number
раз.
Пример
Sub PrimerDateAdd() MsgBox «31.01.2021 + 1 месяц = « & DateAdd(«m», 1, «31.01.2021») ‘Результат: 28.02.2021 MsgBox «Сегодня + 3 года = « & DateAdd(«yyyy», 3, Date) MsgBox «Сегодня — 2 недели = « & DateAdd(«ww», —2, Date) MsgBox «10:22:14 + 10 минут = « & DateAdd(«n», 10, «10:22:14») ‘Результат: 10:32:14 End Sub |
Функция DateDiff
DateDiff – это функция, которая возвращает количество указанных интервалов времени между двумя датами. Тип возвращаемого значения – Variant/Long.
Синтаксис
DateDiff(interval, date1, date2, [firstdayofweek], [firstweekofyear]) |
Параметры
Параметр | Описание |
---|---|
interval | Обязательный параметр. Строковое выражение из спецсимволов, представляющее интервал времени, количество которых (интервалов) требуется вычислить между двумя датами. |
date1, date2 | Обязательные параметры. Значения типа Variant/Date , представляющие две даты, между которыми вычисляется количество указанных интервалов. |
firstdayofweek | Необязательный параметр. Константа, задающая первый день недели. По умолчанию – воскресенье. |
firstweekofyear | Необязательный параметр. Константа, задающая первую неделю года. По умолчанию – неделя, в которую входит 1 января. |
Таблицу аргументов (значений) параметра interval
смотрите в параграфе «Приложение 1».
Примечание к таблице аргументов: в отличие от функции DateAdd
, в функции DateDiff
спецсимвол "w"
, как и "ww"
, обозначает неделю. Но расчет осуществляется по разному. Подробнее об этом на сайте разработчиков.
Параметры firstdayofweek
и firstweekofyear
определяют правила расчета количества недель между датами.
Таблицы констант из коллекций firstdayofweek
и firstweekofyear
смотрите в параграфах «Приложение 2» и «Приложение 3».
Пример
Sub PrimerDateDiff() ‘Даже если между датами соседних лет разница 1 день, ‘DateDiff с интервалом «y» покажет разницу — 1 год MsgBox DateDiff(«y», «31.12.2020», «01.01.2021») ‘Результат: 1 год MsgBox DateDiff(«d», «31.12.2020», «01.01.2021») ‘Результат: 1 день MsgBox DateDiff(«n», «31.12.2020», «01.01.2021») ‘Результат: 1440 минут MsgBox «Полных лет с начала века = « & DateDiff(«y», «2000», Year(Now) — 1) End Sub |
Функция DatePart
DatePart – это функция, которая возвращает указанную часть заданной даты. Тип возвращаемого значения – Variant/Integer.
Есть предупреждение по использованию этой функции.
Синтаксис
DatePart(interval, date, [firstdayofweek], [firstweekofyear]) |
Параметры
Параметр | Описание |
---|---|
interval | Обязательный параметр. Строковое выражение из спецсимволов, представляющее часть даты, которую требуется извлечь. |
date | Обязательные параметры. Значение типа Variant/Date , представляющее дату, часть которой следует извлечь. |
firstdayofweek | Необязательный параметр. Константа, задающая первый день недели. По умолчанию – воскресенье. |
firstweekofyear | Необязательный параметр. Константа, задающая первую неделю года. По умолчанию – неделя, в которую входит 1 января. |
Таблицу аргументов (значений) параметра interval
смотрите в параграфе «Приложение 1». В третьей графе этой таблицы указаны интервалы значений, возвращаемых функцией DatePart
.
Таблицы констант из коллекций firstdayofweek
и firstweekofyear
смотрите в параграфах «Приложение 2» и «Приложение 3».
Пример
Sub PrimerDatePart() MsgBox DatePart(«y», «31.12.2020») ‘Результат: 366 MsgBox DatePart(«yyyy», CDate(43685)) ‘Результат: 2019 MsgBox DatePart(«n», CDate(43685.45345)) ‘Результат: 52 MsgBox «День недели по счету сегодня = « & DatePart(«w», Now, vbMonday) End Sub |
Функция DateSerial
DateSerial – это функция, которая возвращает значение даты для указанного года, месяца и дня. Тип возвращаемого значения – Variant/Date.
Синтаксис
DateSerial(year, month, day) |
Параметры
Параметр | Описание |
---|---|
year | Обязательный параметр типа Integer. Числовое выражение, возвращающее значение от 100 до 9999 включительно. |
month | Обязательный параметр типа Integer. Числовое выражение, возвращающее любое значение (в пределах Integer), а не только от 1 до 12.* |
day | Обязательный параметр типа Integer. Числовое выражение, возвращающее любое значение (в пределах Integer), а не только от 1 до 31.* |
* Функция DateSerial автоматически пересчитывает общее количество дней в полные месяцы и остаток, общее количество месяцев в полные годы и остаток (подробнее в примере).
Пример
Sub PrimerDateSerial() MsgBox DateSerial(2021, 2, 10) ‘Результат: 10.02.2020 MsgBox DateSerial(2020, 1, 400) ‘Результат: 03.02.2021 End Sub |
Разберем подробнее строку DateSerial(2020, 1, 400)
:
- 400 дней = 366 дней + 31 день + 3 дня;
- 366 дней = 1 год, так как по условию month:=1, значит февраль 2020 входит в расчет, а в нем – 29 дней;
- 31 день = 1 месяц, так как сначала заполняется январь (по условию month:=1);
- 3 дня – остаток.
В итоге получается:
DateSerial(2020+1, 1+1, 3) = DateSerial(2021, 2, 3)
Функция DateValue
DateValue – это функция, которая преобразует дату, указанную в виде строки, в значение типа Variant/Date (время игнорируется).
Синтаксис
Параметр date
– строковое выражение, представляющее дату с 1 января 100 года по 31 декабря 9999 года.
Пример
Sub PrimerDateValue() MsgBox DateValue(«8 марта 2021») ‘Результат: 08.03.2021 MsgBox DateValue(«17 мая 2021 0:59:15») ‘Результат: 17.05.2021 End Sub |
Функция DateValue игнорирует время, указанное в преобразуемой строке, но если время указано в некорректном виде (например, «10:60:60»), будет сгенерирована ошибка.
Функция Day
Day – это функция, которая возвращает день месяца в виде числа от 1 до 31 включительно. Тип возвращаемого значения – Variant/Integer.
Синтаксис
Параметр date
– любое числовое или строковое выражение, представляющее дату.
Пример
Sub PrimerDay() MsgBox Day(Now) End Sub |
Функция IsDate
IsDate – это функция, которая возвращает True, если выражение является датой или распознается как допустимое значение даты или времени. В остальных случаях возвращается значение False.
Синтаксис
Параметр expression
– это переменная, возвращающая дату или строковое выражение, распознаваемое как дата или время.
Значение, возвращаемое переменной expression, не должно выходить из диапазона допустимых дат: от 1 января 100 года до 31 декабря 9999 года (для Windows).
Пример
Sub PrimerIsDate() MsgBox IsDate(«18 апреля 2021») ‘Результат: True MsgBox IsDate(«31 февраля 2021») ‘Результат: False MsgBox IsDate(«4.10.20 11:12:54») ‘Результат: True End Sub |
Функция Hour
Hour – это функция, которая возвращает количество часов в виде числа от 0 до 23 включительно. Тип возвращаемого значения – Variant/Integer.
Синтаксис
Параметр time
– любое числовое или строковое выражение, представляющее время.
Пример
Sub PrimerHour() MsgBox Hour(Now) MsgBox Hour(«22:36:54») End Sub |
Функция Minute
Minute – это функция, которая возвращает количество минут в виде числа от 0 до 59 включительно. Тип возвращаемого значения – Variant/Integer.
Синтаксис
Параметр time
– любое числовое или строковое выражение, представляющее время.
Пример
Sub PrimerMinute() MsgBox Minute(Now) MsgBox Minute(«22:36:54») End Sub |
Функция Month
Month – это функция, которая возвращает день месяца в виде числа от 1 до 12 включительно. Тип возвращаемого значения – Variant/Integer.
Синтаксис
Параметр date
– любое числовое или строковое выражение, представляющее дату.
Пример
Sub PrimerMonth() MsgBox Month(Now) End Sub |
Функция MonthName
MonthName – это функция, которая возвращает название месяца в виде строки.
Синтаксис
MonthName(month, [abbreviate]) |
Параметры
Параметр | Описание |
---|---|
month | Обязательный параметр. Числовое обозначение месяца от 1 до 12 включительно. |
abbreviate | Необязательный параметр. Логическое значение: True – возвращается сокращенное название месяца, False (по умолчанию) – название месяца не сокращается. |
Пример
Sub PrimerMonthName() MsgBox MonthName(10) ‘Результат: Октябрь MsgBox MonthName(10, True) ‘Результат: окт End Sub |
Функция Now
Now – это функция, которая возвращает текущую системную дату и время. Тип возвращаемого значения – Variant/Date.
Синтаксис
Пример
Sub PrimerNow() MsgBox Now MsgBox Day(Now) MsgBox Hour(Now) End Sub |
Функция Second
Second – это функция, которая возвращает количество секунд в виде числа от 0 до 59 включительно. Тип возвращаемого значения – Variant/Integer.
Синтаксис
Параметр time
– любое числовое или строковое выражение, представляющее время.
Пример
Sub PrimerSecond() MsgBox Second(Now) MsgBox Second(«22:30:14») End Sub |
Функция Time
Time – это функция, которая возвращает значение текущего системного времени. Тип возвращаемого значения – Variant/Date.
Синтаксис
Пример
Sub PrimerTime() MsgBox «Текущее время: « & Time End Sub |
Функция TimeSerial
TimeSerial – это функция, которая возвращает значение времени для указанного часа, минуты и секунды. Тип возвращаемого значения – Variant/Date.
Синтаксис
TimeSerial(hour, minute, second) |
Параметры
Параметр | Описание |
---|---|
hour | Обязательный параметр типа Integer. Числовое выражение, возвращающее значение от 0 до 23 включительно. |
minute | Обязательный параметр типа Integer. Числовое выражение, возвращающее любое значение (в пределах Integer), а не только от 0 до 59.* |
second | Обязательный параметр типа Integer. Числовое выражение, возвращающее любое значение (в пределах Integer), а не только от 0 до 59.* |
* Функция TimeSerial автоматически пересчитывает общее количество секунд в полные минуты и остаток, общее количество минут в полные часы и остаток (подробнее в примере).
Пример
Sub PrimerTime() MsgBox TimeSerial(5, 16, 4) ‘Результат: 5:16:04 MsgBox TimeSerial(5, 75, 158) ‘Результат: 6:17:38 End Sub |
Разберем подробнее строку TimeSerial(5, 75, 158)
:
- 158 секунд = 120 секунд (2 минуты) + 38 секунд;
- 75 минут = 60 минут (1 час) + 15 минут.
В итоге получается:
TimeSerial(5+1, 15+2, 38) = TimeSerial(6, 17, 38)
Функция TimeValue
TimeValue – это функция, которая преобразует время, указанное в виде строки, в значение типа Variant/Date (дата игнорируется).
Синтаксис
Параметр time
– строковое выражение, представляющее время с 0:00:00 по 23:59:59 включительно.
Пример
Sub PrimerTimeValue() MsgBox TimeValue(«6:45:37 PM») ‘Результат: 18:45:37 MsgBox TimeValue(«17 мая 2021 3:59:15 AM») ‘Результат: 3:59:15 End Sub |
Функция TimeValue игнорирует дату, указанную в преобразуемой строке, но если дата указана в некорректном виде (например, «30.02.2021»), будет сгенерирована ошибка.
Функция Weekday
Weekday – это функция, которая возвращает день недели в виде числа от 1 до 7 включительно. Тип возвращаемого значения – Variant/Integer.
Синтаксис
Weekday(date, [firstdayofweek]) |
Параметры
Параметр | Описание |
---|---|
date | Обязательный параметр. Любое выражение (числовое, строковое), отображающее дату. |
firstdayofweek | Константа, задающая первый день недели. По умолчанию – воскресенье. |
Таблицу констант из коллекции firstdayofweek
смотрите в параграфе «Приложение 2».
Пример
Sub PrimerWeekday() MsgBox Weekday(«23 апреля 2021», vbMonday) ‘Результат: 5 MsgBox Weekday(202125, vbMonday) ‘Результат: 6 End Sub |
Функция WeekdayName
WeekdayName – это функция, которая возвращает название дня недели в виде строки.
Синтаксис
WeekdayName(weekday, [abbreviate], [firstdayofweek]) |
Параметры
Параметр | Описание |
---|---|
weekday | Обязательный параметр. Числовое обозначение дня недели от 1 до 7 включительно. |
abbreviate | Необязательный параметр. Логическое значение: True – возвращается сокращенное название дня недели, False (по умолчанию) – название дня недели не сокращается. |
firstdayofweek | Константа, задающая первый день недели. По умолчанию – воскресенье. |
Таблицу констант из коллекции firstdayofweek
смотрите в параграфе «Приложение 2».
Пример
Sub PrimerWeekdayName() MsgBox WeekdayName(3, True, vbMonday) ‘Результат: Ср MsgBox WeekdayName(3, , vbMonday) ‘Результат: среда MsgBox WeekdayName(Weekday(Now, vbMonday), , vbMonday) End Sub |
Функция Year
Year – это функция, которая возвращает номер года в виде числа. Тип возвращаемого значения – Variant/Integer.
Синтаксис
Параметр date
– любое числовое или строковое выражение, представляющее дату.
Пример
Sub PrimerYear() MsgBox Year(Now) End Sub |
Приложение 1
Таблица аргументов (значений) параметраinterval
для функций DateAdd
, DateDiff
и DatePart
:
Аргумент | Описание | Интервал значений |
---|---|---|
yyyy | Год | 100 – 9999 |
q | Квартал | 1 – 4 |
m | Месяц | 1 – 12 |
y | День года | 1 – 366 |
d | День месяца | 1 – 31 |
w | День недели | 1 – 7 |
ww | Неделя | 1 – 53 |
h | Часы | 0 – 23 |
n | Минуты | 0 – 59 |
s | Секунды | 0 – 59 |
В третьей графе этой таблицы указаны интервалы значений, возвращаемых функцией DatePart
.
Приложение 2
Константы из коллекции firstdayofweek
:
Константа | Значение | Описание |
---|---|---|
vbUseSystem | 0 | Используются системные настройки |
vbSunday | 1 | Воскресенье (по умолчанию) |
vbMonday | 2 | Понедельник |
vbTuesday | 3 | Вторник |
vbWednesday | 4 | Среда |
vbThursday | 5 | Четверг |
vbFriday | 6 | Пятница |
vbSaturday | 7 | Суббота |
Приложение 3
Константы из коллекции firstweekofyear
:
Константа | Значение | Описание |
---|---|---|
vbUseSystem | 0 | Используются системные настройки. |
vbFirstJan1 | 1 | Неделя, в которую входит 1 января (по умолчанию). |
vbFirstFourDays | 2 | Неделя, в которую входит не менее четырех дней нового года. |
vbFirstFullWeek | 3 | Первая полная неделя года. |
UPDATED WITH ANSWER: I found an answer to my question. I’ll place a simplified version below the original question here, just to make it easy, with a more detailed version below as the accepted answer.
I’m writing a VBA function to filter a pivot table by a date range entered by the user. For some reason, it is not returning the results expected.
The dates being compared are in two different date formats. The user-entered dates are in mmmm yyyy format (October 2013). When this value is pulled into the macro for comparison, it is translated correctly as 10/1/2013. The pivot table dates are in mmm yy format (Oct 13). When I call on this date with the code PivotItem.Value
it seems to be translating the date as a string «Oct 13.»
I can’t quite figure out what the macro is doing, as it behaves somewhat erratically. If I run it for October 2011 to October 2013, it returns all months from Jan to September for every year, 2008, 2009, 2010, etc. If I run it for June 2013 to October 2013, it returns June to September for every year. Furthermore, in each example, the macro continues to run past the maximum range of data in the pivot table and gets an error. When I debug, the macro is trying to set the visibility to ‘true’ for a date that doesn’t even exist in the pivot table (IE for Jan 2014 when the data only goes through Oct 2013). No idea why that’s happening.
Below is the code. Any insight would be greatly appreciated.
UPDATE:
So the problem is definitely the date format. If I change the field settings in the pivot table to the date format mm/dd/yyyy (10/1/2013), then the macro works exactly as expected. This would be a simple fix to the problem except that the table is feeding a chart seen in the user dashboard, which I would really like to be in the format mmm yy, since it looks much cleaner. Is there a simple way to convert the format to mm/dd/yyyy inside the macro for the comparison, then back to the desired format once complete?
And I would still like to understand why a different date format is returning such different results, when the raw data being compared is the same, and both are formatted as dates, not like date vs text or something.
Sub filterPivotDate(pt As PivotTable, strtDate As Date, endDate As Date)
Dim pf As PivotField
Dim pi As PivotItem
'Clear current date filter
Set pf = pt.PivotFields("Date")
pf.ClearAllFilters
'Set new date filter
For Each pi In pf.PivotItems
If pi.Value >= strtDate And pi.Value <= endDate Then
pi.Visible = True
Else
pi.Visible = False
End If
Next pi
end sub
ANSWER UPDATE:
I replaced the loop I was using to set the filter with the following line of code:
pf.PivotFilters.Add Type:=xlDateBetween, Value1:=strtDate, Value2:=endDate
This solved the issue I was having with the date format. More information in the accepted answer below, as well as at this website
dominc_66 |
|
1 |
|
Макрос сравнения по дате с текущей28.07.2009, 09:15. Показов 10355. Ответов 2
Подскажите пожалуйста макрос с возможнастю: есть документ Excel с тремя листами на первом листе список из названий фирм и дат(срок окончания лицензий), как сделать чтоб шло сравнение дат во втрой ячейки с системной(текущей), и макрос разбивал бы спискок на первом листе еще на два списка: тоесь на первом- исходные данние, на втором- просрочениые лицензии, на третем- актуальные(те что работают). Зарание БОЛЬШОЕ спасибо. |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
28.07.2009, 09:15 |
2 |
analyst 437 / 144 / 9 Регистрация: 12.01.2009 Сообщений: 678 Записей в блоге: 1 |
||||
28.07.2009, 10:19 |
2 |
|||
1 |
dominc_66 |
|
28.07.2009, 19:42 |
3 |
Спасибо за помощь |
Выручайте! макросы, сравнение дат и повторяющиеся строки
Автор stas10, 25.05.2012, 22:50
« назад — далее »
1. Представьте, имеются строчки, в которых есть разные данные (по столбцам).
Одни из данных — ДАТА СОЗДАНИЯ СЧЕТА.
Необходимо — проверить во всех строчках эту дату на просроченность (30 дней), и если просрочена дата — выделить ВСЮ строчку.
т.е. дата СОЗДАНИЯ СЧЕТА+30дней — если больше чем СЕГОДНЯ,то выделить всю строку красным, например.
Как это написать в макросе?
2. Если вставить новую строку в конец, как проверить ее на повтор (по АРТИКУЛУ), и если она уже есть, то взять из нее новые данные (ПОСЛЕДНИЕ ДВА СТОЛБЦА С ДАТАМИ) и заменить в старой строке (ТОЛЬКО ДАТЫ)
Кто реально поможет, закину немного денег на телефон.
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.
Цитата: Poltava от 26.05.2012, 01:47
Сделать то можно. Только пара вопросов.
1) +30 дней или все же месяц, то есть по такое же число следующего месяца
2) как должно работатьто есть как понять что вы добавили новую строку и нужно начать сравнение. Нажатие на кнопку, заполнение последнего ну или первого столбца в последней строке, или еще как то
3) по какому из артикулов сравнивать 1, 2 или 3 колонка
4) что сделать с последней строкой если совпадение найдено удалить![]()
5) в файл добавляется по одной строкесравнивать нужно только последнею
6) все макросами или можно скажем через условное_форматирование как в приложенном файле
Заранее огромное спасибо!
Действительно важные вопросы, сегодня все уточню.
Могу точно сказать, что 3) надо сравнить по 1 артикулу (1 столбец) и по номеру заказа (3 столбец). Если совпадает, то мы берем последние две даты (послед. 2 столбца), обновляем их в старой строке, а новую-вставленную удаляем.
Я сегодня уточню, но скорее всего вставляться будут сразу несколько позиций в конец списка, и начальство хочет, чтобы сразу начиналась проверка на повтор.
Как будут вставлять? ручками писать, откуда то копировать по одной строке, или сразу много строк копировать и вставлять, либо вообще программно? Откуда если из другого эксель файла то может есть смысл просто считывать отуда нужные данные и ничего никуда не копировать ручками? В общем вопросов больше чем ответов так что ждем.
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.
Цитата: Poltava от 26.05.2012, 12:54
Как будут вставлять? ручками писать, откуда то копировать по одной строке, или сразу много строк копировать и вставлять, либо вообще программно? Откуда если из другого эксель файла то может есть смысл просто считывать отуда нужные данные и ничего никуда не копировать ручками? В общем вопросов больше чем ответов так что ждем.
прошу прощения за задержку, на работе нет доступа к инету. Делаю эти задания уже дома, но моих знаний не хватает.
Итак.
1) просто 30 дней
2) Строки будут вставлять, копируя из похожего файла (по столбцам все одинаково, просто в них новые даты). Копировать будут вручную (ctrl+v). Можно по одной, а можно и по несколько сделать — это как Вам и мне удобнее реализовать. как проще. Соответственно начать сравнить — либо сразу, либо по нажатию кнопки — как нам удобнее, проще сделать!
3) надо сравнить по 1 артикулу (1 столбец) и по номеру заказа (3 столбец). Если совпадает, то мы берем последние две даты (послед. 2 столбца), обновляем их в старой строке, а новую-вставленную удаляем.
4)если повтор, обновляем данные, вставленную удаляем(пункт 3)
5) да, в конец будут всталвять 1 или несколько, пофиг, как получится сделать
6)все равно, главное чтобы работало. Но, сегодня покапался в УФ и заметил, что работает оно как-то некоррекотно.
Если делать 1 часть через УФ, что надо писать в формуле?
я понял, что правильно как-то так: =ДАТАЗНАЧ(тут просматриваем каждую ячейку столбца D)+30<ТДАТА()
В общем вот что я понял и как себе представляю. Есть кнопка при нажатии на которую ВСЯ база сравнивается находятся одинаковые артикулы сравниваются их даты и самые поздние даты обновляются на самые новые, а все остальные позиции удаляются.
Чем вас не устроило условное_форматирование ? у меня условие =$D2+30<ТДАТА() а область действия =$A$2:$H$41 но оно не совсем правильная тут для полного счастья нужно использовать динамический диапазон!
Если вам не кровь из носа нужно на завтра то постараюсь в понедельник предложить свой вариант. Кстати вы не думали о том чтоб не вставлять ручками а брать нужные данные из файла автоматом.
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.
Цитата: Poltava от 27.05.2012, 00:57
В общем вот что я понял и как себе представляю. Есть кнопка при нажатии на которую ВСЯ база сравнивается находятся одинаковые артикулы сравниваются их даты и самые поздние даты обновляются на самые новые, а все остальные позиции удаляются.
Чем вас не устроило условное_форматирование ? у меня условие =$D2+30<ТДАТА() а область действия =$A$2:$H$41 но оно не совсем правильная тут для полного счастья нужно использовать динамический диапазон!
Если вам не кровь из носа нужно на завтра то постараюсь в понедельник предложить свой вариант. Кстати вы не думали о том чтоб не вставлять ручками а брать нужные данные из файла автоматом.
все верно..
Но почему именно $D2? если поменять на $D3, то получатся уже другие результаты
Сегодня бы хоть что-нибудь показать..
затупил я жестко.
Так, я все понял, выделяет он верно.
Действительно, теперь бы динамический диапазон и решить вторую проблему с повтором.
Надеюсь на Вашу помощь
Решил задачу с диапазоном. Просто прописал, чтобы пустые ячейки не выделял красным.
Остается вторая задача с добавлением повторных строк
сроки вышли… тема пока закрывается
А я только сел за отладку. Ну ладно если вам не уже не нужно то тогда не буду и делать
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.