首页 > 解决方案 > 在 Excel 中从数组公式结果中检索范围而不是字符串

问题描述

有巢公式:

 "=IF(Hoja1!$A$4=$A$15:$A$22),IF($B$4=$B$15:$B$22),IF($F$15:$F$22=0,$A$15:$A$22)))"

结果数组是这样的:

{FALSE\FALSE\FALSE\FALSE\FALSE\"标题 6"\FALSE\FALSE}

得到一个由布尔值组成的数组,在这种情况下我得到字符串,但我想要得到的是范围,所以我可以知道得到的非 False 结果在结果数组中的位置。

我知道我可以在 VBA 中使用循环来做同样的事情,但我的目标是使用公式来实现。我不知道,也许有一些内置函数可以检索我不知道的范围。

或者,我认为拥有像 $A$15:$F$22 这样的已知范围,我可以获得具有非假值的结果数组的索引号,并使用 2 个索引创建 Range.Cells(index1, index2)大批。

另外,我认为使用 MATCH 函数可以做到这一点。例如

Match(<>False, {false\"string value"},0)

然后检索我可以在 .Cell() 中使用的行号。但它不起作用。我也可以进行排除匹配吗?

你有什么建议?有什么简单/快速的解决方案吗?

获取日期的参考: 范围搜索条件

数据源 数据源

标签: excelvbarangearray-formulas

解决方案


我找到了一个几乎就在我眼前的解决方案。

我没有尝试在数组常量中使用多个可能的搜索(aray 公式的结果)。它肯定适用于具有一个非空/非假结果的数组常量结果。

使用MATCH()是解决方案。

使用前面的条件公式,我得到了一个所有结果为 FALSE 的数组,除了一个。由于非空/假结果是一个字符串,我想知道结果的范围是什么,使用数据源范围我使用从MATCH函数获取的行索引提取该单元格,然后使用简单的 VBA 我有我想要的范围,就像这样。

Dim F As String
Dim Res As Integer
Dim R As Range

Set R = Range("$A$15:$A$22")
F = "=MATCH($A$4,IF($A$4=$A$15:$A$22),IF($B$4=$B$15:$B$22),IF($F$15:$F$22=0,$A$15:$A$22)))),0)"

'We get the index number of the desired value in the array that
we got in *IF* parts of the array formula.
Res = Hoja1.Evaluate(F)

'Since The position in the array of the element we want is the same as the row number inside the range the value we searched for is in, we can get that range/cell easily.
Set R = R.Cells(Res, 1) 'Or the column I want.

Debug.Print R.Address

结果是 18 澳元。
正如我们预期的那样,它匹配,因为在$A$15$:$A$22内,我们查找的值位于该源范围内的第 4 行。我们也可以获得该匹配的其他列。


推荐阅读