【问题标题】:Excel Formula to count unique values based on three different criteriaExcel 公式根据三个不同的标准计算唯一值
【发布时间】:2017-01-03 09:28:12
【问题描述】:

我正在尝试逐行获取电子表格中唯一发票的数量。我希望 excel 通过读取 1 表示唯一或 0 表示重复来做到这一点。 我在 =IF(COUNTIF($C$3:C3,C3)>1,0,1) 方面取得了成功。

这为我提供了基于某一特定列的准确计数,但我没有任何运气将其推进到这一列之外。我希望这个公式基于三个标准,而不仅仅是两个。

  A		B	C		D		E		F		G
  Vendor ID	Name 1	Invoice Number	Inv Date	Sum Amount	Acctg Date	Unique#
  00001		A	0000001		3/16/2015	5.00		5/11/2016	1
  00010		M	0000001		9/14/2015	10.00		5/24/2016	1	
  00010		M	0000001		9/4/2015	15.00		5/24/2016	0
  00005		K	0000285		4/8/2016	20.00		4/18/2016	1
  000106	O	000042		6/7/2016	30.00		6/21/2016	1
  000107	H	006333		4/5/2016	6.00		4/11/2016	1
  000107	H	006333		4/5/2016	6.00		4/12/2016	1​

由于我需要如何提取报告,所有列中都有重复项。我想要一个下拉公式,通过将它们中的每一个与三列中每一列的总组合进行比较,在每一行上以 1,0 格式为我提供 A、C、F 的唯一值。请注意,供应商 M 具有重复的发票编号,而供应商 H 根据标准有两张不同的发票。

由于数据的大小,这将大量消耗资源。我正在查看大约 20-90k 行,但也许有人可以向我展示一个更好的捕鼠器? VBA宏?匹配指数?无论如何,继续失败!

请随时解释为什么它们不起作用,或者它们是如何起作用的。另外请忽略与我的示例相比的列位置,因为我经常移动东西。

=A&C&F 然后使用 If(countif('ColumnX')),但这不能正常工作,因为我发现实际上是唯一的数据被列为重复。我认为这样做的根本问题是将日期和一般格式合并到一个单元格中。

=SUMPRODUCT((1/COUNTIFS(E3:E1000,E3:E1000,J3:J1000,J3:J1000,G3:G1000,G3:G1000)))

带有 IF(CountIF) 的 AND 的多个版本

=A&C AND CountIF (Date) 的多个版本

我还在 SE 中查看了以下问题,发现它们很有帮助,但最终不是我特别需要的,或者我在实施时失败了。

Simple Pivot Table to Count Unique Values 我根据独特的发票尝试了此方法,但未成功,需要三个条件而不仅仅是一个。

Count unique values in Excel 见上文。

Excel Formula: Count Unique Values in a Row Based on Corresponding Value in Another Row 这看起来应该可行,但我尝试并未能正确适应我的问题。

Excel - Return Count of Unique Values Based on Two Columns 这也应该与添加第三列完美配合。公式对我大喊大叫,叫我名字。提到了一些关于无法修复愚蠢的事情。

如果问题的任何部分不清楚,请告诉我。我尽力不重复和精简信息。提前致谢!

【问题讨论】:

  • 或许在您的表格中添加一些预期结果将有助于阐明您在此处寻找的内容。
  • 1) 你有很多行吗?作为一个新手+,我可能会在 VBA 中想到一些带有嵌套循环的东西,但它会很慢而且很耗费资源。对于几行(100)可能有效,但不适用于大表。 2)另外,正如@XORLX所说,你想总结每个组合的总和吗?
  • 正如@XORLX 暗示的那样,如果没有您想要的结果的示例,我无法帮助您。
  • “我根据独特的发票尝试了这个,但没有成功,需要三个标准,而不仅仅是一个。”数据透视表可以处理三个条件。
  • @XOR LX 和 Ron Rosenfeld 为清楚起见,请参阅编辑后的示例以及编辑后的文本。

标签: excel excel-formula vba


【解决方案1】:

如果我正确理解您的问题,基本上您希望 G 列检查当前行是否与其上方的任何行重复(基于 A、C 和 F 列)。如果是,则返回 0,否则返回 1。

如果这是您想要实现的目标,您可以使用COUNTIFS() 函数来了解行上方是否有任何重复项,然后只需检查计数是否 = 0 或 > 0(=0 表示它是唯一的,>0 表示它是重复的)。

G 列的公式如下所示:

G2: 1 (obviously we know it is unique since there are no values above it to be a duplicate of)
G3: =IF(COUNTIFS($A$2:A2,A3,$C$2:C2,C3,$F$2:F2,F3)=0,1,0)

然后,向下拖动 G3。

希望这就是您想要的。

【讨论】:

  • 我现在正在测试这个。到目前为止,一切都很好。我使用了类似的公式,但根本没有正确使用它。完成测试后,我将标记为正确答案。非常感谢!
  • 完美运行。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-07
  • 2015-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-01
  • 1970-01-01
相关资源
最近更新 更多