I have a column that has a formula in each row field. The formula propagates data from another excel spreasheet. If there's nothing in the row field, though, the row remains blank.
I have found many examples on google to get the last row in a column. However, they fail, because they detect the formula as the row having something in it. That makes sense. However, how can I get the last row in a column that ignores the formula and only attempts to detect values in the column fields?
I'm currently using two methods for searching for the last row in a column of which both fail:
Function lastRowA(rngInput As Range) As Variant Dim WorkRange As Range Dim i As Integer, CellCount As Integer Application.Volatile Set WorkRange = rngInput.Rows(1).EntireRow Set WorkRange = Intersect(WorkRange.Parent.UsedRange, WorkRange) CellCount = WorkRange.Count For i = CellCount To 1 Step -1 If Not IsEmpty(WorkRange(i)) Then lastRowA = WorkRange(i).Value Exit Function End If Next i End Function
and
function lastRow(column as string, optional plusOne as boolean) If (plusOne = False) then plusOne=False End If if (plusOne = False) Then lastRow = Replace(Range(column & "65536").End(xlUp).Address, "$", "") Else lastRow = Range(column & "65536").End(xlUp).Address lastRow = Cells(lastRow) ' Replace(, "$", "") End If End Function
I've never done anything quite like this, but it seems to work correctly and quicky for fairly large areas. Even though you said the column is all formulas, this accounts for a mix of values and formulas, thus the outer loop stepping backwards through the Areas:
You'd call it like this:
Here's a simple way to find the last cell in a column that does not contain a formula. It will be 0 if there is no cell without a formula.
Note that you should use "rows.count" and not 65536 as that is no longer the last row in the newer versions of Excel. Rows.count work no matter the version, or user settings. Usedrange should also be avoided since there is a weird bug where you need to refresh the usedrange or you'll get erroneous results.
If you want to find the last row that contains a non-blank value (either produced by a formula or by entering a constant) try this