Так же, как ваша переменная LastRow
* для исходного листа, создайте переменную LastColumn
для вашего листа назначения, которая найдет последний использованный столбец так же, как вы находите свою последнюю использованную строку.
Примерно так:
Dim LastColumn As Long
LastColumn = Sheets("Audit").Cells(1, Columns.Count).End(xlToLeft).Column
Затем используйте переменную следующим образом:
Destination:= Worksheets("Audit").Cells(1, LastColumn)
Кажется, что ваш код также противоречит вашему вопросу, в своем вопросе вы объяснили данные будут записываться на лист аудита в строке 1, каждый раз используя следующий столбец, но ваш код ищет значения в строке 2 в вашем выражении If
:
If Worksheets("Audit").Cells(2, "A") = "" Then
совпадает с If Worksheets("Audit").Range("A2") = "" Then
,
Если вы хотите проверить первый ряд, измените 2
на 1
.
(см. Также ссылку «как избежать выбора» в этом вопросе):
Вы можете добиться «копирования / вставки» без фактического использования методов «копирования» и «вставки», присваивая значение одного диапазона другому, например, так:
Worksheets("Audit").Cells(1, LastColumn).Resize(999, 1) = Worksheets("Data").Range("c2:c1000").Value
Примечание: Измените Resize Property строк в соответствии с исходным диапазоном (в этом случае вы хотите переместить значения из C2: C1000).
* Переменная LastRow
немного сбивает с толку, так как ищет последний использованный столбец в строке 3.
Если он предназначен для поиска столбца, попробуйте переименовать его, чтобы избежать путаницы в дальнейшем при отладке.
Если нужно найти последнюю строку, попробуйте так:
LastRow = Worksheet("Data").Cells(Rows.Count, 1).End(xlUp).Row