问题
How do I use Excel VBA to get the last cell that contains data within a specific range, such as in columns A and B Range("A:B")?
回答1:
using Find like below is useful as it
- can find the last (or first) cell in a 2D range immediately
- testing for
Nothingidentifies a blank range - will work on a range that may not be contiguous (ie a
SpecialCellsrange)
change "YourSheet" to the name of the sheet you are searching
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
回答2:
You can try several ways:
Using 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
Using SpecialCells
Dim WS As Worksheet
Dim LastCell As Range
Set LastCell = Range("A:B").SpecialCells(xlCellTypeLastCell)
The latter can sometimes be tricky and might not work as you wanted it to.
More tips
You can also have a look at Chip Pearson's page about this issue
回答3:
For a variable selection you can use
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
来源:https://stackoverflow.com/questions/8785063/excel-vba-get-last-cell-containing-data-within-selected-range