好了,所以这里去。 我有每天详细的股票交易活动单个的工作表的工作簿。 我现在也有一个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对如何处理这个任何意见将是巨大的。
编辑:我已经附加了什么我想实现下面的主表上模拟截图:
我建议以下...
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"
尝试:
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