返回
VBA合并多表数据时,当合并区域列数不定时如何解决
Excel技巧
2023-09-11 03:38:23
合并区域列数不定怎么办
在利用VBA代码合并多表数据时,合并区域列数不定,这是经常遇到的问题之一。解决方法其实很简单,只需要将过程改写为:
Sub 合并多表数据()
Dim EndRow As Long, DataArr As Variant, ToRng As Range
Dim WsArr As Variant, Ws As Worksheet, LastCol As Long
WsArr = Array("Sheet1", "Sheet2", "Sheet3") ' 要合并的工作表名称数组
For Each Ws In WsArr
LastCol = Ws.Cells(1, Ws.Columns.Count).End(xlToLeft).Column
EndRow = Ws.Cells(Ws.Rows.Count, LastCol).End(xlUp).Row
DataArr = Ws.Range(Cells(1, 1), Cells(EndRow, LastCol)).Value
If ToRng Is Nothing Then
Set ToRng = ActiveSheet.Range(Cells(1, 1), Cells(1, LastCol))
Else
Set ToRng = Union(ToRng, ActiveSheet.Range(Cells(ToRng.Rows.Count + 1, 1), _
Cells(ToRng.Rows.Count + EndRow, LastCol)))
End If
Next Ws
ToRng.Value = DataArr
End Sub
在这个代码中,首先定义变量EndRow
、DataArr
、ToRng
。然后,定义一个变量数组WsArr
来存储要合并的工作表名称。
接着,循环遍历WsArr
数组,对于每个工作表Ws
,使用LastCol
变量来存储工作表中最后一列的列号,EndRow
变量来存储工作表中最后一行的行号。
然后,使用Range
方法来获取工作表Ws
中从A1到最后一列、最后一行的单元格区域,并将该区域的值存储到DataArr
数组中。
如果ToRng
变量为空,则将工作表ActiveSheet
中从A1到最后一列的单元格区域设置为ToRng
变量的值。否则,将工作表ActiveSheet
中从ToRng
变量的最后一行+1到EndRow
行、从A列到最后一列的单元格区域与ToRng
变量的值进行合并,并将合并后的结果设置为ToRng
变量的值。
最后,使用Value
属性将DataArr
数组中的值复制到ToRng
变量的值中。
这样,就可以将多个工作表中的数据合并到一个新的工作表中,即使合并区域的列数不确定。
注意事项
- 在使用上述代码之前,请确保要合并的工作表都位于同一个工作簿中。
- 如果要合并的工作表中包含空单元格,则这些空单元格在合并后将被忽略。
- 如果要合并的工作表中包含公式,则这些公式在合并后将被复制到新的工作表中,但不会被重新计算。
- 如果要合并的工作表中包含格式,则这些格式在合并后将被复制到新的工作表中。