VBA - 如何在excel中的范围末尾添加绝对和行

时间:2016-05-08 23:12:15

标签: excel vba excel-vba excel-formula

我有一个excel电子表格,我想在一个范围的末尾添加一个Absolute Sum Row,如图所示。

enter image description here

我试图通过编写宏来实现这一目标。我附上了我的代码,我试图在范围的末尾添加Absolute Sum Row。

MAX = 1502
Src = 0
N = 0
Freq = 0.05
Freqmax = 1

Op = ActiveSheet.Range("K2")

For Freq = 0.05 To Freqmax Step 0.01

K = 0.5 * R * Sin(WorksheetFunction.Pi * Freq)

C1 = 0.5 * (1 - K) / (1 + K)
C2 = (0.5 + C1) * Cos(WorksheetFunction.Pi * Freq)
C3 = (0.5 + C1 - C2) * 0.25

ma0 = 2 * C3
ma1 = 2 * 2 * C3
ma2 = 2 * C3
mb1 = 2 * (-C2)
mb2 = 2 * C1

For Src = 0 To MAX Step 1

    Inp = ActiveSheet.Range("K" & 2 + Src)

    Op = ma0 * Inp + ma1 * mx1 + ma2 * mx2 - mb1 * my1 - mb2 * my2
    mx2 = mx1
    mx1 = Inp
    my2 = my1
    my1 = Op

    ActiveSheet.Range("L" & 2 + Src) = Op
    ActiveSheet.Range("M" & 2 + Src) = ActiveSheet.Range("L" & 2 + Src) - ActiveSheet.Range("K" & 2 + Src)

Next

LastRow = ActiveSheet.Range("M" & 2 + Src).End(xlDown).Row
Cells(LastRow + 2, "M").Formula = "=SUMPRODUCT(ABS(M2:M" & LastRow & ")"

ActiveSheet.Columns("L:M").Insert Shift:=xlToRight

Next

我的代码工作方式是我在循环结束时递增频率并将计算向右移动,以便我可以插入下一个频率值的值。

所以我要做的是计算一个范围的绝对和。

但是我在代码的这一行遇到了“应用程序定义或对象定义的错误”错误。

Cells(LastRow + 2, "M").Formula = "=SUMPRODUCT(ABS(M2:M" & LastRow & ")"

任何人都可以告诉我这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

当您尝试在此代码行中确定 lastRow 时,M2下方没有任何内容。

                postfix1: 372*-
postfixToInfix(postfix1): (3-(7*2))
                       Korrekt!

                postfix2: 71+36-52-**
postfixToInfix(postfix2): ((5(-*2)()**)(3-6)(7+1))
                       Nicht korrekt!


Process finished with exit code 0

这意味着 lastRow 将是1048576(工作表上的行数)。当您尝试在下一行代码中添加 2 到该号码时(在2个位置),

lastRow = .Range("M" & 2 + src).End(xlDown).Row

...您正在尝试a)使用工作表底部下方两行的单元格,b)尝试引用公式中工作表两行的单元格。

你可以从下往上看。

.Cells(lastRow + 2, "M").Formula = "=SUMPRODUCT(ABS(M2:M" & lastRow & ")"

但是,我怀疑这是否是列小计所属的位置。可以通过在内部循环之外并且在插入新列之前移动这两行代码来引用更好的位置。

lastRow = .Range("M" & rows.count).End(xlUp).Row

附录SUMPRODUCT function错过了一个结束括号。