我有一个包含多个工作表的 Excel 工作簿。它们都具有相同的列名。但是,各个工作表的行数不同。我想创建一个概览表,以便查看每个工作表的所有数据。我可以进入每个工作表,然后将数据从第二行复制并粘贴到最后一行,每个工作表中都有数据。但我认为有更简单的方法可以做到这一点?
感谢您的帮助!
答案1
这是一个使用 VBA 的解决方案:
Public Sub overview()
resultsheet = "Overview"
Dim wkb As Workbook
Dim wks, wks1 As Worksheet
Set wkb = ThisWorkbook
On Error GoTo SheetError:
Set wks1 = wkb.Sheets(resultsheet)
destrow = 1
totalcolumn = 1
totalwks = wkb.Sheets.Count
For i = 1 To totalwks
Set wks = wkb.Sheets(i) 'Iterate over all sheets
wksname = wks.Name
If wksname <> resultsheet Then 'Exclude the overview sheet
rowdata = True
columndata = True
thisrow = 2
thiscolumn = 1
totalempty = 0
While rowdata = True
If i = 1 Then 'First sheet section
a = wks.Cells(thisrow - 1, thiscolumn)
If a <> "" Then
wks1.Cells(destrow, thiscolumn) = a
thiscolumn = thiscolumn + 1
Else
If thisrow = 2 Then
totalcolumn = thiscolumn
End If
totalempty = totalempty + 1
If totalempty = totalcolumn Then
rowdata = False
End If
If thiscolumn = totalcolumn Then
thisrow = thisrow + 1
thiscolumn = 1
destrow = destrow + 1
totalempty = 0
End If
End If
Else ' Any other Sheet section
a = wks.Cells(thisrow, thiscolumn)
If a <> "" Then
rowdata = True
wks1.Cells(destrow, thiscolumn) = a
thiscolumn = thiscolumn + 1
Else
totalempty = totalempty + 1
If totalempty = totalcolumn Then
rowdata = False
End If
If thiscolumn = totalcolumn Then
thisrow = thisrow + 1
thiscolumn = 1
destrow = destrow + 1
totalempty = 0
End If
End If
End If
Wend
End If
Next i
Exit Sub
SheetError:
If Err.Number = 9 Then
createwks = MsgBox("Worksheet " & resultsheet & " doesn't exist" & vbCrLf & "Do you want to create it?", vbYesNo, Error)
End If
If createwks = 6 Then
Set wks1 = wkb.Worksheets.Add(After:=Worksheets(Worksheets.Count))
wks1.Name = resultsheet
Resume
End If
End Sub
您必须打开宏/VBA本工作簿插入一个模块并将此代码粘贴到右侧,然后执行此操作并检查名为概述当它结束时。
答案2
我会手动做:)
你可以看看此解决方案(按位置合并数据),你会看到它的开销类似:
在包含要合并的数据的每个工作表中,通过执行以下操作来设置数据:
确保每个数据范围都采用列表格式:每列在第一行都有一个标签并包含类似的事实,并且列表内没有空白行或空白列。
将每个范围放在单独的工作表上,但不要将任何范围放在您计划进行合并的工作表上。
确保每个范围具有相同的布局。
在主工作表中,单击希望显示合并数据的区域的左上角单元格。
注意:为避免使用正在合并的数据覆盖目标工作表中的现有数据,请确保在此单元格的右侧和下方留出足够的单元格用于合并数据。
...再见...
答案3
我认为这样做没有任何好处。我不知道你必须做什么,但是如果你将数据分成几张表,你一定有这样做的理由。如果有理由,为什么要将它们合并在一起?这对我来说毫无意义。好吧,我会这样做,为什么我首先需要将它们全部放在一起查看?这只会让查找任何东西变得困难,等等,是的,只有当你想使用编辑功能来定位特定数据时才会这样。但是,你必须这样做很多次吗?如果有任何相关内容,我会在每张表中进行 SUM 或其他恢复,并在新表中为每个单独的电子表格上的该字段进行交叉引用,以合并数据,而无需将整个数据复制到一张表中。如果你是一名优秀的程序员,那么第一个复制解决方案可能会有所帮助,但它并不那么简单,你会看到的。最后,但并非最不重要的一点是,如果每张工作表中的行数增加,请确保 SUM 或其他任何内容位于最顶部和最右边,这样工作表就会增加,但合并数据不会受到影响。