excel - 在 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() 中使用的行号。但它不起作用。我也可以进行排除匹配吗?
你有什么建议?有什么简单/快速的解决方案吗?
解决方案
我找到了一个几乎就在我眼前的解决方案。
我没有尝试在数组常量中使用多个可能的搜索(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 行。我们也可以获得该匹配的其他列。
推荐阅读
- json - .net 核心 httpClient 获取异步。总是响应崩溃的json
- javascript - 使用 node.js 应用程序和 express,如何在不立即运行的情况下将函数传递给 ejs 页面
- amazon-s3 - AWS sam 模板如何为 S3 事件添加多个规则?
- excel - 移动行范围时复制数据
- printing - 删除odoo报告中的打印按钮
- c++ - C++ 如何按值向函数“发送”临时值?
- gitlab - 从上游拉动时git拒绝
- javascript - sap.ui.table.Table addRow() 示例
- xslt - XSLT 转换 XML 到 CSV 访问具有相同名称的嵌套元素
- android - “从 PlaceSelectionListener 派生的匿名类”类必须声明为抽象或实现抽象方法