【问题标题】:finding the cell that is closest to the current cell with conditions根据条件找到最接近当前单元格的单元格
【发布时间】:2013-07-30 15:49:21
【问题描述】:

我有一行值 - 1,2,3,8,35,7,8,3,5,7,x

X 是我希望公式所在的位置

我想以某种方式获取 8 最接近 X 的行的值(在这种情况下不是第 4 行,而是第 7 行)

如果我使用match("8",A:A,0),我会得到它找到的第一个匹配项。

如何找到与发生计算的单元格最接近的匹配项?

【问题讨论】:

  • 那么,我猜你想要“8”的最后一个位置?
  • 是的,这正是我所需要的

标签: excel cell


【解决方案1】:

你可以使用:

{=MATCH(2,1/(A1:A10=8))}

记住它是一个数组函数,所以必须使用CTRL+SHIFT+ENTER

答案基于 MATCH 函数的技巧和行为。我将允许自己复制ozgrid的解释:

这里的神奇之处实际上在于 MATCH 函数而不是数组。这里用到了 match 函数的两个有趣的属性:

1) 使用 MATCH,如果没有找到匹配项,那么函数将返回数组中最后一个值的位置,所以如果你做了 =MATCH(8,{1,2,3,4,5,6 ,7,6,5,4,3,2,1}),你的结果是 = 13,因为在数组中找不到 8

2) MATCH 将返回最后一个值的位置,但不会返回错误(或空白值)的位置,所以如果你有 =MATCH(8,{1,2,3,4 ,#DIV/0!,#DIV/0!,7,6,5,4,3,#DIV/0!,#DIV/0!}),你的结果是 = 11,作为第 11 位的 3是数组中的最后一个值

所以 daddylonglegs 的公式在数组公式中使用 (A1:A13=B1) 对照目标值检查每个单元格,为单元格匹配的位置提供 TRUE(或 1)和 FALSE(或 0)的数组) 对于其余的。将 1 除以该数组为 TRUE 的结果为 1,并且 #DIV/0!那个数组是假的。所以他的公式被评估为

=MATCH(2,{#DIV/0!,1,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!,1,#DIV/0!,1 ,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!})

由于在数组中没有找到“2”,并且在第 9 位找到最后一个值 (1),所以 MATCH 返回 9

【讨论】:

  • 嘿!很久以前我不记得了,但是是我在 Ozgrid 上发布了原始答案 - barry houdini = daddylonglegs!
  • 请注意,由于“二分搜索”的工作方式,它的工作方式与描述的一样。 LOOKUP 使用它, MATCH 使用第三个参数 1(或省略)或 VLOOKUP 使用第四个参数 TRUE(或省略)。二进制搜索为您提供了快速查找,因为它每次通过将搜索范围一分为二进行搜索,预计值将被排序。这个[在此处使用]的一个副作用是当没有匹配时选择最后一个数字....因为最后一个数字预计是最大的
【解决方案2】:

如果您想要 last 匹配,您可以在 A11 中使用此公式

=MATCH(2,INDEX(1/(A1:A10=8),0))

[注意:如果值是数字,那么 8 是可以的 - 如果它们是文本格式的数字,那么你需要 "8"]

....或者您在计算单元格的任何一侧都有值(所以最近的可能是向上或向下)?

【讨论】:

  • MATCH(2, 是做什么的? 2 代表什么?
  • 真的没什么,你可以放任何数字,除了 1
  • 不——一个。请在我的回答中找到解释。我承认,这很神奇。
  • 2 可以替换为任何数字 > 1 - 该公式的工作原理是结果数组中没有数字 >= 到查找值。注意添加INDEX函数是为了避免“数组项”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多