Страницы: 1 2 3 След.
RSS
[ Закрыто ] Альтернатива РАЗНДАТ обычными формулами
 
Видел кратко сегодня 2 темы Лунтика по замене скрытой функции РАЗНДАТ на обычные формулы.
Пока отвлекся, уже одну тему закрыли, а другую удалили.
Сильно не вникал в задачу иначе бы точно запутался ))
Но так как что-то уже было надергано из источника, то выложу здесь вариант для дат, больших текущей, аналогично использованию РАЗНДАТ с параметрами "m" и "md".  В столбце F - формулы с использованием РАЗНДАТ а в столбце G - обычными формулами.
 
ZVI, Владимир, добрый день. В указанной первой теме Лунтик так и не смог пояснить "правил игры" по этому и закрыли на четвертом листе первую.
но смотрите, он по каким то причинам хочет видеть
5 мес 21 день а не 4 мес 21 дн 4 мес 21 дн
ну и если уйти от технического приема в сторону для чего - это тоже было на уровне "так хочется" и нытье о помощи. Мне вот так и не понятно зачем ему это.

что касается техники, то по прежнему остается открытый вопрос, "черный в белую полосочку или белый в черную", то есть между 28.02.2019 и 29.02.2020 12 месяцев или 12 месяцев и 1 день.
Изменено: БМВ - 07.02.2019 20:31:39
По вопросам из тем форума, личку не читаю.
 
Михаил, добрый вечер, я специально не вникал в нюансы Fuzzy Logic темы, а лишь изобразил прямой аналог РАЗНДАТ по результату, так как где-то там звучало, что в ОpenОffice нет такой функции. А сойдет или нет - мне не очень-то и важно  ;)
Изменено: ZVI - 07.02.2019 22:21:15
 
На всякий случай, когда-то уже приводил примеры ошибок функции РАЗНДАТ в теме Разница дат
Причем, у разных версий Office попадались свои ошибки.
У РАЗНДАТ странная логика, но её назначение было в совместимости в Lotus 1-2-3 со всеми ошибками, поэтому она и скрыта.
 
ZVI,  смотрите, для сегодняшнего дня у Вас в ячейке C24 10 мес 30 дн, а должно быть 10 мес 27 дн. То есть месяцы должны считаться календарные. Подскажите, пожалуйста, как поправить формулу?

Ребята, вот мне реально не понятно, - что Вам не понятно. Есть рабочие формулы Михаила Витальевича С. и ZVI. Их нужно лишь чуть-чуть переделать. Всё вроде объяснено и в файле показано. Что не понятно?
 
Вы напишите как вы считает и почему это так, какие дни входят и почему именно так, только не так как файле:  A и B  должно быть С. Про всю бесполезность такого отображения этого Вам уже написали ранее. Это все равно что навигатор бы подсказывал, что через 100км 431м 24см вам резко вправо.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал: что через 100км 431м 24см вам резко вправо
Так мне именно это и нужно.
Цитата
БМВ написал: Вы напишите как вы считает и почему это так
Считаем для ячейки С24: 10 месяцев - это понятно - дней: 17 дней в этом феврале оставшихся + 10 дней января 2020 = 27 дней. Подскажите, пожалуйста, как исправить формулу.
 
=12*(ГОД(C24)-ГОД(СЕГОДНЯ()))+МЕСЯЦ(C24)-МЕСЯЦ(СЕГОДНЯ())-(ДЕНЬ(C24)<ДЕНЬ(СЕГОДНЯ()))&" мес "&ЕСЛИ(ДЕНЬ(C24)<ДЕНЬ(СЕГОДНЯ());ДЕНЬ(C24)+ДЕНЬ(КОНМЕСЯЦА(СЕГОДНЯ();0))-ДЕНЬ(СЕГОДНЯ());ДЕНЬ(C24)-ДЕНЬ(СЕГОДНЯ()))&" дн"

или немного покороче:
=12*(ГОД(C24)-ГОД(СЕГОДНЯ()))+МЕСЯЦ(C24)-МЕСЯЦ(СЕГОДНЯ())-(ДЕНЬ(C24)<ДЕНЬ(СЕГОДНЯ()))&" мес "&
ДЕНЬ(C24)-ДЕНЬ(СЕГОДНЯ())+ЕСЛИ(ДЕНЬ(C24)<ДЕНЬ(СЕГОДНЯ());ДЕНЬ(КОНМЕСЯЦА(СЕГОДНЯ();0)); )&" дн"
Изменено: ZVI - 11.02.2019 15:18:55
 
Цитата
Лунтик написал:
Что не понятно? Уже детально объяснил про ячейку C24. Объясните, пожалуйста, что не понятно.
а теперь все тоже про с23 4 мес 45 дней устроит? 17 в феврале и 28 в июне - так?
Изменено: БМВ - 11.02.2019 15:20:26
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал: но вопрос про 45 так и останется открытым
Михаил, да вроде учел же ж ))
Для C23: 28-11=17 дн  
Изменено: ZVI - 11.02.2019 15:26:19
 
Меня английский эксель. Вставляю руками - формула как-то меняется. Покажите в файле, пожалуйста.

Цитата
БМВ написал: 17 в феврале и 28 в июне - так?
Так тут уже за 31 день. Нужно КАЛЕНДАРНЫЕ месяцы считать.
 
Цитата
Лунтик написал: Покажите в файле, пожалуйста.
К сообщению #18 прикреплен файл
 
Цитата
БМВ написал:
и вот где хоть раз это упомянуто
   Было упомянуто, что это - даты сертификатов. А кто считает срок действия сертификата иначе, чем по календарным месяцам? Да и исходя из объяснений по конкретным ячейкам разве сложно было понять?
 
К тому же
Цитата
Лунтик написал:
То есть месяцы должны считаться календарные
в посте 9
 
Лунтик, Вы файл смотреть-то будете?
 

Del

Изменено: БМВ - 11.02.2019 21:57:53
По вопросам из тем форума, личку не читаю.
 
Цитата
ZVI написал:
Вы файл смотреть-то будете?
Было много работы. Посмотрел только сейчас. В ячейке C5 получается 53 мес 11 дн., а должно быть 53 мес 9 дн. Скажите, пожалуйста, как поправить формулу?
 
Цитата
Лунтик написал: а должно быть 53 мес 9 дн
Покажите расчет, как получается 9
 
Цитата
Лунтик написал:
В ячейке C5 получается 53 мес 11 дн., а должно быть 53 мес 9 дн
объясните, почему?
 
Посмотрите, так Вам нужно?
 
Испортилась ячейка C23: было 4 мес 17 дн - и это правильно, а стало 4 мес 15 дн. Скажите, пожалуйста, как поправить формулу?

Цитата
ZVI написал: Покажите расчет, как получается 9
Объясняю: 53 мес - понятно, дни: я считаю так: поставим в ячейку C5 дату 01.08.2023. Считаем: 17 дней февраля и 1 день августа - 18 дней. Вычитаем 9 дней (между 1 августа и 22 июля) и получаем 9 дней. Итого 53 мес 9 дней.
 
...Удалено...
Изменено: ZVI - 12.02.2019 14:30:33
 
Лунтик, посчитайте по такой логике все остальные ячейки, где дата больше текущей, и приложите результат.
 
Если нужно быстро посчитать количество дней/месяцев между датами, то можно воспользоваться функцией ДНЕЙ360(), в ней есть разные варианты (методы)
Например, так:
Код
=ЦЕЛОЕ(ДНЕЙ360(A1;B1)/30)&" мес "&ОСТАТ(ДНЕЙ360(A1;B1);30)&" дн"

РАЗНДАТ имеет определенные ошибки, Владимир дал ссылку

Наверняка задача имеет свое прикладное назначение и есть методология для подсчета (лет, месяцев, дней)
например, в Постановление Правительства РФ от 24 июля 2002 г. N 555"Об утверждении Правил подсчета и подтверждения страхового стажа для установления трудовых пенсий" в п. 35 указано:
Цитата
35. Исчисление периодов работы ... производится в календарном порядке из расчета полного года (12 месяцев). При этом каждые 30 дней указанных периодов переводятся в месяцы, а каждые 12 месяцев этих периодов переводятся в полные годы.
Думаю, что функция ДНЕЙ360() как раз для этого случая.
 
Цитата
MCH написал:
Думаю, что функция ДНЕЙ360() как раз для этого случая.
Ещё есть ДОЛЯГОДА()... тоже можно использовать, и даже формулы полегче получаются...
Но для метода Лунтика, её тоже тяжко использовать.
 
Лунтик,  в приложенной таблице заполните, пожалуйста, столбцы C:D , а в E напишите комментарии по расчету.
Мы тогда либо разберемся в необходимом Вам алгоритме, либо поймем, что он противоречив.
Изменено: ZVI - 11.02.2019 19:00:24
 
Здравствуйте, коллеги! Не может быть никакой логики для разности в месяцах, если ее нет для суммы.
Код
Sub test()
  Debug.Print DateAdd("m", 1, DateSerial(2019, 1, 28))   ' возвращает 28.02.2019
  Debug.Print DateAdd("m", 1, DateSerial(2019, 1, 31))   ' также возвращает 28.02.2018
    
  Debug.Print DateAdd("m", 1, DateSerial(2019, 2, 28))   ' возвращает 28.03.2019
  Debug.Print DateAdd("m", 2, DateSerial(2019, 1, 31))   ' возвращает 31.03.2019
End Sub

Например, добавляя два раза по месяцу к 31.01.2019, мы получаем результат, отличающийся от добавления двух месяцев сразу на три дня.
P.S. Особая благодарность Юлию Ц. и Августу :)  
Изменено: sokol92 - 11.02.2019 19:06:39
Владимир
 
Методики с датами обычно все какие-то кривоватые (стаж и выслуги и т.п.), да и в VBA даты обязаны были унаследовать ошибки истории
Изменено: ZVI - 12.02.2019 11:53:57
 
Цитата
ZVI написал: в приложенной таблице заполните, пожалуйста, столбцы C:D
Пожалуйста.
 
вариант для дней для последнего примера
Код
=ЕСЛИ(ДЕНЬ(B2)<=ДЕНЬ(A2);КОНМЕСЯЦА(A2;0)-A2+B2-ДАТА(ГОД(B2);МЕСЯЦ(B2);1)+1;ЕСЛИ(КОНМЕСЯЦА(A2;0)=КОНМЕСЯЦА(B2;0);B2-A2;B2-КОНМЕСЯЦА(B2;-1)+КОНМЕСЯЦА(A2;0)-A2))
Лень двигатель прогресса, доказано!!!
Страницы: 1 2 3 След.
Наверх