Determine last non-value (may have a formula) row in column

前端 未结 4 1368
一向
一向 2021-01-22 13:59

I have a column that has a formula in each row field. The formula propagates data from another Excel spreasheet. If there is nothing in the row field, though, the row remains bl

相关标签:
4条回答
  • 2021-01-22 14:26

    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:

    Function GetLastFormulaBlank(rngInput As Excel.Range) As Excel.Range
    
    Dim rngFormulas As Excel.Range
    Dim rngArea As Excel.Range
    Dim CellCounter As Long
    Dim AreaCounter As Long
    Dim varAreaCells As Variant
    Dim rngLastFormulaBlank As Excel.Range
    
    Set rngFormulas = rngInput.SpecialCells(xlCellTypeFormulas)
    For AreaCounter = rngFormulas.Areas.Count To 1 Step -1
        Set rngArea = rngFormulas.Areas(AreaCounter)
        varAreaCells = rngArea.Value2
        If IsArray(varAreaCells) Then
            For CellCounter = UBound(varAreaCells) To LBound(varAreaCells) Step -1
                If varAreaCells(CellCounter, 1) = "" Then
                    Set rngLastFormulaBlank = rngArea.Cells(CellCounter)
                    Exit For
                End If
            Next CellCounter
        Else
            If varAreaCells = "" Then
                Set rngLastFormulaBlank = rngArea.Cells(1)
            End If
        End If
        If Not rngLastFormulaBlank Is Nothing Then
            Exit For
        End If
    Next AreaCounter
    
    Set GetLastFormulaBlank = rngLastFormulaBlank
    End Function
    

    You'd call it like this:

    Sub test()
    Dim rngLastFormulaBlank As Excel.Range
    
    Set rngLastFormulaBlank = GetLastFormulaBlank(ActiveSheet.Range("A:A"))
    If Not rngLastFormulaBlank Is Nothing Then
        MsgBox rngLastFormulaBlank.Address
    Else
        MsgBox "no formulas with blanks in range"
    End If
    End Sub
    
    0 讨论(0)
  • 2021-01-22 14:33

    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.

    Sub Test()
    
    Dim i As Long, tempLast As Long, lastRow As Long
    tempLast = Range("A" & Rows.Count).End(xlUp).Row
    
    For i = tempLast To 1 Step -1
        If Len(Cells(i, 1)) <> 0 Then
            If Not Cells(i, 1).HasFormula Then
                lastRow = i
                Exit For
            End If
        End If
    Next
    
    MsgBox lastRow
    End Sub
    

    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.

    0 讨论(0)
  • 2021-01-22 14:43

    Please follow below code.

    Sub Test()
        Dim i As Long, tempLast As Long, lastRow As Long
        tempLast = Range("C" & Rows.Count).End(xlUp).Row
    
        For i = 1 To tempLast
              If Cells(i, 1).HasFormula Or Not Cells(i, 1).HasFormula Then
                 If Len(Cells(i, 1).Value) < 1 Then
                    lastRow = i
                    Exit For
                End If
            End If
        Next
    
        MsgBox lastRow
    End Sub
    
    0 讨论(0)
  • 2021-01-22 14:49

    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

    Sub FindLastValue()
    Dim jLastRow As Long
    jLastRow = ActiveSheet.Cells.Find(What:="*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    End Sub
    
    0 讨论(0)
提交回复
热议问题