【问题标题】:Value search within range (INDEX/VLOOKUP)范围内的值搜索 (INDEX/VLOOKUP)
【发布时间】:2019-05-03 17:32:35
【问题描述】:

我有未过滤的值范围,它们是寻找所需值结果的关键指标。

在搜索框中,我有三个变量:状态、项目名称、值。我的目标是根据这些输入找到结果

已尝试过 INDEX LARGE,但它仅适用于已排序的值。看来,问题只出现在未过滤的结果中,但这不是解决方案。

我将寻找的值,10 次中有 9 次在这些范围内(不完全匹配)。

对不起,我拼错了。结果应该是 4.38

示例:如果输入 CA/CAR/250001,则应返回 4.38

【问题讨论】:

  • 值会完全匹配吗?
  • 您可以有一个额外的列连接 A、B、C,然后在需要的地方查找该列。
  • 如果需要“不完全匹配”,您需要对数据进行排序。

标签: excel vba excel-formula


【解决方案1】:

您可以使用 SUMIFS() 和 MINIFS() 作为标准

=SUMIFS(D:D,A:A,G2,B:B,G3,C:C,MINIFS(C:C,A:A,G2,B:B,G3,C:C,">="&G4))

注意:这里假设 State、Item、Value 的组合是唯一的。


如果无法访问 MINIFS,则可以使用 AGGREGATE 代替:

AGGREGATE(15,7,C2:C17/((A2:A17=G2)*(B2:B17=G3)*(C2:C17>=G4)),1)

【讨论】:

  • 这几乎是完美的。但由于我的错误,250001 应该返回 4,38。有什么建议么 ?我试过了,但我对 Aggregate 不熟悉。
  • 您可能希望在 AGGREGATE 的第一个条件中将 15 更改为 14,并将 (C2:C17>=G4) 更改为 (C2:C17<=G4)
【解决方案2】:
  • 使用公式=IF(OR(C:C-$I$3<0,A:A<>$I$1,B:B<>$I$2),1E+99,C:C-$I$3) 添加距离列
  • 结果公式:=INDEX(D:D,MATCH(MINIFS(E:E,A:A,$I$1,B:B,$I$2),E:E,0))

它使用Value = 250001 来计算到Result 的距离。负值设置为非常高的值1E+99 = 1×10⁹⁹。然后我们可以使用MinIfs找到给定StateItem的最小距离,最后我们使用MatchIndex将最小值变成Result

【讨论】:

  • 您不需要帮助器:=INDEX(D:D,MATCH(MINIFS(C:C,A:A,$I$1,B:B,$I$2,C:C,">="&I3),C:C,0)) 但是您没有考虑在 A 和 B 上再次匹配,因此如果列表中有不同的 A 和 B 并且 a距离是一样的。
  • @ScottCraner 啊该死的你是对的,但我可以在帮助列 =IF(OR(C:C-$I$3<0,A:A<>$I$1,B:B<>$I$2),1E+99,C:C-$I$3) 中考虑,然后它会起作用,因为所有其他人都将是 1E+99
【解决方案3】:

这是一种处理方式:

G4 中使用的公式转换为:

{=INDEX(D2:D9,MATCH(G1&G2&LARGE((C2:C9<=G3)*(C2:C9),COUNTIFS(C2:C9,">"&G3,C2:C9,0)+1),A2:A9&B2:B9&C2:C9,0))}

注意这是一个数组公式,应该通过CtrlShiftEnter

输入

【讨论】:

  • 问题是,我正在寻找范围内的值。
  • 正确,我的答案在明确之前就已经出来了。如果我完成编辑会更新,否则会删除;)
  • 效果很好,但我拼错了我的需求。它应该返回 4.38
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-12
  • 1970-01-01
  • 2020-11-30
  • 2022-01-09
  • 2015-10-27
  • 1970-01-01
相关资源
最近更新 更多