我有一个输出单个值的数组公式,我想给一大堆单元格这个相同的数组公式.问题是当我将数组公式分配给范围时,它以这样的方式解释公式,即它们共享对数组公式的单个调用的输出,而不是每个输出单独的值.
为了告诉你我的意思,我使用以下代码:
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的数组公式(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)
我愿意接受建议.
谢谢,彼得.
我正在尝试计算给定类型的某些内容发生的次数,并且我需要此行为自动扩展到插入的行。就像是:
=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。
我有以下查询功能
=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
我想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 值保留在过滤器视图中?
谢谢你的帮助!
如果值为负,我正在尝试添加/添加加号“+”。例如+10
我有一些账单支付的表,有时他们多付了。因此,余额列应反映为 +(超过支付的价值)。
我试过了,=CONCATENATE但这没有帮助。它是+-10
=IF(C2<0,CONCATENATE("+",C2),"")
Run Code Online (Sandbox Code Playgroud)
excel if-statement google-sheets array-formulas google-sheets-formula
有人可以帮助我吗?
我想使用带有 AND/OR 的数组公式,如下所示,但它不起作用
=ArrayFormula(if(AND(AG2:AG="是",AI2:AI<>""),"好的","空白"))
它类似于或
如果在使用数组公式时需要在 AND/OR 中放置 2 个以上的条件,该如何使用它?
非常感谢。
我正在尝试迭代一个 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)
这是一个包含示例数据和我的公式的电子表格
我正在尝试查询不包含#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
首先,我不是一个强大的表格用户:)
我正在尝试使用 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
我允许任何人进行编辑,所以如果您决定编辑 - 请不要删除任何内容:)您也可以将您的用户名放在粘滞行中(在您建议的解决方案上方)
google-finance google-sheets array-formulas gs-vlookup google-sheets-formula
array-formulas ×10
excel ×3
vba ×2
count ×1
countif ×1
excel-vba ×1
filter ×1
gs-vlookup ×1
if-statement ×1
sorting ×1
spreadsheet ×1
sql ×1