VBA - 总和到一个主表(VBA - sum totals to a master worksh

2019-11-05 06:00发布

好了,所以这里去。 我有每天详细的股票交易活动单个的工作表的工作簿。 我现在也有一个VBA提供了一个总和为每这些工作表中指定的列,这工作得很好。

不过,我想这样做是添加到我的VBA,以便它提供了总和为这些列到主表。

因此,举例来说:如果是在2018年10月1日在工作表1的交易活动总额达4M和交易活动的工作表2 2018年10月2日共计3M,我想有主工作表上显示这个总7米。

我们已经附上我的低于目前的VBA,目前正在对每一个人工作总结列是J.总结各个工作表上的列不改,显然不取决于交易活动包含在这些列中的数据不过量。

Sub autoSum_AllSheets()
    Dim ws As Worksheet
    Dim cel1 As String, cel2 As String
    Dim firstCel As Range

    For Each ws In ActiveWorkbook.Worksheets
        With ws
            Set firstCel = .Range("J3").End(xlDown).Offset(2, 0)
            cel1 = firstCel.Offset(-2, 0).End(xlUp).Address
            cel2 = firstCel.Offset(-1).Address
            firstCel.Value = "=SUM(" & cel1 & ":" & cel2 & ")"
        End With
    Next ws
End Sub

我还附上一个随机的一天拍摄的电流模拟工作表中的截图,与总和运行加粗,并以红色突出显示的VBA后,我得到的。

因为我是一个新人,以万物VBA对如何处理这个任何意见将是巨大的。

编辑:我已经附加了什么我想实现下面的主表上模拟截图:

Answer 1:

我建议以下...

Option Explicit

Public Sub AutoSumAllWorkheets()
    Const MasterName As String = "Master" 'specify name of master sheet

    Dim wsMaster As Worksheet
    On Error Resume Next 'test if master exists
    Set wsMaster = ActiveWorkbook.Worksheets(MasterName)
    On Error GoTo 0

    If wsMaster Is Nothing Then 'add master if not exists
        Set wsMaster = ActiveWorkbook.Worksheets.Add(Before:=ActiveWorkbook.Worksheets(1))
        wsMaster.Name = MasterName
        'instead you can throw a message and exit here
        'MsgBox "No master found"
        'Exit Sub
    End If

    Dim FirstCell As Range, LastCell As Range

    Dim ws As Worksheet
    For Each ws In ActiveWorkbook.Worksheets
        With ws
            If .Name <> MasterName Then 'don't sum on master sheet
                Set FirstCell = .Range("J3")
                Set LastCell = FirstCell.End(xlDown)
                LastCell.Offset(2, 0).Formula = "=SUM(" & FirstCell.Address & ":" & LastCell.Address & ")"

                'write in master
                With wsMaster.Cells(wsMaster.Rows.Count, "A").End(xlUp)
                    .Offset(1, 0).Value = ws.Name
                    .Offset(1, 1).Formula = "=" & LastCell.Offset(2, 0).Address(External:=True)
                End With
            End If
        End With
    Next ws

    'sum all sheets up
    With wsMaster.Cells(wsMaster.Rows.Count, "A").End(xlUp)
        .Offset(2, 0).Value = "Total sum:"
        .Offset(2, 1).Formula = "=SUM(" & wsMaster.Cells(1, "B").Address & ":" & .Offset(0, 1).Address & ")"
    End With
End Sub

第一部分检查是否主片存在,并且增加了一个,如果它不存在。

然后,我改进你的代码位:

  • 我建议使用明确的变量名(更容易)。 例如您firstCel其实不是第一次,但总和细胞。 这是非常令人困惑,你会很容易失败。
  • 使用.Formula写一个公式。
  • 我添加了一些代码到每个片材的总和写到主片。 注意,这个附加的条目在主片。 所以,如果你运行它两次,你需要先清除在主表中的条目。

如果你想要写到主片的另一列只是改变的列名wsMaster.Cells(wsMaster.Rows.Count, "A").End(xlUp)"A"到如"L"



Answer 2:

尝试:

Sub test4()

Dim ws As Worksheet
Dim LastRowJ As Long
Dim MasterTotal As Double

For Each ws In ActiveWorkbook.Worksheets
    LastRowJ = ws.Cells(ws.Rows.Count, "J").End(xlUp).Row
    MasterTotal = MasterTotal + ws.Range("J" & LastRowJ).Value '<= Let us assume that total appears in each sheet at the last line in column J
Next ws

Sheet1.Range("A1").Value = MasterTotal '<= Change where you want to import the total of totals

End Sub


文章来源: VBA - sum totals to a master worksheet