Excel:在唯一日期内每人的最低/最高金额

时间:2018-09-03 16:06:51

标签: excel excel-formula

我有一个包含3列的Excel表(请参见下面的图片):日期名称(缩写)已用金额 < / p>

我想返回每个日期每个人(分别)花费的最小和最大总和的值(B31:C33)。

我想到的公式如下:

{=MIN(SUMIFS(C2:C26,B2:B26=A31, A2:A26))}

或者像这样:

{=SUMPRODUCT(--(C2:C26,B2:B26=A31,?))}

[Excel Image Sample

很遗憾,我无法返回正确的值。感谢您的帮助。

我将期待一些答复。

2 个答案:

答案 0 :(得分:1)

可以用数据透视表回答您的问题:

  

假设您想要所有日期的绝对最小值和绝对最大值

  • 在“行”中添加首字母缩写,因为您希望在所有日期中按人次最小和最大。
  • 在“值”中,您要花费的金额,而不是“ <总和” (这是显示的默认值)...您可以更改值,以便显示“ 最小值< / em>,另一个显示 Max

请按照以下步骤操作:

开始 您应该先选择表格(A1:C26),然后转到Insert... PivotTable。我创建了一个只有几个值的虚拟电子表格,因此我选择(A1:C10):

Start 第1步 创建数据透视表后,它将为空。单击出现的大图标,带有数据透视表字段的菜单将出现在右侧。在这里,将“名称(初始)”拖到“行”并将“花费的金额”拖到“值”两次。然后它将如下所示:

Step1

第2步 数据透视表显示金额的总和,但您需要最小值和最大值。可以通过单击右侧的信息按钮,然后选择所需的计算(例如最小值)来更改这些值:

Step2

第3步 重复步骤2并更改为最大值。

最终结果 最终结果将是这样: EndResult

我在Design... Grand Totals... Off for rows and columns中删除了总计,因为它们毫无意义。仅当您单击数据透视表时,此菜单才会出现。

  

假设您想在每个日期执行此操作

容易!在已执行的操作之上,只需将“日期”拖到“列”中,每个唯一日期将显示一个最小值和一个最大值。

[EDIT]将日期显示在列中并不能回答问题,但是根据注释,如果将其添加到行中该怎么办?您将得到如下内容:

newtry

可以将其汇总成这样的表,这似乎就是您想要的:

enter image description here

答案 1 :(得分:0)

首先,很抱歉延迟回答此问题。我有一连串的错误修复需要上班。

这是一个数组公式,必须通过按 Ctrl + Shift + 输入

MIN- =SMALL(IF(SUMIFS($C$2:$C$26,$A$2:$A$26,IF($B$2:$B$26=$A30,$A$2:$A$26),$B$2:$B$26,$A30),SUMIFS($C$2:$C$26,$A$2:$A$26,IF($B$2:$B$26=$A30,$A$2:$A$26),$B$2:$B$26,$A30)),1)

MAX-=LARGE(IF(SUMIFS($C$2:$C$26,$A$2:$A$26,IF($B$2:$B$26=$A30,$A$2:$A$26),$B$2:$B$26,$A30),SUMIFS($C$2:$C$26,$A$2:$A$26,IF($B$2:$B$26=$A30,$A$2:$A$26),$B$2:$B$26,$A30)),1)

它看起来很大,让我们来谈谈它:

您可能已经注意到,此公式中唯一更改的是SMALL()LARGE(),这是因为SUMIFS()数组正在处理该“人名缩写”。

SUMIFS([amounts to sum],[dates],

我们在这里中断,为SUMIFS()的条件1生成一系列日期:

IF([name initials]=[person initials],[dates])

由于这是一个数组,因此最终得到一个匹配日期或FALSE的列表,如下所示:{43252;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;43301;43301;FALSE;43301;FALSE;FALSE;FALSE;FALSE;43342;43342;FALSE;FALSE;FALSE;FALSE;FALSE;43317;43317;43317}

这是第一个确定的条件,第二个条件仅仅是“名称(首字母)”

,[name initials],[person initials])

我们现在拥有的是一个0数组,用于标准不匹配以及我们要评估的金额。

为了使数据对我们有用,我们利用Excel的二进制性质,对于FALSE语句,{0将作为IF()的结果被读取:

IF([result from formula],[result from formula])

这会将SUMIFS()的结果转换回FALSE或我们的总数。

我们现在可以自由使用MIN([formula])SMALL([formula],1)来获得最小值。

由于只要有任何匹配的值,就不会从最大值返回0,因此您不需要实际执行MAX([formula])LARGE([formula],1)的二进制技巧:

=MAX(IF(SUMIFS($C$2:$C$26,$A$2:$A$26,IF($B$2:$B$26=$A30,$A$2:$A$26),$B$2:$B$26,$A30))

再次,对于延迟,我们深表歉意,我感谢您能接受很多建议,随时提出任何问题。

example