【问题标题】:Get element from array constant?从数组常量中获取元素?
【发布时间】:2021-09-19 01:17:32
【问题描述】:

如果您在单元格 A1 中有如下 CSE 数组常量:

{={2,4,6,8}}

如何从数组常量中获取特定元素?我尝试了以下公式,但它们都返回数组常量 (2) 的第一个值。

=INDEX(A1, 0)
=INDEX(A1, 1)

但是,如果数组不是引用,它确实有效。以下公式返回第 3 个元素 (6)。

=INDEX({2,4,6,8},3)

谢谢

【问题讨论】:

  • 那是因为你实际上引用的不是数组而是单元格A1中的值。令人惊讶的是,这不是一个数组,而只是值 2,因为 ms365 之前的 Excel 版本使用隐式交集只返回一个值。实际上,您的公式意味着INDEX(2, 1)。如果第二个参数发生变化,它仍然会返回 2,因为它会恢复到单元素数组的最后一个元素。只有拥有 ms365 才能引用溢出的动态数组。
  • 天哪,我已经尝试了很多次,但还没有找到解决方案。我想将整个数组存储到单元格中以简化我的数学运算,而提取元素对我来说是一个主要的绊脚石。

标签: excel excel-formula


【解决方案1】:

您可以将数组常量放在名称中而不是单元格中。

然后 INDEX 将与它正常工作,没有隐含的交集。

或者您可以使用 FORMULATEXT 函数解析公式,但这听起来很乏味。

【讨论】:

    【解决方案2】:

    试试=INDEX(A1#,1)# 告诉 Excel A1 是溢出公式(超过 1 个单元格长)。数组索引从 1 开始,在这种情况下不是 0。

    作为旁注,Index 知道您指的是索引,而不是行,当您给它一个一维数组时。在您的示例中,=INDEX(A1#,4)=INDEX(A1#,1,4) 返回数组中的第四项(在本例中为 8),但 =INDEX(A1#,4,1) 会给您错误 #REF!。如果您垂直定义数组{={2;4;6;8}}=INDEX(A1#,4)=INDEX(A1#,4,1) 都可以。

    编辑:当使用Ctrl+Shift+Enter 创建数组公式时,这在 Excel 365 中似乎并不总是有效。我认为这是由于 365 的变化。数组公式几乎已被溢出公式所取代。输入 ={2,4,6,8} 几乎等同于 365 之前的数组公式,但使用 Ctrl+Shift+Enter 创建数组公式会将输出限制为所选单元格的数量。在 Dan 的例子中,他只选择了一个单元格并且公式不会自动溢出,因此公式仅限于该单元格。 Excel 似乎将该单元格视为仅包含该数组元素。如果您选择 2 个单元格并输入一个数组公式,则 =INDEX(A1#,2) 将起作用,但 =INDEX(A1#,3) 返回 #REF!

    Edit2:@DickKusleika 建议使用FORMULATEXT 函数是可能的。这是一个改编自 ExcelJet 的函数。

    =LET(
        DesiredIndex, 1,
        ArrayFormulaRef, A1,
    
        Formula, FORMULATEXT(ArrayFormulaRef),
        FormulaLen, LEN(Formula),
        CSVStart, FIND("{",Formula,2),
    
        CSV, MID(LEFT(Formula,FormulaLen-1),CSVStart+1,FormulaLen),
    
        TRIM(MID(SUBSTITUTE(CSV,",",REPT(" ",LEN(CSV))),(DesiredIndex-1)*LEN(CSV)+1,LEN(CSV)))
    )
    

    【讨论】:

    • 在这种情况下,我没有溢出公式,因为数组常量是使用 CTRL+SHIFT+ENTER (CSE) 输入的。无论如何都试过了,没有用。还有其他想法吗?
    • @Dan,您使用的是什么版本的 excel?将 # 与数组公式一起使用对我来说适用于 Microsoft® Excel® for Microsoft 365 MSO (16.0.14326.20164) 64 位。
    • 如果我有一个溢出到相邻单元格的数组,你的建议对我有用。但我想避免溢出......所以我用 CSE 进入了数组。然后它不起作用。我确实有 Excel 365:MSO (16.0.14131.20358) 64 位。
    • @Dan,嗯...当我将溢出公式更改为数组公式时,它保持分布在 4 个单元格上并且索引有效。我不得不删除数组并重新输入它以复制您的错误。很抱歉造成混乱。
    • 感谢您的确认。关于如何在这种特定情况下解决它的任何想法?
    猜你喜欢
    • 2019-09-30
    • 2014-12-19
    • 2017-03-06
    • 1970-01-01
    • 2019-12-17
    • 2016-02-21
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多