添加3列并将结果粘贴到不同的列

时间:2017-01-04 20:45:46

标签: excel vba excel-vba

我在Excel中有一个表格,我想添加3个列,并使用VBA将总和放在同一个表格的另一列中。但是,即使我的数据只有2000多行,似乎代码将它运行到最后(行1048576)。当我定义表时,我将其定义为从列A到列R,因此我不知道如何修改代码,因此它只会查看数据中有多少其他行。

你可以看到下面的图片,它确实跑到了工作表的底部,这不是我要求的。 3列的值仅为1,2和3.为什么我将数据设置为表是因为我每周都会获得具有不同行数的新数据。我试图实现不同的公式,但看起来代码将运行到列的最后,而不是停在数据的末尾。所以这显然不是关于公式的问题,而是我设置数据范围或表格的方式。

Sub Prem_Inc()
    Dim lRow As Long
    Dim ws As Worksheet
    Set ws = Worksheets("TB")
    lRow = ws.Cells(Rows.Count, "G").End(xlUp).Row

    For i = 2 To lRow
      Worksheets("TB").Cells(i, 13).Value = "=Sum(RC[-3], RC[-2], RC[-1])"
    Next i

    With Range("M2", "M" & lRow)
      .Style = "Currency"
      .NumberFormat = "_($* #,##0.0_);_($* (#,##0.0);_($* ""-""??_);_(@_)"
      .NumberFormat = "_($* #,##0_);_($* (#,##0);_($* ""-""??_);_(@_)"
    End With

    With Range("P2", "R" & lRow)
      .Style = "Currency"
      .NumberFormat = "_($* #,##0.0_);_($* (#,##0.0);_($* ""-""??_);_(@_)"
      .NumberFormat = "_($* #,##0_);_($* (#,##0);_($* ""-""??_);_(@_)"
    End With
End Sub

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

这似乎只是Excel在表格中的正常行为。如果您将一个公式(或伪装成值的公式)输入到表中,并且该列中没有任何内容,则会将该公式复制到该列的所有行中。

此代码只需将公式写入特定行即可避免此问题。 (如果第2行是最后一行数据,它可能仍有问题,但我认为这对你来说不是一个问题。)

Sub Prem_Inc()
    Dim lRow As Long
    Dim i As Long
    With Worksheets("TB")
        lRow = .Cells(.Rows.Count, "G").End(xlUp).Row
        With .Range(.Cells(2, "M"), .Cells(lRow, "M"))
            .FormulaR1C1 = "=Sum(RC[-3], RC[-2], RC[-1])"
            .Style = "Currency"
            'Why set NumberFormat twice??
            .NumberFormat = "_($* #,##0.0_);_($* (#,##0.0);_($* ""-""??_);_(@_)"
            .NumberFormat = "_($* #,##0_);_($* (#,##0);_($* ""-""??_);_(@_)"
        End With

        With .Range(.Cells(2, "P"), .Cells(lRow, "R"))
            .Style = "Currency"
            .NumberFormat = "_($* #,##0.0_);_($* (#,##0.0);_($* ""-""??_);_(@_)"
            .NumberFormat = "_($* #,##0_);_($* (#,##0);_($* ""-""??_);_(@_)"
        End With
    End With
End Sub