Форум программистов, компьютерный форум, киберфорум
MS Office Excel
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/34: Рейтинг темы: голосов - 34, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 67

Расчет суммы простого и високосного года

07.02.2015, 12:27. Показов 7441. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые гуру, помогите в очередной раз, у меня есть формула которая правильно ведет расчет суммы, как для простого так и для високосного года, а так же стыков этих годов, т.е. определяет сколько дней в каком году осталось и правильно за эти дни высчитывает суммы, но одна проблем она это делает правильно если разрыв межу датам только в один месяц (то, тут работает безупречно), помогите ее преобразовать, что бы она правильно считала если разрыв между датами становиться два и более месяцев. Простые примеры с формулой в файле. Спасибо.
Вложения
Тип файла: xlsx Пример.xlsx (12.3 Кб, 60 просмотров)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.02.2015, 12:27
Ответы с готовыми решениями:

Программа вычисления високосного года, сезона года по месяцу, количеству дней от начала года
добрый вечер, уважаемые программисты! помогите,пожалуйста,разобраться в программе. в программе нужно: 1)вычислять является ли год...

1 января не високосного года-понедельник. Вводится число и месяц этого года. Вывести день недели этого дня
1 января не високосного года-понедельник. Вводится число и месяц этого года. Вывести день недели этого дня

Вычисление високосного года
Привет Всем!!! Ребят нужна срочно помощь, нужно переписать программу, а точнее исправить.... program ves_god; uses crt; type ...

8
6180 / 945 / 313
Регистрация: 25.02.2011
Сообщений: 1,381
Записей в блоге: 1
07.02.2015, 12:45
Лучший ответ Сообщение было отмечено kiramiD как решение

Решение

не очень быстрая формула:
Code
1
=СУММПРОИЗВ($C$4*$D$4/(ДЕНЬ(ДАТА(ГОД(СТРОКА(ИНДЕКС(A:A;B6+1):ИНДЕКС(A:A;B7)));3;))+337))
или так:
Code
1
=СУММПРОИЗВ($C$4*$D$4/(ДЕНЬ(ДАТА(ГОД(B6+СТРОКА(ДВССЫЛ("1:"&B7-B6)));3;))+337))
Наличие волатильной ДВССЫЛ() заставляет формулу постоянно пересчитываться (при каждом изменение на листе).
Поэтому первая формула - предпочтительней
2
6027 / 3221 / 719
Регистрация: 23.11.2010
Сообщений: 10,760
07.02.2015, 12:47
m-ch, я попробовала использовать ДОЛЯГОДА, с базисом 3, у меня получается разница в 2 рубля?
Эта функция не подходит для такого расчета или я что-то не так делаю?
0
6180 / 945 / 313
Регистрация: 25.02.2011
Сообщений: 1,381
Записей в блоге: 1
07.02.2015, 13:03
Быстрая формула, если даты находятся в одном году или в соседних:
Code
1
=$C$4*$D$4*((ДАТА(ГОД(B6)+1;1;)-B6)/(ДЕНЬ(ДАТА(ГОД(B6);3;))+337)+(B7-ДАТА(ГОД(B6)+1;1;))/(ДЕНЬ(ДАТА(ГОД(B7);3;))+337))
Если между датами более года (разница в годах 2 и более) то формула может вернуть неверный результат, для этого лучше использовать первую формулу.

PS: кстати, Ваша формула неверно считает, если даты принадлежат одному месяцу

Добавлено через 7 минут
Цитата Сообщение от Fairuza Посмотреть сообщение
я попробовала использовать ДОЛЯГОДА, с базисом 3, у меня получается разница в 2 рубля?
Эта функция не подходит для такого расчета или я что-то не так делаю?
Для первого примера ТС с 21.12.2015 по 21.01.2016 - в 2015 год попадает 10 дней, в 2016 - 21 день
поэтому расчет процентов должен быть: 30000 * 23% * (10/365 + 21/366) = 584,942735234673

ДОЛЯГОДА("21.12.2015";"21.01.2016";3) возвращает величину равную 31/365, а для високосного года нужно дни делить на 366
0
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 67
07.02.2015, 14:41  [ТС]
Какие вы все умные, сильно благодарю, т.е. если даже меньше месяца или больше года (нескольких годов) разрыв между датами (кстати, очень хорошее замечание), то использовать лучше эту формулу я правильно понял Ваш ответ???
Code
1
=СУММПРОИЗВ($C$4*$D$4/(ДЕНЬ(ДАТА(ГОД(СТРОКА(ИНДЕКС(A:A;B6+1):ИНДЕКС(A:A;B7)));3;))+337))
Добавлено через 23 минуты
Да и, что такое за массив A:A в этой формуле (его смысл), в двух словах в качестве ликбеза...
0
6180 / 945 / 313
Регистрация: 25.02.2011
Сообщений: 1,381
Записей в блоге: 1
07.02.2015, 18:51
Во втором сообщении две идентичные формулы, которые работают по одному алгоритму.
Часть формулы: СТРОКА(ИНДЕКС(A:A;B6+1):ИНДЕКС(A:A;B7)) аналогична записи B6+СТРОКА(ДВССЫЛ("1:"&B7-B6))

Даты в Excel это числа (сколько дней прошло с 01.01.1900), так дата 21.12.2015 соответствует числу 42359, а дата 21.01.2016 - это число 42390
ИНДЕКС(A:A;B6+1):ИНДЕКС(A:A;B7) формирует ссылку на диапазон A42360:A42390
функция СТРОКА преобразует диапазон в массив чисел: {42360:42361:42362: … :42388:42389:42390}
Фактически получаем полный список дат, которые попадают в интервал, для каждой даты определяем количество дней в году, и вычисляем процент, в итоге все суммируем через СУММПРОИЗВ
Вместо СУММПРОИЗВ можно использовать функцию СУММ, но тогда формулу нужно вводить как формулу массива (нажатием Ctrl+Shift+Enter), СУММПРОИЗВ не нуждается в массивном вводе.

Вместо диапазона A:A в формуле можно использовать любой другой столбец, B:B или C:C, на результат это не скажется, потому что нам нужно определить массив строк входящий в нужный диапазон.

Формула "медленная", потому что она формирует большой массив со всеми датами и с каждой датой производит вычисления.
Формула из 4 сообщения не формирует массив, расчет производится быстро.
0
0 / 0 / 0
Регистрация: 01.11.2016
Сообщений: 1
02.11.2016, 16:00
Классные формулы. Однако если в периоде есть високосный год, то считают не правильно. Во вложении файл с двумя вкладками. Вкладка проверка тупым методом показывает, что как только период захватывает 2016 год (то есть високосный).
Вложения
Тип файла: xlsx ??????_????????_1.3.xlsx (13.6 Кб, 23 просмотров)
0
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 67
02.11.2016, 17:38  [ТС]
Так, у Вас логика в простом расчёт не верна, почему вы високосный год проверяете по наличию числа 29 в каждом месяце, а не в феврале 2016, это не верно, поэтому кроме февраля у вас весь остальной високосный год подставляется 365 дней в формулу, а не 366 как было бы правильно.
0
3 / 3 / 1
Регистрация: 05.05.2014
Сообщений: 173
05.05.2023, 07:15
Попробуйте это. Считает вроде бы правильно.
Вложения
Тип файла: xlsx класс формула с проверкой.xlsx (13.3 Кб, 28 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.05.2023, 07:15
Помогаю со студенческими работами здесь

Определение високосного года
Доброго дня. Не могу понять, как определить високосный год в программе. С помощью метода IsLeapYear. Помогите private void...

Определение високосного года
<html> <body> <script> var a=prompt('Введите год:', ''); if ((a mod 100=0) && (a mod 400 != 0)) { ...

Определение високосного года
Помогите, пожалуйста, не могу понять в чем ошибка. Почему компилятор "ругается"... #include <iostream> using namespace...

Определение високосного года
#include <iostream> using namespace std; bool isLeapYear(unsigned int year) { if (year % 4 == 0 && year % 100 != 0 ||...

Задача с нахождением високосного года
Здравствуйте Есть следующая задача Найти високосный год в диапазоне от 0 до 2040 Год вводиться с клавиатуры Решил я ее вот так. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru