Расскажу о общей цели: Хочу сделать универсальный шаблон для решения задач на банковскую тему. Мне нужно чтобы выполнялось такое условие: берется на проверку несколько дат. На каждую дату стоит сумма операции.
Снятие1
20.04.2017
4500,00 ₽
Снятие2
31.05.2017
10000,00 ₽
Покупка1
15.04.2017
500,00 ₽
Покупка2
17.04.2017
500,00 ₽
Мне нужно, чтобы все даты сверялись с диапазоном
13.04.2017-13.05.2017
Если одна из дат входит в диапазон, то в ячейке стоит сумма операции на эту дату. Если же в диапазон входит несколько дат, то в ячейке стоит общая сумма. К примеру в данном примере в диапазон входит 3 даты, в ячейке будет отображаться сумма 5500.
Я делаю шаблон, который будет мне помогать решать задачи с разными условиями. Поэтому мне нужна формула, которая будет учитывать изменения в датах. Я пытался использовать функцию Если, И, ИЛИ. Но формула получалась очень длинной. =ЕСЛИ(ИЛИ(E93<B93;B93<G93;E93<B94;B94<G93;E93<B95;B95<G93;E93<B96;B96<G93);ИЛИ(C93+C94+C95+C96);ЕСЛИ(И(E93<B93;B93<G93);C93;ЕСЛИ(И(E93<B94;B94<G93);C94;0))) И это еще неполная формула. Поэтому я прошу вас помочь сделать ее меньше и универсальней. Спасибо.
Karataev, я в шоке, настолько короткая формула, и самое главное рабочая Спасибо большое, сам убил несколько часов в попытках сделать что то подобное с использованием функций Если. Ігор Гончаренко, Спасибо за другой вариант. С массивами вообще не дружу, надо будет почитать о них)
Можете объяснить есть ли разница в этих формулах? Они абсолютно одинаковые? Или у какой то из них есть больше преимуществ.
СУММЕСЛИМН должно быстрее работать и не должно нагружать файл. Использование в данном случае "СУММПРОИЗВ" не понятно, зачем надо. Обычно такую функцию используют, если нет подходящей функции.
Понял. Спасибо. Дальше возник такой вопрос. К примеру
20.04.2017
4500,00 ₽
31.05.2017
10000,00 ₽
16.04.2017
500,00 ₽
12.05.2017
500,00 ₽
Нужна такая формула, которая определит что 16/04/17 была совершена первая операция. Я опять же пытался использовать функцию Если. Но когда используются много вариантов, то формула получается сложной и большой. =ЕСЛИ(B5<B7;C5-H9-(J13-H13);ЕСЛИ(B7<B5;C7-H9-(J13-H13);0)) и есть сомнения в его универсальности.
БМВ, использовании массивных формул вроде всегда нагружает файл. Сама по себе функция "СУММПРОИЗВ" не массивная (вводится без Ctrl+Shift+Enter), но смысл от этого не меняется, просто не надо нажимать сочетание клавиш Ctrl+Shift+Enter.
БМВ, я данной ситуации вообще не старался (решение в фоновом режиме). склонен к мысли, что СУММЕСЛИМН - быстрее (понятно, что не на этих данных замерять)))
Ігор Гончаренко, Спасибо. Чуть поковырялся и получилось. =ВПР(МИН(B93:B96);B93:C96;2;0) Тперь при поиске наименьшей даты, автоматически отображается сумма которая была совершена в эту дату.
Ігор Гончаренко, Извините, не так выразился. Можете написать аналог моей формулы, только в другом варианте? Мне для общего понимания, чтобы знать как еще это можно сделать.
Offtop Karataev, Какая разница, массивная или нет, нагрузку может показать только тест или исходники этих функций. Первые покажут абсолютный результат, а второе методику.В любом случае расчет функции ведут с использованием внутренних массивов, а то что передается Range или Array в функцию, так это не сильно нагрузит.
UPD: Под рукой оказался файл с датами и временим на 300000 строк. Раницу почувствовал при множественных расчетах одного и то гоже и не в пользу SUMPRODUCT, при этом что в сравнении с SUMIFS, SUMIF и SUM.
БМВ, да, надо создать тестовый файл. Я сейчас попробовал сделать и не смог - массивные функции тоже быстро работают. Может быть Excel стал лучше работать, пропали проблемы с массивами.
Доброе утро! Возникла новая проблема с теми же датами. Мне нужно определить комиссию за снятие по операциям, которые происходили в определенный промежуток времени.
Снятие1
20.04.2017
4 500,00 ₽
Снятие2
21.04.2017
10 000,00 ₽
Покупка1
0
0
Покупка2
0
0
Нужна формула, которая определит что эти даты входят в промежуток от 13/04/17 до 13/05/17. И если входят, то комиссия по этим операциям должна составить (4500 +10 000)*5.9%. Если одна из дат не будет входить в диапазон, тогда только с одной операции будет взиматься комиссия. Я пытался использовать формулу =ЕСЛИ(И(B5>=E5;B5<E5+F5);C5*5,9%;0). Но она слишком простая и не универсальная. Работает только на одну дату. Если попытаться включить туда несколько, то будет как обычно большая сложная формула.
В прикрепленном файле ячейку H11 нужно вставить эту формулу.
Придумал такую формулу. =ЕСЛИ(СУММПРОИЗВ((B5:B6>=E5)*(B5:B6<=G5)*C5:C6);СУММПРОИЗВ((B5:B6>=E5)*(B5:B6<=G5)*C5:C6)*5,9%;)
Нашел в ней не состыковки. Если Дата 2 не входит в диапазон, то он все равно использует в решении (C5:C6)*5,9%, наверное это потому что я не написал ничего в значении "ЛОЖЬ", но формула опять получается сложной и длинной. Есть простой аналог?
Все таки нашел универсальную формулу. =ЕСЛИ(СУММПРОИЗВ((E5<=B5:B6)*(B5:B6<=G5)*C5:C6);СУММПРОИЗВ((E5<=B5:B6)*(B5:B6<=G5)*C5:C6)*5,9%;ЕСЛИ(И(E5<=B5;B5<=G5);C5*5,9%;ЕСЛИ(И(E5<=B6;B6<=G5);C6*5,9%;))) Все хорошо работает. Но формула большая. Есть более красивые аналоги?
sbirliko, Просто размер комиссии округляется до сотых в большую сторону. поэтому я там стрелочку провел и отдельно указал округление. Ответ должен быть в ячейке H11 - 855.5