Последняя не пустая ячейка (столбец) в данной строке; Excel VBA - PullRequest
15 голосов
/ 02 февраля 2011

У меня есть лист Excel, в котором мне нужно найти последнюю непустую ячейку в определенной строке.

Как мне это сделать?

Ниже выберет это для меня, но выберет первая не пустая ячейка, мне нужна последняя не пустая ячейка в строке # 29.

Worksheets("DTCs").Range("A29").End(xlToRight).Select

Ответы [ 2 ]

14 голосов
/ 21 декабря 2011

Я расширил свой комментарий выше, чтобы предоставить решения, которые

  • не используют 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
12 голосов
/ 02 февраля 2011

Я думаю, что это может работать, просто поиск в другом направлении, так что-то вроде:

Worksheets("DTCs").Range("IV29").End(xlToLeft).Select

Хотя, возможно, потребуется изменить IV на что-то другое в зависимости от версии Excel (кажется, эторабота в 2003 году).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...