VBA合併工作表(WorkSheet)
如果一個Excel工作簿文件中含有多個工作表,而且每個工作表中的數據結構基本相同,現在想把所有的工作表的數據合併到一個工作表中進行分析,該怎麼辦呢?
VBA可以解決這個問題。
首先在工作簿文件中插入一個名為「匯總」的空白工作表,然後按快捷鍵「ALT+F11」進入VBA開發環境,在左側單擊滑鼠右鍵,選擇「插入」——「模塊」,在模塊中輸入如下VBA程序。
首先,定義一個Excel工作表類型的對象變量objSumSht。提前定義變量並明確指定變量類型的好處是,可以充分利用VBA開發環境所提供的該對象的屬性和方法的自動提示功能。
接著,將工作表對象ThisWorkbook.Worksheets("匯總")賦值給對象變量objSumSht。此後就可以在程序中使用對象變量objSumSht代替工作表對象ThisWorkbook.Worksheets("匯總")了。
之後,是一個循環處理結構,用來處理ThisWorkbook中的每一個Worksheet,在處理每一個Worksheet時,需要判斷該Worksheet的Name是不是objSumSht.Name(即「匯總」工作表)相同,只有當前工作表不是「匯總」工作表,才執行下面的數據合併操作。
再接著,表示工作表的最後一行objSumSht.Rows.Count(如果你正在使用的是Excel 2007或Excel 2010,那麼objSumSht.Rows.Count的計算結果是1048576),End(xlUp).Row表示從工作表第1列的最後一行向上查找,直到第一次看到「不為空的單元格」為止時所在的行號,然後把這個行號加上1,表示下一次粘貼數據時的行號位置,最後把這個行號賦值給變量pasteRow。
最後,把正在處理的工作表的「使用區域(objWs.UsedRange)」,也就是含有數據的區域,複製並粘貼到「匯總」工作表objSumSht,粘貼的起始位置是.Cells(pasteRow, 1),也就是「匯總」工作表的數據區域下方的第1個空白行的第1個單元格處。
現在,把光標置於程序中的任意一行,按F5鍵執行程序,程序的執行結果如圖所示。