1

有没有快速的方法来做到这一点?

例如我有两行

AB

34 5
56 6
34 3
25 2

我想逐行进行以下计算。

A1 = A1+B1
A2 = A2+B2
A3 = A3+B3 ..
..

现在我可以用一个循环遍历行的宏来做到这一点

for x = 1 to 500
sheet1.cells(x,1).vlaue = sheet1.cells(x,1).vlaue + sheet1.cells(x,2).vlaue
next x

但是通过使用范围或可以作为单个步骤执行的东西,是否有更有效的方法?

干杯

4

3 回答 3

3

一种快速的方法是从即时窗口输入:

[a1:a500]=[a1:a500+b1:b500]

方括号是Evaluate函数的快捷方式

于 2012-07-29T11:26:05.263 回答
1

我可以想到两个选择:

选项1

使用Copy, Paste Special,Add

Sub AddStep()
    Dim rng1 As Range, rng2 As Range

    Set rng1 = Range([A1], [A1].End(xlDown))
    Set rng2 = rng1.Offset(, 1)
    rng2.Copy
    rng1.PasteSpecial xlPasteValues, xlPasteSpecialOperationAdd
    Application.CutCopyMode = False

End Sub

选项 2

循环一个变体数组。这比在一个范围内循环快得多

Sub AddStep()
    Dim rng As Range
    Dim dat As Variant
    Dim i As Long

    Set rng = Range([B1], [A1].End(xlDown))
    dat = rng
    For i = LBound(dat, 1) To UBound(dat, 1)
        dat(i, 1) = dat(i, 1) + dat(i, 2)
    Next
    rng = dat
End Sub

选项 1 更快,但在某些情况下最好避免使用剪贴板。
对 1,000,000 行样本进行测试:
选项 1 - 435 毫秒
选项 2 - 2589 毫秒

于 2012-07-29T01:14:32.697 回答
0

The way I would do it is create a formula for the first row, then just select all the rows after and press Ctrl+D. Isn't this what you are after? Unless I misunderstood the question.

于 2012-07-29T00:02:35.673 回答