Подтвердить что ты не робот

Возвращает диапазон от A1 до истинной последней используемой ячейки

Я хочу выделить все строки и столбцы в электронной таблице. Макрос должен быть динамическим, поскольку количество столбцов и строк имеет тенденцию меняться каждый раз, когда будет вызываться макрос. Он также должен иметь возможность учитывать пустые строки и столбцы.

Эта подпрограмма выполняет часть процесса:

Sub FindLastCell()
Cells.Find(What:="*", After:=[A1], SearchDirection:=xlPrevious).Select
End Sub

Он находит и выбирает самую последнюю ячейку в электронной таблице. Теперь, когда я нашел самую последнюю ячейку в электронной таблице, как выбрать ячейку A1 для LastCell в качестве диапазона?

4b9b3361

Ответ 1

Вам нужно сделать эти моды в коде

  • Лист может быть пустым, поэтому вы никогда не должны использовать Select с Find, так как это приведет к ошибке, если Find ничего не возвращает. Вместо этого проверьте, что объект диапазона Is Not Nothing
  • Find может выполнять поиск по строкам и по столбцам. Вам нужно определить и последнюю строку и столбец, чтобы определить истинную последнюю использованную ячейку
  • Как только вы определили истинную последнюю ячейку, используйте Range, чтобы установить диапазон из первой ячейки (A1) в ячейку, определенную двумя диапазонами Find

Pls см. код ниже

Если значение Find получает значение, оно делает диапазон rng3 от A1 до последней использованной ячейки, идентифицированной двумя Find s.

enter image description here

Sub GetRange()
    Dim rng1 As Range
    Dim rng2 As Range
    Dim rng3 As Range
    Set rng1 = Cells.Find("*", [a1], xlFormulas, , xlByRows, xlPrevious)
    Set rng2 = Cells.Find("*", [a1], xlFormulas, , xlByColumns, xlPrevious)
    If Not rng1 Is Nothing Then
        Set rng3 = Range([a1], Cells(rng1.Row, rng2.Column))
        MsgBox "Range is " & rng3.Address(0, 0)
        'if you need to actual select the range (which is rare in VBA)
        Application.Goto rng3 
    Else
        MsgBox "sheet is blank", vbCritical
    End If
End Sub

Ответ 2

Выбор A1 в последней используемой ячейке (включая промежуточные промежутки) в столбце А так же просто:

Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).Select

Чтобы выбрать A1 для последней ячейки, используемой во всем листе (независимо от того, используется ли она в столбце A или нет):

Range("A1:A" & ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row).Select

Ответ 3

Я понял, как изменить код, чтобы выбрать диапазон, начинающийся в указанной ячейке, и завершение в последней ячейке. В строке 8 измените a1 на ячейку, которую вы хотите начать. В моем случае я выбрал j28.

 Set rng3 = Range([j28], Cells(rng1.Row, rng2.Column))

полный код:

    Sub GetRange()
        Dim rng1 As Range
        Dim rng2 As Range
        Dim rng3 As Range
        Set rng1 = Cells.Find("*", [a1], , , xlByRows, xlPrevious)
        Set rng2 = Cells.Find("*", [a1], , , xlByColumns, xlPrevious)
        If Not rng1 Is Nothing Then
            Set rng3 = Range([j28], Cells(rng1.Row, rng2.Column))
            MsgBox "Range is " & rng3.Address(0, 0)
            'if you need to actual select the range (which is rare in VBA)
            Application.Goto rng3
        Else
            MsgBox "sheet is blank", vbCritical
        End If
    End Sub