0

我有两列 A 和 B 以数字作为值。

  • 在 C1 我想要=A1 + B1
  • 在C2我想要=A2 + B2

等等。我已经编写了以下 VBA 代码 - 虽然它可以工作,但它会在范围内的最后一行末尾添加“0”。

假设我的最后一行是 A10。当我运行代码时,它会在 C11 中添加“0”。我该如何防止这种情况?

Sub macro()

Dim R As Long
R = 1
Do
Cells(R, "C").Select
R = R + 1
ActiveCell.Formula = "=sum(" & ActiveCell.Offset(0, -2) & "," & 
ActiveCell.Offset(0, -1)    & ")"
Loop Until IsEmpty(ActiveCell.Offset(0, -2))

End Sub
4

4 回答 4

3

只需将您的直到条件替换为以下字符串:

Loop Until IsEmpty(ActiveCell.Offset(1, -2))

这将检查正确的单元格是否为空。您的其余代码应保持不变。

于 2013-01-22T06:21:01.143 回答
3

看看Do UntilDo WhileWhile

如果你真的想迭代单元格,你可以继续。但是这里使用的方法Arrays,这将通过各种方式减少任何性能下降,你会在单元格上循环......

Option Explicit

Sub AddToRigh()
Dim i As Integer
Dim vArr As Variant
Dim LastRow As Long

'--assume you are working on Sheet 1
LastRow = Sheets(1).Cells(Rows.Count, Range("A1").Column).End(xlUp).Row
ReDim vArr(1 To LastRow)

For i = LBound(vArr) To UBound(vArr)
    vArr(i) = "=Sum(RC[-2]:RC[-1])"
Next i

'--output this entire array with formulas into column C
Sheets(1).Range("C1").Resize(UBound(vArr)) = Application.Transpose(vArr)

End Sub

输出:

在此处输入图像描述

于 2013-01-22T06:35:05.207 回答
2

我绝不是 vba 方面的专家,但你可以这样做:

Sub macro()


    Dim R As Long
    R = 1
    Do While Not IsEmpty(ActiveCell.Offset(0, -2))
        Cells(R, "C").Select
        R = R + 1
        ActiveCell.Formula = "=sum(" & ActiveCell.Offset(0, -2) & "," & 
        ActiveCell.Offset(0, -1)    & ")"
    Loop

End Sub
于 2013-01-22T06:11:55.717 回答
1

我想我会推荐一个稍微不同的行动方案,只是为了给你一些想法:):

Sub macro()

    Dim found As Range

    Set found = Range("A:A").Find("*", after:=Range("A1"), searchdirection:=xlPrevious)

    If Not found Is Nothing Then
        Range(Range("A1"), found).Offset(0, 2).FormulaR1C1 = "=RC[-2]+RC[-1]"
    End If

End Sub
于 2013-01-22T06:24:27.593 回答