Консолидация данных из нескольких листов с одинаковыми столбцами, но разным количеством строк в Excel

У меня есть книга Excel с несколькими листами. Все они имеют одинаковые имена столбцов. Однако, количество строк отличается от листа к листу. Я хочу создать обзорный лист, где я могу видеть все данные с каждого листа. Я мог бы пойти на каждый лист просто скопировать и вставить данные из второй строки в последнюю строку с данными в каждом листе. Но я думаю, что есть более простой способ сделать это?

Спасибо за помощь!

30
задан jeffrey
27.12.2022 8:42 Количество просмотров материала 3078
Распечатать страницу

3 ответа

Это решение с помощью 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 на ThisWorkbook вставьте модуль и вставьте этот код с правой стороны, затем выполните это и проверьте содержимое на листе с именем обзор, когда она заканчивается.

1
отвечен jcbermu 2022-12-28 16:30

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

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

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

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

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

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

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

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

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

0
отвечен duDE 2022-12-28 18:47

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

0
отвечен MisterVSE 2022-12-28 21:04

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

merge
microsoft-excel
microsoft-excel-2010
worksheet-function
Вверх