#excel #vba
Вопрос:
У меня следующая проблема: я хочу объединить 9 листов разного и увеличивающегося размера, но всякий раз, когда вставляются новые строки, они должны помещаться в конце уже консолидированных данных. Пример. У меня 5 строк на 9 листах. Я объединяю их, и на главном листе содержится 45 строк данных. Если я вставлю 2 строки в лист 1 и 1 строку на листе 3, то у меня должно быть уже 45 строк, затем 2 строки из листа 1 и одна строка из листа 3. и это будет продолжаться со временем.
Приведенный ниже код добавляет вновь введенные строки в конце, но берет данные со всех листов.
У меня больше листов, чем у мастера, и тех 9, что делает использование листа ненадежным.подсчет:
Sub consolidate()
Dim r As Range, d As Object, namp;
Set d = CreateObject("Scripting.Dictionary")
For n = Sheets.Count To 1 Step -1
Set r = Sheets(n).[c2]
Do While r.Value2 <> ""
d(r.Value2) = 1
Set r = r(2)
Loop
Next
Sheets("Master").[c2].Resize(d.Count) = Application.Transpose(d.keys)
End Sub
Если я изменяю эту строку:
For n = Sheets.Count To 1 Step -1
В любую из приведенных ниже строк он не добавляет вновь введенные строки в конце текущих данных, но снова объединяет их и добавляет в середине:
For n = 9 To 1 Step -1
For n = 1 To 9 Step 1
Почему это происходит и как это можно исправить?
Комментарии:
1. Не могли бы вы предоставить файл с макетными данными, чтобы получить больше ясности?
2. Часть, отсутствующая в вашем коде, определяет, какие строки уже были объединены в сводный лист. Несколько способов сделать это: 1) найдите сводный лист для каждой строки, прежде чем копировать его. 2) добавьте маркер в каждую строку в таблицах данных, когда она будет скопирована. Скопируйте только в том случае, если этот маркер отсутствует