SumProduct несколько критериев с текстом - PullRequest
0 голосов
/ 09 октября 2019

SumProduct

У меня есть банковский реестр слева. Я хочу код справа, чтобы сообщить мне сумму все время, когда описание "Аренда" оплачивается в этом месяце. Я пробовал index, sumproduct и sumif. Я не могу найти правильный способ поиска по месяцу, году и тексту.

Ответы [ 2 ]

1 голос
/ 09 октября 2019

Solution

Предположим, у вас есть следующие именованные диапазоны :

  • BankDate , являющийсястолбец даты в вашей банковской регистрационной таблице;
  • Desc - столбец описания в вашей банковской регистрационной таблице;
  • Dr - дебетовый столбец в вашем банковском реестре. таблица банковского реестра.

Если дата просмотра text, вы можете использовать следующую формулу:

=SUMPRODUCT((Desc="Rent")*(TEXT(BankDate,"mmm yyyy")=G2)*Dr)

Если дата поиска date, выможно использовать следующую формулу:

=SUMPRODUCT((Desc="Rent")*(TEXT(BankDate,"mmm yyyy")=TEXT(G4,"mmm yyyy"))*Dr)

Измените G2 или G4 в приведенных выше формулах в соответствии с вашим реальным случаем.

Логика заключается в использовании Функция TEXT для преобразования BankDate в тот же формат, что и дата поиска, а затем используйте функцию SUMPRODUCT для возврата арендной платы по месяцам.

Ps. использование SUMPRODUCT может быть излишним, так как SUMIFS , предложенный @ProfoundlyOblivious, на самом деле быстрее в расчете Excel.

Ps2. Как отмечает @ProfoundlyOblivious, в Excel есть интересное поведение с точки зрения обработки текстовой даты как «реальной» даты в определенных сценариях. Хотя это может не относиться к вопросу этого поста, я хотел бы поделиться некоторыми результатами моих тестов здесь для всех, кто интересуется:

tests

1 голос
/ 09 октября 2019

Не ясно, в каком формате находятся ваши таблицы.

SUMIFS - самое простое решение, но оно будет работать только в том случае, если в банковском реестре используется формат даты Excel. Это немного усложняется, если эти даты отформатированы в виде текста.

Построение формулы SUMIFS начинается с SUM RANGE. Это долгожданное изменение, отличное от обратной конструкции и ошибочно названное SUMIF (больше похоже на IFSUM, если вы спросите меня)

=SUMIFS(SUM RANGE, CRITERIA 1 RANGE, CRITERIA 1, CRITERIA 2 RANGE, CRITERIA 2, CRITERIA 3 RANGE, CRITERIA 3...)

Используя ваш пример:

  • SUM RANGE, столбец «Дебет» в банковском реестре (BankRegisterDebitRange)

  • CRITERIA 1 RANGE, столбец «Описание» в банковском реестре (BankRegisterDescriptionRange)

  • Criteria 1, строка «Аренда»

  • Criteria 2 Range, столбец «Дата» в банковском реестре (BankRegisterDateRange)

  • Criteria 2, эта строка формулы ">="&EOMONTH(RentTableDate,-1)+1

  • Criteria 3 Range, столбец «Дата» в реестре банков (BankRegisterDateRange)

  • Critera 3, эта строка формулы "<="&EOMONTH(RentTableDate,0)

Объединение:

=SUMIFS(BankRegisterDebitRange, BankRegisterDescriptionRange, "Rent", BankRegisterDateRange, "=>"&EOMONTH(RentTableDate, -1)+1, BankRegisterDateRange, "<="&EOMONTH(RentTableDate, 0))

Если ваши данные отформатированы кактекст, то вам нужно решить, хотите ли вы использовать вспомогательный столбец или нет, или вы хотите одну формулу. Вспомогательный столбец может быть желательным, если вы хотите использовать SUMIFS или выполнить дополнительный анализ с помощью простых формул. Может быть желательна другая формула на основе массива, если вам не нужен вспомогательный столбец, например SUMPRODUCT или SUM.

Уже есть отличный ответ, показывающий, как использовать SUMPRODUCT, поэтому вот примеро том, как построить формулу массива с SUM, когда ваши данные отформатированы как текст.

=SUM((BankRegisterDebitRange)*(BankRegisterDescriptionRange="Rent")*(DATEVALUE(BankRegisterDateRange)=>(EOMONTH(RentTableDate,-1)+1))*(DATEVALUE(BankRegisterDateRange)<=MONTH(RentTableDate,0))) 

Это истинная формула массива, и ее нужно вводить с помощью Ctrl + Shift + Enter

Я был удивлен некоторыми моими результатами во время тестирования. Главным образом, как Excel все еще рассматривал текст как даты в некоторых случаях, но не в других. Например, DATEVALUE был необходим на стороне банковского реестра, но с таблицей арендной платы это было не так, потому что EOMONTH работал без проблем. Я полагаю, что это связано с другим странным поведением: когда я создаю ячейку в текстовом формате в A1 и затем вводю дату, независимо от того, предшествует ли ей апостроф или нет, тогда, если я введу =A1+1 в любой другой ячейке,эта ячейка форматируется как текст и отображает числовое значение Excel на следующий день после даты в A1. Я ожидал ошибки #Value!. Я подозреваю, что это то, что удерживает EOMONTH от ударов, и таинственная природа массивов так или иначе предотвращает перенос этого поведения на SUMIFS ... но я действительно не знаю, почему это происходит.

...