在所选内容旁边的新列中汇总列

时间:2018-08-30 15:44:06

标签: excel vba excel-vba excel-formula

我正在尝试将新列中的许多列加起来。

我已经可以算出A + B并将值放在C中。但是,我需要求和的实际列会有所不同。有没有一种方法可以编辑我的代码,以便可以将所有选定的列汇总到所选内容右侧的新列中?

例如。如果我选择BD列,它将在E中插入一个新列,其中包含B,C和D列的总和。或者,如果我选择EF,它将在G中插入一个新列,其中包含E和F列的总和。

Sub SumColumns()

Lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).row

For i = 1 To Lastrow
    Range("C" & i).Value = Range("A" & i).Value + Range("B" & i).Value
Next i

End Sub

3 个答案:

答案 0 :(得分:0)

我假设您要垂直汇总从A列开始的一行中的所有单元格。

尝试一下(一些提示和注释在代码中):

'use this in order to avoid errors
Option Explicit

Sub SumColumns()
    'always declare variables!
    Dim LastRow As Long, i As Long, ws As Worksheet, lastCol As Long, firstCol As Long
    'if you can, avoid using ActiveSheet, Selection, etc. it's prone to errors
    Set ws = ActiveSheet
    i = 1
    Do
        firstCol = ws.Cells(i, 1).End(xlToRight).Column
        lastCol = ws.Cells(i, ws.Columns.Count).End(xlToLeft).Column
        'there isn't any filled cells in a row
        If lastCol = 1 Then Exit Do

        ws.Cells(i, lastCol + 1).Value = Application.WorksheetFunction.Sum(ws.Range(ws.Cells(i, firstCol), ws.Cells(i, lastCol)))

        i = i + 1
    Loop While True

End Sub

之前和之后:

enter image description here

答案 1 :(得分:0)

这是我(比较草率)的解决方案:

Sub Test()

Dim col1 As String, col2 As String, lastrow As Long

col1 = Split(Selection.Address, "$")(1)
col2 = Split(Selection.Address, "$")(3)

lastrow = Cells(Rows.Count, col2).End(xlUp).Row

Columns(col2 & ":" & col2).Offset(0, 1).Insert Shift:=xlToRight

For i = 1 To lastrow
    Range(col2 & i).Offset(0, 1).Value = WorksheetFunction.Sum(Range(col1 & i & ":" & col2 & i))
Next i

End Sub

我说这很草率,因为如果选择了 entire 列,则不会Split适当地减去列值。因此,这取决于您如何尝试执行此操作。

img1

答案 2 :(得分:0)

此过程将让您选择任何范围。它将在范围的末尾添加一列,并将每一行加到新列中。

Sub test()
    Call InsertSumCol(Sheet1.Range("B2:E4"))
    Call InsertSumCol(Sheet2.Range("E1:F3"))
End Sub

Private Sub InsertSumCol(ByVal oRange As Range)

    'Add Sum Column to end of Range
    oRange.Worksheet.Columns(oRange.Column + oRange.Columns.Count).Insert shift:=xlToRight

    ' Sum Each Row in Range
    Dim oRow As Range
    For Each oRow In oRange.Rows
        oRow.Cells(1, oRow.Columns.Count + 1) = WorksheetFunction.Sum(oRow)
    Next

End Sub