eerste lege regel zoeken

Status
Niet open voor verdere reacties.

pkuipers

Gebruiker
Lid geworden
8 jul 2014
Berichten
101
Hallo, ik gebruik de volgende code om de eerste lege regel te vinden in een sheet:

Code:
   iRow = Cells.Find(What:="*", _
                    After:=ws.Cells(1), _
                    Lookat:=xlPart, _
                    LookIn:=xlValues, _
                    SearchOrder:=xlByRows, _
                    SearchDirection:=xlPrevious, _
                    MatchCase:=False).Row + 1
Nu blijft deze code de laatste regel aangeven waar een formule instaat, ondanks dat ik bij "LookIn" xlValues ingevuld heb.
Wat doe ik fout?

Groetjes en alvast bedankt,

Peter
 
Laatst bewerkt:
Wat doet deze?
Code:
iRow = Cells.Find(What:="*", SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row + 1
 
Of:
Code:
iRow = ws.Range("A1").CurrentRegion.Rows.Count + 1
 
Of:
Code:
iRow = ws.Range("A1").CurrentRegion.Rows.Count + 1

Hallo edmoor, deze regel kijkt naar de eerste regel die leeg is maar regels daaronder zijn niet leeg. Je moet dus altijd vanaf onderen beginnen.
 
Laatst bewerkt:
Dan is je vraag niet correct gesteld.
Je vraagt om de eerste lege regel, niet om de eerste lege regel vanaf onderen.
 
Dan is je vraag niet correct gesteld.
Je vraagt om de eerste lege regel, niet om de eerste lege regel vanaf onderen.

Oke, sorry. Alleen dan nog kolom a, b en c op deze regel zijn leeg maar d, e, f, g, en h niet.
 
Voor de duidelijkheid.
Je wilt de eerste compleet lege regel, dus alle cellen in die regel, vanaf de laatste ergens gevulde regel weten?
 
Dan zo:
Code:
Sub EersteLegeRegelVanOnderen()
    With ActiveSheet
        For i = .Cells(.Rows.Count, "A").End(xlUp).Row To 1 Step -1
            Set Row = .Rows(i)
            If WorksheetFunction.CountA(Row) = 0 Then
                irow = i
                Exit For
            End If
        Next i
    End With
End Sub
 
Dan zo:
Code:
Sub EersteLegeRegelVanOnderen()
    With ActiveSheet
        For i = .Cells(.Rows.Count, "A").End(xlUp).Row To 1 Step -1
            Set Row = .Rows(i)
            If WorksheetFunction.CountA(Row) = 0 Then
                irow = i
                Exit For
            End If
        Next i
    End With
End Sub

Hallo edmoor, ook dat werkt niet. Want met (.Rows.Count, "A") wordt alleen in de kolom a gekeken en niet naar de andere kolommen in de zelfde regel.
 
Je moet kolom A aanpassen naar de kolom waar de meeste regels staan.
 
Je weet dus ook niet welke kolom als laatste is gevuld?
Dan moet je die dus ook opzoeken:
Code:
Sub EersteLegeRegelVanOnderen()
    With ActiveSheet
        For i = .Cells.Find(What:="*", _
                 After:=Range("A1"), _
                 LookAt:=xlPart, _
                 LookIn:=xlFormulas, _
                 SearchOrder:=xlByRows, _
                 SearchDirection:=xlPrevious, _
                 MatchCase:=False).Row To 1 Step -1
            Set Row = .Rows(i)
            If WorksheetFunction.CountA(Row) = 0 Then
                irow = i
                Exit For
            End If
        Next i
    End With
End Sub
 
Laatst bewerkt:
Je weet dus ook niet welke kolom als laatste is gevuld?
Dan moet je die dus ook opzoeken:
Code:
Sub EersteLegeRegelVanOnderen()
    With ActiveSheet
        For i = .Cells.Find(What:="*", _
                 After:=Range("A1"), _
                 LookAt:=xlPart, _
                 LookIn:=xlFormulas, _
                 SearchOrder:=xlByRows, _
                 SearchDirection:=xlPrevious, _
                 MatchCase:=False).Row To 1 Step -1
            Set Row = .Rows(i)
            If WorksheetFunction.CountA(Row) = 0 Then
                irow = i
                Exit For
            End If
        Next i
    End With
End Sub

Hallo edmoor, bedankt voor de oplossing.
 
Hallo edmoor, bedankt voor de oplossing.

Ik heb op internet nog een eenvoudiger oplossing gevonden: "6" kan je vervangen door het aantal kolommen die je wilt controleren.
Code:
Sub VindLaatsteRegel2()
Dim vZoekRegel(6) As Variant
Dim i As Integer

    For i = 1 To 6
        vZoekRegel(i) = Cells(Rows.Count, i).End(xlUp).Row
    Next i
   
    MsgBox "De 1e te gebruiken regel is: " & Application.WorksheetFunction.Max(vZoekRegel) + 1

End Sub
 
Laatst bewerkt:
Je weet het maximum kolomnummer wel., uiteraard kan dat dan.
Er zijn altijd andere wegen naar Rome, maar nu ben je dus afhankelijk van die 6 en mijn methode is volledig onafhankelijk en er is geen loop nodig om dat nummer te bepalen.
Je kunt er dus eenmalig een functie van maken die je overal in ieder document kan gebruiken.
 
Laatst bewerkt:
Waarom gebruik je geen tabel (Listobject)? Dan heb je deze exercitie helemaal niet nodig.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan