Не проверено, но я думаю, что вы можете определить последний столбец, содержащий данные, следующим образом:
Dim lastColumn as long
lastColumn = wks.cells(1, wks.columns.count).end(xltoleft).column
lastColumn = application.max(lastColumn + 1, wks.columns("T").column)
' The Application.Max is meant to guarantee you either write to column T or any column to the right of it.
' +1 is so that we don't overwrite the last column, but instead write to the column after it.
Затем вы можете продолжить работу с кодом (хотя может быть лучше / быстрее назначить весь диапазон / столбец водин ход, а не каждая ячейка / строка в отдельности).
wks.Cells(i, lastColumn).Value = wks.Cells(i, "E").Value
Редактировать: Вот проверенный пример.Скажем, у меня есть некоторые данные в столбце E, начиная со строки 2 на листе "Sheet2"
.
Я могу использовать приведенный ниже код для копированиявставьте его в последний столбец (где последний столбец является либо столбцом T
, либо первым пустым столбцом справа от него).
Option Explicit
Sub TransferDataFromColumnE()
Dim wks As Worksheet
Set wks = ThisWorkbook.Worksheets("Sheet2")
Dim lastColumn As Long
lastColumn = wks.Cells(2, wks.Columns.Count).End(xlToLeft).Column
lastColumn = Application.Max(lastColumn + 1, wks.Columns("T").Column)
With wks.Range("E2:E24") ' This is the range I need to copy in my case
Dim columnOffset As Long
columnOffset = lastColumn - .Columns(1).Column
.Copy
.Offset(0, columnOffset).PasteSpecial xlPasteValuesAndNumberFormats
Application.CutCopyMode = False
End With
End Sub
И это то, что я получаю после запускакод три раза - что я думаю, что вы хотите.