Объедините данные из нескольких листов с одинаковыми столбцами, но разным количеством строк в 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

Вам нужно открыть Macros/VBA наЭта рабочая книгавставьте модуль и вставьте этот код с правой стороны, затем выполните его и проверьте содержимое на листе с именемОбзоркогда это закончится.

решение2

Я бы сделал это вручную :)

Вы можете взглянуть наэто решение (Объединить данные по позиции), вы увидите, что накладные расходы одинаковы:

На каждом рабочем листе, содержащем данные, которые вы хотите консолидировать, настройте данные, выполнив следующие действия:

Убедитесь, что каждый диапазон данных представлен в формате списка: каждый столбец имеет метку в первой строке и содержит схожие факты, а в списке нет пустых строк или столбцов.

Поместите каждый диапазон на отдельный рабочий лист, но не помещайте диапазоны на тот рабочий лист, где вы планируете выполнить консолидацию.

Убедитесь, что все диапазоны имеют одинаковую компоновку.

На главном рабочем листе щелкните верхнюю левую ячейку области, в которой вы хотите отобразить консолидированные данные.

Примечание. Чтобы избежать перезаписи существующих данных на целевом листе данными, которые вы консолидируете, убедитесь, что вы оставили достаточно ячеек справа и под этой ячейкой для консолидированных данных.

... и так долго ...

решение3

Я не вижу никаких преимуществ в этом. Я не могу сказать, что вам нужно сделать, но если вы разделили данные на несколько листов, у вас должна быть причина сделать это. Если у вас есть причина, зачем объединять их вместе? Для меня это бессмысленно. Хорошо, что бы я сделал, так это зачем мне вообще видеть их все вместе? Это просто затрудняет поиск чего-либо. Подождите, да, только если вы хотите использовать функцию редактирования, чтобы найти на нем определенные данные. Но нужно ли делать это много раз? Я бы, если есть что-то связанное, сделал, например, SUM или другое резюме на каждом листе, а на новом листе сделал перекрестную ссылку для этого поля на каждой отдельной электронной таблице, чтобы объединить данные, не копируя все данные только на один лист. Если вы хороший программист, первое решение для копирования может помочь, но это не так просто, вы увидите. И последнее, но не менее важное: если на каждом листе увеличивается количество строк, убедитесь, что SUM или что-то еще находится сверху и справа, чтобы лист увеличивался, но консолидированные данные не пострадали.

Связанный контент