MS Excel 中的类似数组的语法

MS Excel 中的类似数组的语法

如何像大多数编程语言一样使用下标选择一个单元格 - a[x]?

也就是说,我不知道我想要哪一行的数据,但我知道哪一列。这种事情可能在验证公式中很有用,例如

= IF(A[row()] = "X", TRUE, FALSE) 

答案1

使用间接功能:

=INDIRECT("A"&C2)

如果 C2 是包含行号的单元格。

您可以在 IF 公式中使用它:

= IF(INDIRECT("A"&C2) = "X"; TRUE; FALSE)

答案2

我同意,INDEX 肯定比 INDIRECT 更能回答这个问题,事实上它确实是 Excel 中最接近数组元素选择器的东西。(注意:没有像许多编程语言那样的元素零,Excel 在行和列上工作,因此无论哪个方向第一个元素始终为 1)

请注意,您可以使用简单版本来选择一列数组中的第 n 个元素:

=INDEX(A1:A100,27) 将给出 A1:A100 的第 27 个元素,即 A27 或单行数组:

=INDEX(A1:G1,,5) 给出数组中第五列的内容,在本例中为 E1(请注意双逗号表示未提供该行的值)

你可以做二维数组:

=INDEX(A1:D100,27,4) 将是 D27 的内容(数组的第 27 行、第 4 列),并且

=INDEX(C19:X43,5,7) 得出 I23

现在,如果您有一个二维数组并且只给出一个参数,结果将是整列或整行。虽然这本身没有任何意义,但它可以嵌入另一个函数中。所以:=INDEX(A1:C5,1) - 返回 #REF 错误,因为它甚至不明白 1 是指行还是列。

=INDEX(A1:C5,1,) - 返回 #VALUE,因为它无法在单元格中显示结果数组,但请注意,额外的逗号现在明确定义 1 表示第一行。

=SUM(INDEX(A1:C5,1,)) - 返回数组第一行 A1:C1 中所有值的总和。

但是,尽管如此,您可能根本不需要明确选择数组元素。从您的示例来看,您似乎正在尝试测试已知列中与输入公式的同一行的值。您可以使用隐式范围和当前行的交点,例如,如果在单元格 B13 中输入此公式:

=IF(A:A="X","是的,这有效","X 未找到") 然后您可以将其拖出复制到任何其他行,并且在每一行上它隐含地表示“与此公式位于同一行号的 A 列元素”。 注意:范围不必是整列,它可以是 A4:A104,甚至可以在另一张表上,但在每种情况下,它都将使用与公式相同的实际 Excel 行中的单元格。 我再说一遍最后一点:如果您在单元格 B5 中使用范围 A4:A104 的公式,您将不会获得该范围的第五个元素(A8),而是单元格 A5。 如果您在单元格 B3 中对 A4:A104 使用公式,您将收到错误,因为范围在第 3 行上没有任何内容(没有交集)。因此,如果您的行排列整齐,则这个来自范围的隐式单元格确实很有用(当您使用命名范围作为列时甚至更干净),但如果没有,则需要 INDEX 来获取数组中任何元素的 a[n] 的真实复制。

答案3

你可以尝试

=if(A & trim(text(something that evaluates to a number))="X",true,false)

我想,如果您可以更具体地说明如何获取 row() ,那将会很有帮助。

答案4

这里还有两个选项供您选择:

打开 R1C1 引用样式

以 Excel 2003 为例:

  1. 单击工具菜单上的选项,然后单击常规选项卡。
  2. 在“设置”下,选中“R1C1 引用样式”复选框。

然后在你的公式中,你只需这样做:

=R1 = "X"

这将自动返回 true 或 false。请注意,在您的公式中,任何时候您使用 If() 返回 true 和 false,您都可以完全摆脱 If(),因为任何比较都已返回布尔值。

不幸的是,使用此方法,您不能使用 A1 参考样式,因此此技巧对您来说可能用处不大。

使用命名范围

命名范围确实很强大,而且易于使用。假设您已用 X 标记了列 Flag。因此,您可以选择整个列并选择插入 -> 名称 -> 定义。将其命名为 Flag(如果尚未根据您的标签找到它),然后在公式中使用单词旗帜就像是单元格引用一样,如下所示:

=Flag = "X"

这将使用来自同一行但正确列的值。

除了手动定义名称外,如果要一次性为整个数据组添加标签,请选择数据区域,然后选择“插入”->“名称”->“创建”,并选择标签的位置(通常顶行对我来说)。现在,您已经为电子表格中的每一列定义了一个命名范围,并且可以开始在公式中使用这些范围了。

还有一个小贴士

不要错过交集运算符,它是一个空格。=Sum(A1, B1)并集运算符是一个逗号,如 ,交集运算符的用法类似,如下所示=Sum(Flag 2:10)。如果命名范围旗帜例如引用第 1 列,那么这将解决范围 A2:A10,即两个列出的范围的交集。您可以像 一样一个接一个地使用多个交集range range range rangeA:A 1:1解析为与 相同的引用A1

如果你的行数据也有有意义的标签,如地区、年份或其他值,那么添加命名范围并使用相交运算符可以产生一些奇妙的效果,例如,如果命名范围总销售额指的是包含销售额的列,以及命名范围加利福尼亚州指的是包含加利福尼亚州数据的所有(全部)行(不一定连续),那么公式=Sum(TotalSales California1)就是这两行交集的总和。

相关内容