【问题标题】:INDEX/MATCH with multiple criteria具有多个条件的索引/匹配
【发布时间】:2015-02-15 14:40:11
【问题描述】:

在 Excel 公式方面需要帮助。

我正在尝试获取范围的摘要。我一直在玩 Match、Index、Countif 函数,可以创建一个唯一日期列表,然后使用 vlookup 来返回人名。

我需要考虑人员姓名,因此如果 2 个人出现相同的日期,它会在输出中显示为 2 条不同的行。

请看下表 - A&B 是输入,D&E 是我目前可以得到的,G&H 是我想要的输出。

提前致谢。

       A        B       C       D       E      F     G         H
1   13/01/15  RYAN           13/01/15  RYAN        13/01/15   RYAN
2   13/01/15  RYAN           14/01/15  RYAN        14/01/15   RYAN
3   14/01/15  RYAN           15/01/15  RYAN        14/01/15   FRANK
4   14/01/15  RYAN                                 15/01/15   RYAN
5   14/01/15  RYAN
6   14/01/15  RYAN
7   14/01/15  FRANK
8   14/01/15  FRANK
9   14/01/15  FRANK
10  15/01/15  RYAN
11  15/01/15  RYAN

我在自学中掌握的所有 Excel 知识感谢 stackoverflow 之类的论坛,因此非常感谢任何帮助。

【问题讨论】:

  • 任何人都可以对我在 cmets 中的公式提出任何建议或修改吗?
  • 辅助列是一个选项吗?我不相信这仅通过一个数组公式是可以实现的。如果是这样,那么性能非常差。
  • 可以使用辅助列

标签: excel indexing excel-formula match unique


【解决方案1】:

实现这一点最简单的方法是使用数据透视表。将标签添加到 A 列和 B 列(比如日期和名称),然后选择 A:B、INSERT、表格 - 数据透视表,选择现有工作表或新工作表中的位置,然后将日期和名称(如下)拖到 ROWS 中。

根据需要重新格式化。

【讨论】:

  • 没想到,我想我可以让它工作.. 有什么方法可以让数据透视表每 X 秒刷新一次或数据表何时更新?跨度>
  • 有没有办法让它使用公式而不是数据透视表?我觉得我有 90% 的公式 =IFERROR(INDEX(tblTrainingLog[DATE], MATCH(0,IF(ISBLANK(tblTrainingLog[DATE]),1,COUNTIF($C$18:C20, tblTrainingLog[日期])), 0)),"")
  • 你能根据我给你的公式做任何修改或建议吗?
  • 感谢您的帮助 pnuts
【解决方案2】:

我更喜欢的数组公式样式要求在第一个公式正上方有一个未使用的单元格,以避免循环引用。这个未使用的单元格可以用作列标题标签。

D2:E2 中使用的数组公式¹是,

=IFERROR(INDEX(A:A, MATCH(0, COUNTIFS(D$1:D1,A$1:INDEX(A:A, MATCH(1E+99, A:A))&"",
                                      E$1:E1,B$1:INDEX(B:B, MATCH(1E+99, A:A))&""), 0)), "")
=IFERROR(INDEX(B:B, MATCH(0, COUNTIFS(D$1:D1,A$1:INDEX(A:A, MATCH(1E+99, A:A))&"",
                                      E$1:E1,B$1:INDEX(B:B, MATCH(1E+99, A:A))&""), 0)), "")

根据需要填写。这些数组公式的最活跃查找范围在 A 列中包含最后日期的行被动态截断,以将计算周期缩短到必要的最小值。

    

我在您的示例数据列表底部为 Frank 添加了一个额外条目,以进一步演示双重唯一查找。


¹ 数组公式需要使用 Ctrl+Shift+Enter↵ 完成。如果输入正确,Excel 会将公式用大括号括起来(例如 {})。你不用自己输入大括号。一旦正确输入第一个单元格,它们就可以像任何其他公式一样被填充或向下或向右复制。尝试将全列引用减少到更接近代表实际数据范围的范围。数组公式以对数方式消耗计算周期,因此最好将引用范围缩小到最小值。更多信息请参见Guidelines and examples of array formulas

【讨论】:

    【解决方案3】:

    使用辅助列可以在没有任何数组公式的情况下实现。这个想法是首先获得日期和名称的连接,然后只获得列表中第一次出现日期和名称的行号,获得那些没有重复的行号,最后从 A:A 和 B 中获得这些行号的索引:B.

    公式:

    D1:D13  =A1&B1
    E1:E13  =IF($D1<>"",MATCH($D1,$D:$D,0),"empty")
    F1      =MIN($E:$E)
    F2:F13  =LARGE($E:$E,COUNTIF($E:$E,">"&$F1))
    H1:H13  =INDEX($A:$A,$F1)
    I1:I13  =INDEX($B:$B,$F1)
    

    【讨论】:

      猜你喜欢
      • 2016-07-19
      • 2013-08-30
      • 2017-10-22
      • 2020-09-13
      • 1970-01-01
      • 2018-06-08
      • 2020-03-22
      • 1970-01-01
      • 2019-12-28
      相关资源
      最近更新 更多