Excel VBA: получить последнюю ячейку, содержащую данные в выбранном диапазоне - PullRequest
4 голосов
/ 09 января 2012

Как использовать Excel VBA для получения последней ячейки, содержащей данные в определенном диапазоне, например в столбцах A и B Range("A:B")?

Ответы [ 3 ]

8 голосов
/ 09 января 2012

с использованием Find, как показано ниже, полезно как

  • может сразу найти последнюю (или первую) ячейку в 2D-диапазоне
  • тестирование на Nothing определяет пустой диапазон
  • будет работать в диапазоне, который не может быть смежным (то есть в диапазоне SpecialCells)

замените "YourSheet" на имя листа, который вы ищете

Sub Method2()
    Dim ws As Worksheet
    Dim rng1 As Range
    Set ws = Sheets("YourSheet")
    Set rng1 = ws.Columns("A:B").Find("*", ws.[a1], xlValues, , xlByRows, xlPrevious)
    If Not rng1 Is Nothing Then
        MsgBox "last cell is " & rng1.Address(0, 0)
    Else
        MsgBox ws.Name & " columns A:B are empty", vbCritical
    End If
End Sub
6 голосов
/ 09 января 2012

Вы можете попробовать несколько способов:

Использование xlUp

Dim WS As Worksheet
Dim LastCellA As Range, LastCellB As Range
Dim LastCellRowNumber As Long

Set WS = Worksheets("Sheet1")
With WS
    Set LastCellA = .Cells(.Rows.Count, "A").End(xlUp)
    Set LastCellB = .Cells(.Rows.Count, "B").End(xlUp)
    LastCellRowNumber = Application.WorksheetFunction.Max(LastCellA.Row, LastCellB.Row)
End With

Использование SpecialCells

Dim WS As Worksheet
Dim LastCell As Range
Set LastCell = Range("A:B").SpecialCells(xlCellTypeLastCell)

Последний иногда может быть хитрым и может работать не так, как вы хотелиit to.

Дополнительные советы

Вы также можете посмотреть страницу Чипа Пирсона об этой проблеме

0 голосов
/ 09 января 2012

Для выбора переменной вы можете использовать

Sub test()
    Dim arrArray As Variant
    Dim iAct As Integer
    Dim iHighest As Integer
    arrArray = Split(Selection.Address(1, 1, xlR1C1), ":")
    For Count = Right(arrArray(0), 1) To Right(arrArray(1), 1)
        iAct = ActiveSheet.Cells(Rows.Count, Count).End(xlUp).Row
        If iAct > iHighest Then iHighest = iAct
    Next Count
    MsgBox iHighest
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...