Excel formula 这个程序员用他的查找函数做什么?

Excel formula 这个程序员用他的查找函数做什么?,excel-formula,Excel Formula,我在论坛上找到了一个公式,用于查找列中最后填充的单元格: LOOKUP(2,1/(G:G<>""),ROW(G:G))) 查找(2,1/(G:G“”),行(G:G))) 但这是怎么回事 1/(G:G<>"") 1/(G:G“”) 一除以???(不等于“”?)我不理解这里的逻辑。如果你想通过公式审核来逐步观察计算,我强烈建议限制范围。如适用: =LOOKUP(2,1/(G1:G10<>""),ROW(G1:G10)) =查找(2,1/(G1:G10“”

我在论坛上找到了一个公式,用于查找列中最后填充的单元格:

LOOKUP(2,1/(G:G<>""),ROW(G:G)))
查找(2,1/(G:G“”),行(G:G)))
但这是怎么回事

1/(G:G<>"")
1/(G:G“”)

一除以???(不等于“”?)我不理解这里的逻辑。

如果你想通过公式审核来逐步观察计算,我强烈建议限制范围。如适用:

=LOOKUP(2,1/(G1:G10<>""),ROW(G1:G10))
=查找(2,1/(G1:G10“”),行(G1:G10))
并且,为了便于说明,在图纸下方填充不低于G6的区域(但G1:G5范围内的空隙可能有助于理解发生了什么)

对于这个答案,我只考虑五个细胞:G1、G3和G4填充,G2和G5(向前)不。

1/(G1:G5“)
这确实是这个公式的核心<代码>G1:G5”“会测试是否不等于”“<代码>“是Excel单元格“空”的约定。如果填充(即“非空”),则返回TRUE和FALSE,否则返回TRUE和FALSE。因此,对于本例中选择的五个单元格,返回一个数组,按G1:G5的顺序,如下所示:

TRUE;虚假的;是的;是的;错误

在算术计算中,Excel将TRUE视为
1
,将FALSE视为
0
。因此,使用上述真值表作为分母,
1
作为分子,给出以下数组(再次按顺序):

1/1;1/0;1/1;1/1;1/0

决议如下:

1#分区/0!;1.1;#DIV/0

在上面的查找函数中,选择了
2
作为查询。(任何其他大于1的数字都同样适用。)因此,我们在一个仅由
1
s或错误组成的数组中寻找
2
。因此,不可能找到精确的匹配,因此默认值生效,这是最后一个值(按顺序,不计算错误)。数组中最后一个
1
是第四个元素,第四行(G1:G5)是…
4


G4是G列中最后一个填充的单元格(在我的示例中)。

如果您想通过公式审核评估公式来逐步观察计算,我强烈建议限制范围。如适用:

=LOOKUP(2,1/(G1:G10<>""),ROW(G1:G10))
=查找(2,1/(G1:G10“”),行(G1:G10))
并且,为了便于说明,在图纸下方填充不低于G6的区域(但G1:G5范围内的空隙可能有助于理解发生了什么)

对于这个答案,我只考虑五个细胞:G1、G3和G4填充,G2和G5(向前)不。

1/(G1:G5“)
这确实是这个公式的核心<代码>G1:G5”“
会测试是否不等于”“<代码>“是Excel单元格“空”的约定。如果填充(即“非空”),则返回TRUE和FALSE,否则返回TRUE和FALSE。因此,对于本例中选择的五个单元格,返回一个数组,按G1:G5的顺序,如下所示:

TRUE;虚假的;是的;是的;错误

在算术计算中,Excel将TRUE视为
1
,将FALSE视为
0
。因此,使用上述真值表作为分母,
1
作为分子,给出以下数组(再次按顺序):

1/1;1/0;1/1;1/1;1/0

决议如下:

1#分区/0!;1.1;#DIV/0

在上面的查找函数中,选择了
2
作为查询。(任何其他大于1的数字都同样适用。)因此,我们在一个仅由
1
s或错误组成的数组中寻找
2
。因此,不可能找到精确的匹配,因此默认值生效,这是最后一个值(按顺序,不计算错误)。数组中最后一个
1
是第四个元素,第四行(G1:G5)是…
4


G4是G列中最后填充的单元格(在我的示例中)。

G:G“”将为G列中的每个单元格返回一个TRUE/FALSE数组-如果包含值,则返回TRUE;如果不包含值,则返回FALSE
1/False=#DIV/0
1/TRUE=1
。然后搜索查找值(
2
),但未找到,因此返回小于2的最大值,这是最后一个1值。然后,使用数组中的该位置从给出最后一个行号的第二个数组返回行号。。。。。我想。在这个精简版本上使用
计算公式
来了解它的工作原理:
查找(2,1/(G1:G10“”),行(G1:G10))
,这很有意义。谢谢你,达伦。那么,下一个问题是:为什么使用“1/(”位?如果我们去掉它,公式开始只输出“N/A”,但它似乎没有必要,因为它没有提供任何新的信息。1/TRUE…或者1/1仍然是…1.没有任何变化。为什么它不能在不需要“1/”的情况下搜索“TRUE”?显而易见的答案是它改变了“TRUE”字符串转换为一个数字,但找出背后的机制会很有趣。G:G“”将为G列中的每个单元格返回一个真/假数组-如果包含值,则返回真,如果不包含值,则返回假。
1/FALSE=#DIV/0
1/TRUE=1
。查找值(
2
)然后搜索-但未找到,因此返回小于2的最大值-这是最后1个值。然后使用数组中的该位置从给出最后一个行号的第二个数组返回行号…..我认为。在此精简版本上使用
求值公式
,了解其工作原理:
LOOKUP(2,1/(G1:G10“”),行(G1:G10))
这是有道理的。谢谢你,达伦。那么,下一个问题是:为什么使用“1/(”位?如果我们去掉它,公式开始只输出“N/A”,但它似乎没有必要,因为它没有提供任何新信息。1/TRUE…或者1/1仍然是…1。没有任何变化。为什么它不能搜索“t”