使用countif创建列表程序

问题描述

我买了一件杂货表,什么时候买,多少钱。

我正在尝试创建一个新的列表,程序化,在给定时间段内在第一个列表中搜索商品的每次购买以及该商品的总花费。

原始数据:

A       B       C
Item    Date    Price
Cheese  20/08   16,60
Bacon   20/08   8,35
Chicken 20/08   10,90
Butter  20/08   7,99
Tea     20/08   3,75
Bread   20/08   4,89
Bread   21/08   4,50
Milk    21/08   8

第二个列表:

E           F
Item        Total
(formula 1) (formula 2)

formula1:=INDEX(A2:A;MATCH(0;COUNTIFS($E$1:E1;A2:A);0))

formula2:=sumifs(C:C;A:A;E2;B:B;CONCAT(">=";INDIRECT("I1"));B:B;CONCAT("<=";INDIRECT("I2")))

哪里

I1:开始日期

I2:结束日期

如果我将日期设置为从数据开始(20/08)到结束(21/08),这将很好地工作

E       F
Item    Total
Cheese  $16,60
Bacon   $8,35
Chicken $10,90
Butter  $7,99
Tea     $3,75
Bread   $9,39
Milk    $8,00

但是如果我将开始日期和结束日期设置为21/08。它在F列中显示了一堆零。我正试图解决的问题。

E       F
Item    Total
Cheese  $0,00
Bacon   $0,00
Chicken $0,00
Butter  $0,00
Tea     $0,00
Bread   $4,50
Milk    $8,00

我想要的是这样显示的:

E       F
Item    Total
Bread   $4,00

我尝试将公式1修改

=INDEX(A2:A;MATCH(0;COUNTIFS($E$1:E1;A2:A;B:B;CONCAT(">=";INDIRECT("I1"));B:B;CONCAT("<=";INDIRECT("I2")));0))

但是我遇到了#VALUE错误(“ COUNTIFS的数组参数大小不同”)

解决方法

要获取具有日期限制的唯一商品列表,请使用公式:

=INDEX($A$2:$A$9;MATCH(1;(COUNTIF($E$1:E1;$A$2:$A$9)=0)*($B$2:$B$9>=$I$1)*($B$2:$B$9<=$I$2);0))

要获取金额,请使用公式:

=SUMPRODUCT((E2=$A$2:$A$9)*($B$2:$B$9>=$I$1)*($B$2:$B$9<=$I$2)*$C$2:$C$9)

enter image description here

如果要消除#N/A错误,请在第一个公式中使用IFERROR,在第二个公式中使用IF(E2<>""; ...,"")