在 Excel 中合并具有相同列但不同行数的多个工作表中的数据

在 Excel 中合并具有相同列但不同行数的多个工作表中的数据

我有一个包含多个工作表的 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 或其他任何内容位于最顶部和最右边,这样工作表就会增加,但合并数据不会受到影响。

相关内容