Возвращает диапазон от A1 до истинной последней используемой ячейки
Я хочу выделить все строки и столбцы в электронной таблице. Макрос должен быть динамическим, поскольку количество столбцов и строк имеет тенденцию меняться каждый раз, когда будет вызываться макрос. Он также должен иметь возможность учитывать пустые строки и столбцы.
Эта подпрограмма выполняет часть процесса:
Sub FindLastCell()
Cells.Find(What:="*", After:=[A1], SearchDirection:=xlPrevious).Select
End Sub
Он находит и выбирает самую последнюю ячейку в электронной таблице. Теперь, когда я нашел самую последнюю ячейку в электронной таблице, как выбрать ячейку A1 для LastCell в качестве диапазона?
Ответы
Ответ 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