Последняя непустая ячейка в строке; Excel VBA
У меня есть лист excel, в котором мне нужно найти последнюю непустую ячейку в определенном столбце.
Как это сделать?
Ниже выберете это для меня, но он выберет первую непустую ячейку, мне нужна последняя непустая ячейка в строке.
Worksheets("DTCs").Range("A29").End(xlToRight).Select
Ответы
Ответ 1
Я думаю, что это может работать только для поиска с другого направления, поэтому что-то вроде:
Worksheets("DTCs").Range("IV29").End(xlToLeft).Select
Хотя, возможно, IV нужно будет изменить на что-то еще в зависимости от версии Excel (похоже, это работает в 2003 году).
Ответ 2
Я расширил свой комментарий выше, чтобы предоставить решения, которые
- не используйте
Select
- используется для использования последней ячейки в строке 1
- укажите, что вся строка пуста
- для полного заполнения строки.
Метод Find
во втором коде представляет собой гораздо более прямой метод установления первой непустой ячейки
Эта строка Set rng1 = ws.Rows(1).Find("*", ws.[a1], xlValues, , xlByColumns, xlPrevious)
говорит, начните в ячейке A1 листа "DTCa", затем оглянитесь назад (т.е. из последней ячейки в строке 1) в строке 1 по столбцу, ищите что-нибудь (*
). Этот метод либо находит последнее не пустое, либо возвращает Nothing
, т.е. Пустую строку
с помощью xltoLeft
со специальными проверками
Sub Method1()
Dim ws As Worksheet
Dim rng1 As Range
Set ws = Sheets("DTCs")
If ws.Cells(1, Columns.Count) = vbNullString Then
Set rng1 = ws.Cells(1, Columns.Count).End(xlToLeft)
If rng1.Column <> 1 Then
'return last used cell
MsgBox "rng1 contains " & rng1.Address(0, 0)
Else
If ws.[a1] = vbNullString Then
MsgBox ws.Name & " row1 is completely empty", vbCritical
Else
'true last used cell is A1
MsgBox "rng1 contains " & rng1.Address(0, 0)
End If
End If
Else
'last cell is non-blank
MsgBox ws.Cells(1, Columns.Count) & " contains a value", vbCritical
End If
End Sub
рекомендуется
Sub Method2()
Dim ws As Worksheet
Dim rng1 As Range
Set ws = Sheets("DTCs")
Set rng1 = ws.Rows(1).Find("*", ws.[a1], xlFormulas, , xlByColumns, xlPrevious)
If Not rng1 Is Nothing Then
MsgBox "rng1 contains " & rng1.Address(0, 0)
Else
MsgBox ws.Name & " row1 is completely empty", vbCritical
End If
End Sub