标签: array-formulas

使用VBA将ArrayFormula设置为许多Excel单元格

我有一个输出单个值的数组公式,我想给一大堆单元格这个相同的数组公式.问题是当我将数组公式分配给范围时,它以这样的方式解释公式,即它们共享对数组公式的单个调用的输出,而不是每个输出单独的值.

为了告诉你我的意思,我使用以下代码:

With MarginalData
    .Range(.Cells(2, 1), .Cells(13, .UsedRange.Columns.Count)).FormulaArray = pullFormula
End With
Run Code Online (Sandbox Code Playgroud)

我想要的是一个看起来像这样的结果: 期望的结果

当我在范围中的每个单元格中分别输入数组公式时,它就是这样.

我得到的是: 结果

第一个单元格中的数组公式的输出在所有列中重复 - 它们共享相同的输出.

我如何以编程方式分配数组公式,就像每个单元格分别分配一样?


公式是:

{= INDEX(!BatchResults,MATCH(TTID&CHAR(1)&ROW() - 1,BatchResultsTTIDS&CHAR(1)&BatchResultsLayers,0),MATCH(A $ 1,$ BatchTTIDData 1:$ 1,0))}

它必须作为数组公式放入,因为它不是在单个列上执行匹配,而是在两个连接列上执行匹配.列的串联必须作为数组返回,因此必须将公式作为数组公式输入.


到目前为止,最简单的解决方案是以下接受的答案的变体:

Const pullFormula = "=INDEX(BatchResults,MATCH(TTID&CHAR(1)&ROW()-1,BatchResultsTTIDS&CHAR(1)&BatchResultsLayers,0),MATCH(A$1,BatchTTIDData!$1:$1,0))"
With wrksht
    With .Range(.Cells(2, 1), .Cells(13, .UsedRange.Columns.Count))
        .Formula = pullFormula
        .FormulaArray = .FormulaR1C1
    End With
End With
Run Code Online (Sandbox Code Playgroud)

excel vba array-formulas

7
推荐指数
1
解决办法
2万
查看次数

如何使用Excel的UDF数组公式正确读取每个单元格?

天儿真好,

我有一个问题,更多的是帮助自己了解Excel的数组公式(Control + Shift + Enter)如何动态地将每个单元格读入公式.

我做了一个简化的例子来向你展示我的意思.

我创建了一个小型的虚构农场,有一些动物,按名字列出,并提供动物的声音.在下一篇专栏文章中,我创建了一个名为MakesSound的用户定义函数,它接受动物的输入并响应动物的声音.如下面的快照图所示.

在此输入图像描述

不幸的是,我认为arrayformula可以拿起我有不同的单元格列出动物,它结束就像这个快照.

在此输入图像描述

所以我怎么能要求arrayformula识别我在B列中有不同的细胞因为我知道Quacks不是其他动物的答案.:-)

这是另一个快照,显示了arrayformulas旁边的公式,用于比较和我使用的代码.

在此输入图像描述

Public Function MakesSound(AnimalName As String) As Variant
    Select Case AnimalName
        Case Is = "Duck"
            MakesSound = "Quack!"
        Case Is = "Cow"
            MakesSound = "Moo!"
        Case Is = "Bird"
            MakesSound = "Tweet!"
        Case Is = "Sheep"
            MakesSound = "Ba-Ba-Ba!"
        Case Is = "Dog"
            MakesSound = "Woof!"
        Case Else
            MakesSound = "Eh?"
    End Select
End Function
Run Code Online (Sandbox Code Playgroud)

我愿意接受建议.

谢谢,彼得.

excel vba excel-vba array-formulas

7
推荐指数
1
解决办法
6692
查看次数

在数组公式中使用 COUNTIFS

我正在尝试计算给定类型的某些内容发生的次数,并且我需要此行为自动扩展到插入的行。就像是:

=Arrayformula(COUNTIFS(I:I,I:I,H:H,H:H,G:G,G:G))
Run Code Online (Sandbox Code Playgroud)

当在单行上使用时,嵌套的 countif 公式将产生正确的值,但目前数组公式一直向下输出 1。

我的数据类似于:

    Column1   Column2    Column3   Result
--------------------------------------------
   apple     green      eaten       x

   orange    orange     noteaten    x

   apple     red        eaten       x

   orange    orange     noteaten    x

   apple     green      eaten       x
Run Code Online (Sandbox Code Playgroud)

...

x 列是数组公式的输出位置。

第 1 行的 X 应该查看所有数据并计算青苹果的数量eaten,下一行将计算noneaten橙子的数量,依此类推。我知道 arrayformula 不采用聚合函数,但我没有找到任何替代方案countif

count google-sheets array-formulas google-sheets-formula

7
推荐指数
1
解决办法
3万
查看次数

谷歌Spreasheet QUERY功能我可以在ARRAYFORMULA中使用的东西

我有以下查询功能

=QUERY(C:J,"SELECT SUM(J) WHERE C='"&C2&"' AND H<=date'"&TEXT(H2,"yyyy-MM-dd")&"' LABEL SUM(J) ''",0)
Run Code Online (Sandbox Code Playgroud)

C2和H2相对于每一行是唯一的(C2,C3,C4,......和H2,H3,H4 ...)

我需要将它放入ARRAYFORMULA,因此它会在每一行产生一些结果

我已经花了一整天的时间,用SUMIFS检查所有其他解决方案并尝试用MMULT重新编写公式,但没有任何成功.

这是一个简化的例子:

Proj    Date        Hours
APROJ   6/29/2015   81.75
APROJ   6/22/2015   80.75
BPROJ   8/3/2015    689
BPROJ   8/2/2015    656
BPROJ   8/10/2015   688
BPROJ   8/11/2015   729
CPROJ   8/12/2015   1757
Run Code Online (Sandbox Code Playgroud)

我的尝试没有成功:= arrayformula(mmult((A:A = A1:A)*(B:B <= B1:B)*N(C:C),转置(符号(列(C:C))) ))

所需的专栏是:

CHECK
162.5
80.75
1345
656
2033
2762
1757
Run Code Online (Sandbox Code Playgroud)

如果我输入每一行公式:= SUMIFS(C $ 2:C,A $ 2:A,"="&A2,B $ 2:B,"<="&B2)当从第2行手动扩展时它正在工作

提前致谢.

如果您想玩,只需复制到自己:https://docs.google.com/spreadsheets/d/12F4EsHvkiZb5gAPVo_uosd2YpZ1nw9QED_JlSAcVQYU/edit?usp=sharing

google-sheets array-formulas

7
推荐指数
1
解决办法
496
查看次数

在 Google 表格中的过滤器视图中排序时,ArrayFormula 列消失

我想ArrayFormula用来填充电子表格中的一列,但是当我Sort A->Z在过滤器视图中时,该ArrayFormula列消失了。在某些情况下,该列包含#REF!有关范围的错误,而在某些情况下,该列在Sort. 以下是我正在尝试做的事情的简化版本(在我的实际应用程序中,我正在Vlookup对另一张工作表进行操作):

https://docs.google.com/spreadsheets/d/1XbqqedOjuSKuE-ZLIHNw59-r01EsNMpx7YVqOoxSOR4/edit?usp=sharing 数组公式使用 糟糕的过滤器视图

所述column 3报头使用一个ArrayFormula从复制column 1。如果您转到Filter 1过滤器视图,您会注意到column 3除了错误之外,它是空白的。这发生在我尝试Sort Z->A在第 2 列上之后。在我更复杂的用例中,涉及 a Vlookup,在 aSort列完全消失后(没有留下任何#REF!错误)。在这两种情况下排序之前,一切都很好。

排序后如何使 ArrayFormula 值保留在过滤器视图中?

谢谢你的帮助!

sorting filter google-sheets array-formulas

7
推荐指数
2
解决办法
3307
查看次数

如果 Google Sheets 或 MS Excel 中的值为负,如何在数字前加上加号“+”?

如果值为负,我正在尝试添加/添加加号“+”。例如+10

我有一些账单支付的表,有时他们多付了。因此,余额列应反映为 +(超过支付的价值)。

我试过了,=CONCATENATE但这没有帮助。它是+-10

=IF(C2<0,CONCATENATE("+",C2),"")
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

excel if-statement google-sheets array-formulas google-sheets-formula

7
推荐指数
2
解决办法
8582
查看次数

在 Google 表格中将 IF、AND/OR(多个条件)与数组公式结合使用

有人可以帮助我吗?

我想使用带有 AND/OR 的数组公式,如下所示,但它不起作用

=ArrayFormula(if(AND(AG2:AG="是",AI2:AI<>""),"好的","空白"))

它类似于或

如果在使用数组公式时需要在 AND/OR 中放置 2 个以上的条件,该如何使用它?

非常感谢。

array-formulas google-sheets-formula

7
推荐指数
1
解决办法
4998
查看次数

使用 Google Sheets 上的 ArrayFormula 逐行迭代 COUNTIF

我正在尝试迭代一个 COUNTIF 公式,该公式计算每行中包含大于 4 的数字的单元格数。我正在尝试使用 ArrayFormula 来执行此操作,但它不起作用。

不幸的是,它计算了整个范围 B2:G39 中与条件匹配的所有单元格,导致在 K 列的每一行中输入 26 个,而不是逐行计数,即在 B2:G2 中输入的单元格数 > 4 在 K2 中输入的单元格数>4 B3:G3 进入K3

这是公式

=ARRAY_CONSTRAIN(arrayformula( if( row(H:H)=1, "Number of cells >4",COUNTIF(A2:G39,">4"))),39,1)
Run Code Online (Sandbox Code Playgroud)

这是一个包含示例数据和我的公式的电子表格

spreadsheet countif google-sheets array-formulas

6
推荐指数
1
解决办法
1万
查看次数

如何在 Google 表格中查询不包含 #N/A 错误的结果

我正在尝试查询不包含#N/A同一 Google 表格工作表中另一张工作表的结果的结果。

我已经尝试过这个公式,但它不起作用

=QUERY('Table 1'!A2:G500, "Select F Where G <> '#N/A'")
Run Code Online (Sandbox Code Playgroud)

尝试了其他几种方法但仍然无效。

我需要选择 F 列,其中 G 列不包含#N/A。

如果您知道如何解决此问题,请提供帮助。

sql google-sheets array-formulas google-query-language google-sheets-formula

6
推荐指数
1
解决办法
1万
查看次数

ArrayFormula 与 GoogleFinance 动态日期

首先,我不是一个强大的表格用户:)

我正在尝试使用 GOOGLEFINANCE 计算多种货币的金额。我用这个公式:

=IF($A2;
IF( 
$C2:C; 
$C2:C;
IF(
  $D2:D; 
  $D2:D*INDEX(GoogleFinance("CURRENCY:USDUAH";"close";$A2);2;2);
  $E2:E*INDEX(GoogleFinance("CURRENCY:EURUAH";"close";$A2);2;2)
));
0)
Run Code Online (Sandbox Code Playgroud)

A 列包含日期、C、D、E - 3 种不同货币的金额。IF 只是为了确定列的优先级:)

该公式运行良好,但每次添加行时我都需要“扩展”它 - 以增加 $A2 -> $A3 以获得指定日期的费率。

我尝试使用 ArrayFormula,但事实证明它保留对 $A2 的引用,因此我得到与 A 单元格中指定的日期无关的相同利率。

我创建了示例表来说明: https://docs.google.com/spreadsheets/d/1K2TbGIWl7JacYKiWgwwmJfelxJ-7fa9F9obp5XswW18/edit ?usp=sharing

我允许任何人进行编辑,所以如果您决定编辑 - 请不要删除任何内容:)您也可以将您的用户名放在粘滞行中(在您建议的解决方案上方)

  1. 有没有办法将 ArrayFormula 应用于此以使其工作?
  2. 也许您可以为嵌套 IF 提供更具可读性的解决方案。

google-finance google-sheets array-formulas gs-vlookup google-sheets-formula

6
推荐指数
1
解决办法
2250
查看次数