【问题标题】:Dynamically get the sum of columns and paste in the last blank Columc动态获取列总和并粘贴到最后一个空白列
【发布时间】:2016-09-09 03:04:14
【问题描述】:

我有一个 Excel 文件,其中包含数量不同的列。每列的行数也不同。我想要实现的是获取每列的总和并将总数粘贴到工作表中的最后一个空白列。我希望有人可以帮助我解决我的问题。

【问题讨论】:

  • 你要每列的总和还是所有列的总和?
  • 嗨!我想要所有列的总和并将总数粘贴到最后一个空白列示例:第 1 列 |第 2 栏 |第 3 列 |总计
  • 是否要在每列数据下方进行小计?
  • 实际上,我需要先获取所有列的总数,然后将其粘贴到最后一个空白列,这样我就可以得到总数的平均值。请注意,每列包含多行,第一行用于列标题。我希望你能帮助我。

标签: vba excel


【解决方案1】:

您可以使用以下子:

Sub AddSums(ws As Worksheet)
    With ws.UsedRange
        With .Offset(1, .Columns.Count).Resize(.Rows.Count - 1, 1)
            .FormulaR1C1 = "=SUM(RC1:RC[-1])"
            .Offset(.Rows.Count).Resize(1, 1).FormulaR1C1 = "=AVERAGE(R2C:R[-1]C)"
        End With
    End With
End Sub

由您的 main 代码调用,如下所示:

    AddSums ActiveSheet

【讨论】:

  • 您好,事情是这样的。我有一个列表框,当我在列表框中选择项目时,它将从 ActiveSheet 复制相应的列并将其粘贴到另一个工作簿。我想要实现的是获得所有选定列的总和,并将总数放在下一个空白列中。在那之后,我需要得到我得到的所有总和的平均值。我希望你能帮助我解决这个问题。 @user3598756
  • 您只需 1) 在复制列的语句之后添加 AddSums ActiveSheet 语句 2) 在同一项目的任何模块中添加 Sub AddSums() 代码
  • 这是我的代码。我不知道把它放在哪里 Dim i As Long Dim colsIndexStrng As String Dim copyRng As Range With Me.ListBox1 For i = 0 To .ListCount - 1 If .Selected (i) Then colsIndexStrng = colsIndexStrng & Cells(1, i + 1).Address(False, False) & "," Next i End With If colsIndexStrng = "" Then Exit Sub Set copyRng = Range(Left(colsIndexStrng, Len( colsIndexStrng) - 1)).EntireColumn With Workbooks.Add copyRng.Copy ActiveSheet.Range("A1") Cells(2, Columns.count).End(xlToLeft).Offset(0, 1).Value =WorksheetFunction.sum( ActiveSheet.UsedRange) 结束于
  • 就在copyRng.Copy ActiveSheet.Range("A1") 之后并删除Cells(2, Columns.Count).End(xlToLeft).Offset(0, 1).value = WorksheetFunction.Sum(ActiveSheet.UsedRange)。并且如我之前所说,在同一个项目的任意模块中添加AddSums()代码
  • 是的!非常感谢 !这完美地工作。你救我 。非常感谢您,祝您有美好的一天! :))
【解决方案2】:

这会将所有列的总和放在下一个空列的第一行。

Cells(1, Columns.Count).End(xlToLeft).Offset(0, 1).Value = WorksheetFunction.Sum(ActiveSheet.UsedRange)

【讨论】:

  • 嗨!谢谢您的答复。事情就是这样。我有一个列表框,它复制与所选列表框项目相对应的列,然后将其粘贴到另一个工作簿。我想要实现的是获得所有选定列的总和,并将总数放在下一个空白列中。
  • 这是我的代码: Dim i As Long Dim colsIndexStrng As String Dim copyRng As Range With Me.ListBox1 For i = 0 To .ListCount - 1 If .Selected(i) Then colsIndexStrng = colsIndexStrng & Cells( 1, i +1).Address(False, False) & "," Next i End With If colsIndexStrng = "" Then Exit Sub Set copyRng = Range(Left(colsIndexStrng, Len(colsIndexStrng) - 1)).EntireColumn With Workbooks .Add copyRng.Copy ActiveSheet.Range("A1") End With
  • 我仍然不清楚您是否需要每个单独的总数。您可以简单地使用 WorksheetFunction.Average(ActiveSheet.usedrange) 来获取所有数据的平均值。
  • 实际上,我需要先获取所有列的总数,然后将其粘贴到最后一个空白列,这样我就可以得到总数的平均值。请注意,每列包含多行,第一行用于列标题。我希望你能帮助我。
【解决方案3】:

Sub GetTotals()
    Dim lastColumn As Long, y As Long
    Dim List As Object
    Set List = CreateObject("System.Collections.ArrayList")
    lastColumn = ActiveSheet.Cells.Find(What:="*", After:=Cells(1), Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False).Column

    For y = 1 To lastColumn
        List.Add WorksheetFunction.Sum(Columns(y))
    Next

    Cells(1, y).Resize(List.Count) = Application.Transpose(List.ToArray)

    Cells(Rows.Count, y).End(xlUp).Offset(1) = WorksheetFunction.Sum(Columns(y))

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    相关资源
    最近更新 更多