在Excel中,用數(shù)據(jù)透視表可以輕松進行多個區(qū)域的數(shù)據(jù)合并計算。但當區(qū)域較多時,要在數(shù)據(jù)透視表向?qū)е卸啻芜x擇區(qū)域,稍顯繁瑣。如果需要合并的工作表較多,可以用下面的VBA代碼來快速合并數(shù)據(jù)。區(qū)域的大小可以不同,各行或列的品種可以重復,但要求工作簿中各工作表中的數(shù)據(jù)存放在相同的位置。如下圖為工作簿中某兩個工作表中的數(shù)據(jù),區(qū)域的起始位置都是E5單元格:
方法是:將要存放合并數(shù)據(jù)的工作表命名為“匯總”,刪除工作簿中沒有合并數(shù)據(jù)的工作表,各工作表中要合并的數(shù)據(jù)右側(cè)和下邊沒有其他數(shù)據(jù)。然后在VBA編輯器中運行下面的代碼:
Sub Summary()
Worksheets("匯總").[e5].CurrentRegion.ClearContents
On Error Resume Next
Dim sh As Worksheet
For Each sh In ActiveWorkbook.Sheets
If sh.Name <> "匯總" Then
With sh
‘獲取工作表中數(shù)據(jù)區(qū)域的行數(shù)
i = .[e65536].End(xlUp).Row
‘獲取工作表中數(shù)據(jù)區(qū)域的列數(shù)
j = .[iv5].End(xlToLeft).Column
‘將各工作表區(qū)域按R1C1樣式存入tempstr字符串中,各區(qū)域之間用","隔開
tempstr = tempstr & "’" & sh.Name & "’!R5C5:R" & i & "C" & j & ","
End With
End If
Next
‘清除tempstr字符串中最后一個","
tempstr = Left$(tempstr, Len(tempstr) – 1)
‘將tempstr字符串中的各區(qū)域名存入一維數(shù)組arr中
arr = Split(tempstr, ",")
‘將各個區(qū)域的數(shù)據(jù)合并計算到"匯總"表
Worksheets("匯總").[e5].Consolidate arr, xlSum, True, True
Worksheets("匯總").[e5] = Sheet1.[e5]
End Sub
上述代碼將工作簿中除“匯總”表以外的所有工作表中從E5單元格開始的區(qū)域合并計算到“匯總”表中






