k..*_*k.. 2 worksheet-function microsoft-excel
我正试图用INDEX(MATCH())她在工作中继承的 Excel 帮助一位朋友,但这让我很难过。人们可以帮助我更好地了解它内部发生了什么吗?这是格式:
=INDEX(
'[Spreadsheet2.xlsx]TabOfInterest'!$B$B
,
MATCH(
1
,
(
(D34='[Spreadsheet2.xlsx]TabOfInterest'!$M:$M)
*
(F34='[Spreadsheet2.xlsx]TabOfInterest'!$P:$P)
*
(K34='[Spreadsheet2.xlsx]TabOfInterest'!$Y:$Y)
)
,
0
)
,
1
)
Run Code Online (Sandbox Code Playgroud)
我可以看到,如果数字“1”(似乎代表“TRUE”,在这里)出现在某种 TRUEs/1s & FALSEs/0s 数组中的任何位置,这些数组是通过将其他布尔值填充的 AND 组合在一起构建的数组(但是这应该在 Excel 中工作......),然后 INDEX 将选择导致“1”出现在其中的任何混乱的“行号” ,并且 INDEX 将返回的值电子表格 2 在该行和 B 列交叉处的单元格。
但我不知道 MATCH 的第二个参数发生了什么。
我试图玩弄一个空白的电子表格,甚至无法推断出什么=(SingleCell=RangeOfCells) 呢-或为此事,有什么=RangeOfCells呢-返回值似乎是取决于其单元格的公式键入到(它的行从数据偏移它正在检查),并且$在这些公式中的行号之前添加没有任何区别。
关于引用范围以及在单元格和范围之间进行“相等”比较的基本原理是什么,我是否需要知道才能更好地了解此公式中发生的事情以及最终INDEX(MATCH())要查找的内容?
到底是什么在这阵?
(D34='[Spreadsheet2.xlsx]TabOfInterest'!$M:$M)
*
(F34='[Spreadsheet2.xlsx]TabOfInterest'!$P:$P)
*
(K34='[Spreadsheet2.xlsx]TabOfInterest'!$Y:$Y)
Run Code Online (Sandbox Code Playgroud)
另外,如果我不得不猜测,我想我会说整体功能是这样做的,但我无法解释原因让我感到困扰:
如果有一行Spreadsheet2,其中所有三个条件都为真:
然后返回 Spreadsheet2 中的单元格的值,B 列,无论电子表格 2 的行是什么-复合条件为真。
让我们稍微简化一下,看看我们是否能弄清楚发生了什么。在下图中,我设置了 D1、E1 和 F1 来模拟公式中的 D34、F34 和 K34,并用值填充它们。对于咧嘴笑,我在前三个单元格下方添加了另外两行值。更多关于那些。
然后在 H、I 和 J 列中,我添加了与 M、P 和 Y 列等效的数组。我也将它们缩短了一点,主要是因为如果它们是整列,下面的调试技巧将不起作用。
在 G7 中,我只输入了上面公式的 MATCH() 部分。如包围它的大括号所示,它是一个数组公式。它是通过键入 CTRL-Shift Enter 输入的,Excel 会添加大括号。完成后,您可以再填充两行。很明显,MATCH() 函数给出了一些答案。
你是正确的,乘以逻辑值相当于 AND() 操作,除了它给出 1 和 0 作为结果而不是 True 和 False。例如,您可以通过键入=True*True或=True*False在单元格中进行检查。
你问这个相当奇怪的数组中可能有什么(是的,它是一个数组)。那么让我们来看看 Excel 认为它的价值是什么。
单击其中一个公式,然后单击要查看其值的公式元素 - 在本例中,它是“lookup_array”。这将突出显示lookup_array,如下图所示。
现在按F9。这使 Excel 显示突出显示元素的值。
而Excel告诉我们,公式中高亮部分的值是数组{1;0;0;0;0}。如果您对 G8 和 G9 执行此操作,您将看到值分别为 {0;0;0;0;1} 和 {0;0;0;1;0}。所以 MATCH() 函数在这些数组中找到 1 的位置,即 1、5 和 4。
您可以这样想:lookup_array 的第一部分检查 D1 等于 H1:H5 的位置 - 该部分返回 {1;1;0;0;0}。然后检查 I1:I5 中的 E1 给出 {1;0;1;0;0}。检查 J1:J5 中的 F1 给出 {1;0;1;0;0}。对所有这三个进行 AND 运算得到 {1;0;0;0;0},这是 Excel 为整个(公认的奇怪)数组显示的结果。类似地,G8 中的公式找到 {0;0;0;0;1}, {0;1;0;0;1} 和 {0;0;0;0;1) 然后将它们与得到 {0; 0;0;0;1}。
您对发生的事情的猜测是正确的:MATCH()在 H、I 和 J 中找到具有与 D、E 和 F 中的单元格匹配的值的第一行(匹配类型 = 0),然后 INDEX() 返回该位置在 B 栏中。
您可以摆弄上面的值并自己检查一下。请记住使用 CTRL-Shift Enter 输入数组公式 - 您将经常这样做,因为 Excel 有一个错误/功能,即单击公式然后按回车或制表符会给出 #VALUE!错误。CTRL-Z 将撤消该操作。
希望这会有所帮助并祝你好运。
| 归档时间: |
|
| 查看次数: |
450 次 |
| 最近记录: |