Я вернулся!Итак, я копирую строки данных из одной электронной таблицы в другую нажатием кнопки, когда ячейка «Да», и удаляю исходную строку данных.У меня есть несколько диапазонов, которые я копирую из одной строки, потому что для второй электронной таблицы не нужны все данные, хранящиеся в первой.(Первая электронная таблица содержит более 20 столбцов данных, а вторая - вдвое меньше).Есть ли простой способ убедиться, что все это скопировано в одну и ту же строку в новой электронной таблице?
По сути, в настоящее время я копирую каждый из диапазонов в соответствующий столбец в новой электронной таблице с номером строки, установленным на смещение последней использованной строки на 1. Что хорошо работает, если предыдущие ячейки действительноесть данные, но иногда их нет (данные по домашним хозяйствам, а некоторые имеют больше данных, чем другие, поэтому не все столбцы заполнены всегда), поэтому данные помещаются в строку, отличную от остальных моих данных для этого конкретного домашнего хозяйства,
Private Sub CommandButton1_Click()
Dim c As Range
Dim r As Integer
Dim LastRowD
Dim LastRowR
Dim Database As Worksheet
Dim DeReg As Worksheet
'Set worksheet deignation as needed
Set Database = ActiveWorkbook.Worksheets("Fostering Households")
Set DeReg = ActiveWorkbook.Worksheets("De-Registrations")
LastRowD = Database.Cells(Database.Rows.Count, "A").End(xlUp).Row
'Searches all rows in I
For Each c In Database.Range("I1:I" & LastRowD)
'Catches cases where "Yes" is present in column I
If c = "Yes" Then
LastRowR = Database.Cells(Database.Rows.Count, "A").End(xlUp).Offset(1, 0)
r = c.Row
'Copies the desired column data from rows containing "Yes" from Database tab and pastes it in DeReg tab
Database.Range("A" & r & ":G" & r).Copy DeReg.Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
Database.Range("H" & r).Copy DeReg.Range("AJ" & Rows.Count).End(xlUp).Offset(1, 0)
Database.Range("J" & r & ":X" & r).Copy DeReg.Range("H" & Rows.Count).End(xlUp).Offset(1, 0)
Database.Range("AN" & r).Copy DeReg.Range("W" & Rows.Count).End(xlUp).Offset(1, 0)
Database.Range("AS" & r).Copy DeReg.Range("X" & Rows.Count).End(xlUp).Offset(1, 0)
Database.Range("AZ" & r & ":BH" & r).Copy DeReg.Range("Y" & Rows.Count).End(xlUp).Offset(1, 0)
End If
Next c
For i = 250 To 1 Step -1
If Database.Range("I" & i) = "Yes" Then
Database.Rows(i).EntireRow.Delete
End If
Next i
End Sub
Я пытался определить последнюю строку на основе того, есть ли в «А» данные (это единственная ячейка, которая всегда используется) с кодом:
LastRowR = Database.Cells(Database.Rows.Count, "A").End(xlUp).Offset(1, 0)
а затем заменив код моей копии в прошлом на:
Database.Range("A" & r & ":G" & r).Copy DeReg.Range("A" & LastRowR & ":B" & LastRowR).Row
Но это не сработало вообще - оно скопировало первую найденную строку с «Да» бесконечно и переписало вседанные уже присутствуют.Я также попробовал:
Database.Range("A" & r & ":G" & r).Copy DeReg.Range("A" & LastRowR).PasteSpecial
, что также сопровождалось миром проблем и ошибок.То, что я хочу, это искать последнюю использованную строку на основе того, что находится в столбце A, смещено на 1, а затем после данных в столбце, который я обозначаю, а не на последнюю использованную строку, определенную столбцом, который я пытаюсь вставитьв - это вообще выполнимо?Я не могу найти какую-либо информацию по этому конкретному вопросуКроме того, если есть лучший способ обработки нескольких диапазонов, это было бы здорово, поскольку это кажется довольно запутанным в настоящее время!Спасибо <3 </p>