Excel VBA - поиск последнего столбца с данными

Я нашел этот метод для поиска последних данных, содержащих строку в листе:

ws.Range("A65536").End(xlUp).row

Есть ли аналогичный метод для поиска последних данных, содержащих столбец в листе?

Спасибо.

Ответ 1

Много способов сделать это. Самое надежное - найти.

Dim rLastCell As Range

Set rLastCell = ws.Cells.Find(What:="*", After:=ws.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False)

MsgBox ("The last used column is: " & rLastCell.Column)

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

Dim lColumn As Long

lColumn = ws.Cells(1, Columns.Count).End(xlToLeft).Column

Использование используемого диапазона (менее надежного):

Dim lColumn As Long

lColumn = ws.UsedRange.Columns.Count

Использование используемого диапазона не работает, если у вас нет данных в столбце A. См. здесь для другой проблемы с используемым диапазоном:

См. здесь относительно сброса используемого диапазона.

Ответ 2

Я знаю, что это старо, но я тестировал это разными способами, и это еще не подвело меня, если кто-то не скажет мне об этом.

Номер строки

Row = ws.Cells.Find(What:="*", After:=[A1] , SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

Буква столбца

ColumnLetter = Split(ws.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Cells.Address(1, 0), "$")(0)

Номер столбца

ColumnNumber = ws.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column

Ответ 3

Попробуйте использовать код после активного листа:

Dim J as integer
J = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

Если вы используете только Cells.SpecialCells(xlCellTypeLastCell).Row, проблема будет заключаться в том, что информация xlCellTypeLastCell не будет обновляться, если вы не выполните действие "Сохранить файл". Но использование UsedRange всегда будет обновлять информацию в реальном времени.

Ответ 4

Я думаю, что мы можем изменить код UsedRange из ответа @Readify выше, чтобы получить последний использованный столбец, даже если начальные столбцы пусты или нет.

Итак, этот lColumn = ws.UsedRange.Columns.Count изменен на

этот lColumn = ws.UsedRange.Column + ws.UsedRange.Columns.Count - 1 всегда будет давать достоверные результаты

введите описание изображения здесь

?Sheet1.UsedRange.Column + Sheet1.UsedRange.Columns.Count - 1

Вывод строки 9 в прямом окне.