【问题标题】:excel vba FormulaArrayexcel vba 公式数组
【发布时间】:2016-07-29 20:34:31
【问题描述】:

我正在尝试在 excel vba 中构建一个高级过滤表,如下图所示。在最后一列中,我使用了下面的数组公式。

Worksheets("Contracts").Range("N13:N" & Worksheets("contracts").Range("M" & Rows.Count).End(xlUp).Row).FormulaArray = _
"=sum(if(invoice!$A$3:$A$2000=contracts!B13,invoice!$AA$3:$AL$2000))"

我遇到的问题是,它将公式复制到范围内的所有单元格,而没有更改单元格:contracts!B13。它保持不变。 B13.

Advanced Filter

我哪里错了?

谢谢你, 丹尼尔

【问题讨论】:

  • 嗯,应该改成什么? C13、D13..等等?
  • 应该改为 B14、B15、B16 等。 :-)

标签: excel vba formula


【解决方案1】:

你可以这样做:

lastRow = Range("M" & Rows.Count).End(xlUp).Row
For i = 13 to lastRow
    Worksheets("Contracts").Range("N13:N" & i).Formula = _
    "=sum(if(invoice!$A$3:$A$2000=contracts!B" & i & ",invoice!$AA$3:$AL$2000))"
Next

【讨论】:

  • 我遇到了同样的问题。这是一个数组公式。通过使用,我得到了一个很好的结果: Worksheets("contracts").Range("N13").Copy Worksheets("contracts").Range("N14:N" & Worksheets("contracts").Range(" M" & Rows.Count).End(xlUp).Row).PasteSpecial xlPasteFormulas
  • 我不太明白。你遇到什么问题?它不可能再次编写相同的公式。 O.o
  • 如果我使用这一行 "Worksheets("Contracts").Range("N13:N" & i).Formula = _ " 它正在更改公式,但第一个单元格引用是B 和最后一行编号,在我的情况下是 40 而不是第一行的 13。但是,如果我用“.FormulaArray”更改“.Formula”,那么我会在所有单元格中得到相同的公式。
  • 对不起,我还是不明白。你能给我2-3个预期的结果吗?甚至更好的 2-3 预期结果与我的回答给出的结果相反。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-11
  • 2021-07-25
相关资源
最近更新 更多