powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Прошу помощи по распределению суммы в зависимости от дат начала и завершения в екселе
25 сообщений из 33, страница 1 из 2
Прошу помощи по распределению суммы в зависимости от дат начала и завершения в екселе
    #36951000
Festan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Прощу помочь со следующей проблеме:
Требуется распределить стоимость работы в зависимости от даты начала и окончания работы по году. Удалось сделать это с помощью формулы, однако всегда возникает погрешность примерно 10%, прилагаю файл.
P.S. vba не знаю, поэтому все делаю с помощью формул, однако если кто-то предложит решение с помощью макросов, буду безмерно благодарен
...
Рейтинг: 0 / 0
Прошу помощи по распределению суммы в зависимости от дат начала и завершения в екселе
    #36951009
Festan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
почему то не прикрепился файл
...
Рейтинг: 0 / 0
Прошу помощи по распределению суммы в зависимости от дат начала и завершения в екселе
    #36951065
Festan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Прошу помощи по распределению суммы в зависимости от дат начала и завершения в екселе
    #36951496
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть вам надо распределить сумму и в соответствии с количеством дней в каждом месяце?
Кстати, действительно удобнее такое проделать в VBA, но можно и формулами...
...
Рейтинг: 0 / 0
Прошу помощи по распределению суммы в зависимости от дат начала и завершения в екселе
    #36951521
Festan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM,

да, если к примеру, работа длится 1 день, то и стоить она в этом месяце должна меньше чем в остальных. Никак не могу поймать эту погрешность уже по всякому перепробовал.
...
Рейтинг: 0 / 0
Прошу помощи по распределению суммы в зависимости от дат начала и завершения в екселе
    #36951539
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Festan,

-количество дней в месяц
-общее еоличество дней
-остаток последнему
...
Рейтинг: 0 / 0
Прошу помощи по распределению суммы в зависимости от дат начала и завершения в екселе
    #36951542
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот, например, формула для BQ3 (и растянуть вправо):
Код: plaintext
=ЕСЛИ(BQ$ 2 >$BM3; 0 ;ОКРУГЛ((ЕСЛИ(BR$ 2 <$BM3;BR$ 2 ;$BM3)-BQ$ 2 )/($BM3-$BL3)*$BN3; 2 ))
Правда, может возникнуть разница в +/- 2-3 копейки из-за округления/сложения. Но это тоже решаемо...
...
Рейтинг: 0 / 0
Прошу помощи по распределению суммы в зависимости от дат начала и завершения в екселе
    #36951543
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Festan,

с учетом дней начала и конца
...
Рейтинг: 0 / 0
Прошу помощи по распределению суммы в зависимости от дат начала и завершения в екселе
    #36951562
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПЕНСИОНЕРКАFestan,

с учетом дней начала и конца
а если переход года - учет расходов прошлого периода

похоже без макроса не обойтись , особенно если выполняемых работ несколько
...
Рейтинг: 0 / 0
Прошу помощи по распределению суммы в зависимости от дат начала и завершения в екселе
    #36951582
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ещё - "месяцы по году" это всегда 12 месяцев того года, к которому относятся "дата старт" и "дата финиш"? И эти даты - относятся всегда к одному только году? Во всей таблице?
...
Рейтинг: 0 / 0
Прошу помощи по распределению суммы в зависимости от дат начала и завершения в екселе
    #36951651
Festan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM,

решил проблему неспортивно...)) выгрузил все в прожект, там сделал распределение и кинул обратно...
Спасибо, за проявленный интерес!
...
Рейтинг: 0 / 0
Прошу помощи по распределению суммы в зависимости от дат начала и завершения в екселе
    #36951683
Festan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM,

дата старта всегда лежит в пределах этого года. Финиш может лежать за пределами
...
Рейтинг: 0 / 0
Прошу помощи по распределению суммы в зависимости от дат начала и завершения в екселе
    #36951698
Festan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTMВот, например, формула для BQ3 (и растянуть вправо):
Код: plaintext
=ЕСЛИ(BQ$ 2 >$BM3; 0 ;ОКРУГЛ((ЕСЛИ(BR$ 2 <$BM3;BR$ 2 ;$BM3)-BQ$ 2 )/($BM3-$BL3)*$BN3; 2 ))
Правда, может возникнуть разница в +/- 2-3 копейки из-за округления/сложения. Но это тоже решаемо...
огромная погрешность по этой формуле, неправильно считает
...
Рейтинг: 0 / 0
Прошу помощи по распределению суммы в зависимости от дат начала и завершения в екселе
    #36952513
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FestanAndreTMВот, например, формула для BQ3 (и растянуть вправо):
Код: plaintext
=ЕСЛИ(BQ$ 2 >$BM3; 0 ;ОКРУГЛ((ЕСЛИ(BR$ 2 <$BM3;BR$ 2 ;$BM3)-BQ$ 2 )/($BM3-$BL3)*$BN3; 2 ))
Правда, может возникнуть разница в +/- 2-3 копейки из-за округления/сложения. Но это тоже решаемо...
огромная погрешность по этой формуле, неправильно считает
"Не верю (с)"
Приведите пример таблички, где "огромная погрешность".
Кстати, как обычно, мною был оставлен "допуск" на то, что вы всё-же попытаетесь формулу разобрать, а не тупо скопировать... поскольку есть нюансик - в "месяцы по году" должна существовать как минмум одна дата начала месяца бОльшая, чем "дата финиш"...
...
Рейтинг: 0 / 0
Прошу помощи по распределению суммы в зависимости от дат начала и завершения в екселе
    #36952538
Festan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM,

я понял уже что если финиш позже декабря, то не работает, но погрешность все равно есть и что хуже всего она в минусе, то есть распределяется больше чем есть всего.
...
Рейтинг: 0 / 0
Прошу помощи по распределению суммы в зависимости от дат начала и завершения в екселе
    #36952613
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Festan,

А, ну я понял. Просто начальный пример был немного некорректен, это потом до меня дошло, что и начальная дата может быть не обязательно 01.января.

Например, заменим формулу на (для BQ3):
Код: plaintext
=ОКРУГЛ($BN3/($BM3-$BL3+ 1 )*(МИН($BM3;BR$ 2 - 1 )-МАКС($BL3;BQ$ 2 )+ 1 ); 2 )
при этом проверять будем только положительные значения (для BO3):
Код: plaintext
=СУММЕСЛИ(BQ3:CB3;">0";BQ3:CB3)
а отрицательные по мемяцам уберем условным форматированием.

Изврат полный :)
Проще написАть процедуру, которая всё и посчитает...
...
Рейтинг: 0 / 0
Прошу помощи по распределению суммы в зависимости от дат начала и завершения в екселе
    #36952761
Festan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM,

)) то что изврат, понятно по моему первому примеру и используемой формуле, она то как раз в принципе более менее считает, просто где-то чего то не учитывает - погрешность возрастает с увеличением длительности)))
в процедурах не силен, поэтому спросил тут.
...
Рейтинг: 0 / 0
Прошу помощи по распределению суммы в зависимости от дат начала и завершения в екселе
    #36953186
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте, скажем, вот такой код :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
Function Min2D(ByVal v1 As Date, ByVal v2 As Date) As Date
    Min2D = IIf(v1 < v2, v1, v2)
End Function

Function Max2D(ByVal v1 As Date, ByVal v2 As Date) As Date
    Max2D = IIf(v1 > v2, v1, v2)
End Function

Sub Распределение()
    nRow = ActiveCell.Row
    dStart = Cells(nRow,  64 ).Value 'BL
    If IsEmpty(dStart) Then Exit Sub
    dEnd = Cells(nRow,  65 ).Value 'BM
    nSum = Cells(nRow,  66 ).Value 'BN
    nColSum =  67  ' BO
    nCol =  69  ' BQ
    i = nCol
    While IsDate(Cells( 2 , i).Value)
        Cells(nRow, i).ClearContents
        i = i +  1 
    Wend
    i = nCol
    nDaySum = nSum / (dEnd - dStart +  1 )
    dFirstDayMonth = CDate("01.01." & Year(dStart))
    While nSum >  0 
        Cells( 2 , i).Value = dFirstDayMonth
        dFirstDayMonthNext = DateAdd("m",  1 , dFirstDayMonth)
        nDays = Min2D(dEnd, dFirstDayMonthNext -  1 ) - Max2D(dStart, dFirstDayMonth) +  1 
        If dEnd >= dFirstDayMonth And dEnd <= dFirstDayMonthNext -  1  Then
            Cells(nRow, i).Value = nSum
            nSum =  0 
        Else
            Cells(nRow, i).Value = IIf(nDays <  0 ,  0 , Round(nDays * nDaySum,  2 ))
        End If
        dFirstDayMonth = dFirstDayMonthNext
        nSum = nSum - Cells(nRow, i).Value
        i = i +  1 
    Wend
    Cells(nRow, nColSum).Formula = "=SUM(" & Cells(nRow, nCol).Address(False, False) & ":" & Cells(nRow, i -  1 ).Address(False, False) & ")"
End Sub
Вставьте его в модуль листа и запускайте через Alt+F8 или на кнопочку повесьте...
В-общем, если маркер будет установлен на строчку, которую нужно распределить - получите правильное расписание сумм. Ну и можете запускать хоть на таблице из ста строк - для каждой будет все перерасписано. Единственное условие - год "дата старт" должен быть одинаковым во всех строках.
...
Рейтинг: 0 / 0
Прошу помощи по распределению суммы в зависимости от дат начала и завершения в екселе
    #36953442
Festan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM,

Спасибо большое! все работает!! а можно ли в код добавить условие и куда дописать, чтобы переходил на следующую ячейку и так до последнего заполненного значения?
...
Рейтинг: 0 / 0
Прошу помощи по распределению суммы в зависимости от дат начала и завершения в екселе
    #36953643
Festan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
дотумкал сам - дописал цикл на 10000 повторений, все работает

еще раз спасибо
...
Рейтинг: 0 / 0
Прошу помощи по распределению суммы в зависимости от дат начала и завершения в екселе
    #36954274
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На мой взгляд - это не та задача, ради которой нужно писать макрос.
Нет тут ни громоздких вычислений ни массивов огромных, ни каких-то операций с объектами.
Есдинственное есть сложное условия определения колва дней относящихся к работе в этом месяце, но его расчет можно описать не только в макросе, но и в формуле, в промежуточных ячейках, в именованных формулах и т.д., при этом сохраняя удобство растягивания формул и обновление на лету.
Я в примере усложнил задачу и вообще пользовался только одной датой - тада начала текущего месяца (не трогая смежные столбцы) - смотрите что получилось в файле. Сложноватое условие, но не настолько чтобы переходить к макросам, а если внести дополнительную строку, то вообще просто.
...
Рейтинг: 0 / 0
Прошу помощи по распределению суммы в зависимости от дат начала и завершения в екселе
    #36954386
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deggasad,

С другой стороны, макрос требует меньших ресурсов (не на написание - на хранение/пересчет) - вы же видели пост по поводу "1000 строк" :)
Да и править его при изменении условий - проще (ИМХО).
...
Рейтинг: 0 / 0
Прошу помощи по распределению суммы в зависимости от дат начала и завершения в екселе
    #36955321
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMDeggasad,
С другой стороны, макрос требует меньших ресурсов (не на написание - на хранение/пересчет) - вы же видели пост по поводу "1000 строк" :)...
С эимм согласен,
но в этом конкретном случае нет сложных расчетов, особенно с промежуточными столбцом и строкой.

AndreTMДа и править его при изменении условий - проще (ИМХО).
С этим несогласен, и очень даже:
- чтобы править макросы нужно их понимать
- нужно будет править при изменении кол-ва строк или столбцов
- не представляю что в условии может поменяться?
...
Рейтинг: 0 / 0
Прошу помощи по распределению суммы в зависимости от дат начала и завершения в екселе
    #36955398
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeggasadAndreTMДа и править его при изменении условий - проще (ИМХО).
С этим несогласен, и очень даже:
- чтобы править макросы нужно их понимать
- нужно будет править при изменении кол-ва строк или столбцов
- не представляю что в условии может поменяться?
- ну так если человек уже согласен на макросы - это его проблемы, чему учиться
- ?? - вообще-то, это решаемо средствами языка, как вы помните, и намного проще контролируется
- самый простой пример - надо будет делать распределение "только по рабочим дням месяца", а не календарным, как сейчас
...
Рейтинг: 0 / 0
Прошу помощи по распределению суммы в зависимости от дат начала и завершения в екселе
    #36955959
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMDeggasadпропущено...

С этим несогласен, и очень даже:
- чтобы править макросы нужно их понимать
- нужно будет править при изменении кол-ва строк или столбцов
- не представляю что в условии может поменяться?
- ну так если человек уже согласен на макросы - это его проблемы, чему учиться
- ?? - вообще-то, это решаемо средствами языка, как вы помните, и намного проще контролируется
- самый простой пример - надо будет делать распределение "только по рабочим дням месяца", а не календарным, как сейчас

все пункты по своему правильны, но я все предпочитаю не прибегать к макросам без явной необходимости (один из основных оментов - совместимость с ОО)
з.ы.: задачка с рабочими днями мною тоже решена формулами уже при использовании справочника на отдельном листе если нужно будет
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Прошу помощи по распределению суммы в зависимости от дат начала и завершения в екселе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]