Avatar billede perhol Seniormester
09. februar 2011 - 20:28 Der er 5 kommentarer og
1 løsning

Hjælp til VBA makro

Jeg bruger en makro til at rense et datasæt for ugyldige rækker.
Det virker (b)næsten(/b) som det skal!

Der er bare det problem at ikke alle ugyldige rækker bliver slettet.

Det datasæt jeg tester på indeholder 792 Rækker i alt.

Når jeg har renset det for ugyldige Rækker manuelt indeholder det 178 gyldige Rækker.

Når makroen renser det, indeholder det 404 Rækker når makroen er færdig, altså stadig 226 ugyldige rækker der burde blive slettet af makroen.

Køres makroen en gang til bliver de sidste ugyldige rækker fjernet og så indeholder datasættet 178 gyldige Rækker som det skal.

Kan nogen gennemskue hvad der er galt med koden?

*******************************************************************
(b)Her er koden:(/b)

Sub SletRækker()
'Aktiverer arket "DataKopi"    Worksheets("DataKopi").UsedRange.Delete

    Worksheets("DataKopi").Activate
   
'Går til sidste celle i datasættet
    Lastrow = Cells(Rows.Count, "G").End(xlUp).Row
   
'Sletter rækker der indeholder "Overført fra side 1"
    Dim i As Integer
    With ActiveSheet
        For i = Lastrow To 1 Step -1
            If .Cells(i, "B").Value = "Overført fra side 1" Then
                .Rows(i).Delete
            End If
        Next i
    End With
   
'Går til sidste celle i datasættet
    Lastrow = Cells(Rows.Count, "G").End(xlUp).Row
   
'Sletter rækker der indeholder "Overføres til nyt ark:"
    With ActiveSheet
        For i = Lastrow To 1 Step -1
            If .Cells(i, "D").Value = "Overføres til nyt ark:" Then
                .Rows(i).Delete
            End If
        Next i
    End With
   
'Går til sidste celle i datasættet
    Lastrow = Cells(Rows.Count, "G").End(xlUp).Row
   
'Sletter rækker der ikke indeholder data
    With ActiveSheet
        For i = Lastrow To 1 Step -1
            If .Cells(i, "C").Value & .Cells(i, "D").Value = "" Then
                .Rows(i).Delete
            End If
        Next i
    End With
End Sub

*******************************************************************

(b)Ugyldige rækker der bliver fjernet ser f.eks. sådan her ud:(/b)

        A            B            C            D            E            F            G
1                                                                                    0
2                                    Overføres til nyt ark:                        1068
3            Overført fra side 1                                                    1068

(b)Gyldige rækker der ikke bliver fjernet ser f.eks. sådan her ud:(/b)

        A            B            C                                D            E            F            G
1  29-01-2010      19  Andet - SUKA - Sommerferie mm        Suka fest                    700          622
2  30-01-2010      20    Anden Indtægt/Overskud          Retur fra Suka-fest    446                      1068

*******************************************************************
Avatar billede bak Forsker
09. februar 2011 - 22:07 #1
test lige dette her

Sub SletRækker()
'Aktiverer arket "DataKopi"    Worksheets("DataKopi").UsedRange.Delete
    Dim wks              As Worksheet
    Dim i                As Integer
    Set wks = Worksheets("DataKopi")
    With wks
        'Går til sidste celle i datasættet
        Lastrow = .Cells(Rows.Count, "G").End(xlUp).Row

        'Sletter rækker der indeholder "Overført fra side 1"
        For i = Lastrow To 1 Step -1
            If .Cells(i, "B").Value = "Overført fra side 1" Then
                .Rows(i).Delete
            End If
        Next i

        'Går til sidste celle i datasættet
        Lastrow = .Cells(Rows.Count, "G").End(xlUp).Row
        'Sletter rækker der indeholder "Overføres til nyt ark:"

        For i = Lastrow To 1 Step -1
            If .Cells(i, "D").Value = "Overføres til nyt ark:" Then
                .Rows(i).Delete
            End If
        Next i


        'Går til sidste celle i datasættet
        Lastrow = .Cells(Rows.Count, "G").End(xlUp).Row

        'Sletter rækker der ikke indeholder data

        For i = Lastrow To 1 Step -1
            If (Len(.Cells(i, "C").Value) + Len(.Cells(i, "D").Value)) = 0 Then
                .Rows(i).Delete
            End If
        Next i

    End With
End Sub
Avatar billede perhol Seniormester
09. februar 2011 - 22:22 #2
Det virker.

Svar.

Og når nu du har svaret, så tjek lige et nyt kodeeksempel jeg har fundet på http://www.rondebruin.nl/delete.htm .

Koden er vildt hurtig, men den mangler lige det sidste :b)
Avatar billede bak Forsker
09. februar 2011 - 22:34 #3
Med 800 rækker behøver du vel ikke en vildt hurtig kode :-)

Nogle af koderne i dette link er måske endnu hurtigere..
http://www.eksperten.dk/spm/733513
Avatar billede bak Forsker
09. februar 2011 - 22:44 #4
Option Explicit

Sub SletRækker()
'Aktiverer arket "DataKopi"    Worksheets("DataKopi").UsedRange.Delete
    Dim wks              As Worksheet
    Dim i                As Long
    Dim LastRow          As Long
    Set wks = Worksheets("DataKopi")
   
    Application.ScreenUpdating = False
   
    With wks
        'Går til sidste celle i datasættet
        LastRow = .Cells(Rows.Count, "G").End(xlUp).Row

        For i = LastRow To 1 Step -1
            If .Cells(i, "B").Value = "Overført fra side 1" Then .Rows(i).EntireRow.Delete
            If .Cells(i, "D").Value = "Overføres til nyt ark:" Then .Rows(i).EntireRow.Delete
            If (Len(.Cells(i, "C").Value) + Len(.Cells(i, "D").Value)) = 0 Then .Rows(i).EntireRow.Delete

        Next i

    End With
   
    Application.ScreenUpdating = True
End Sub
Avatar billede perhol Seniormester
09. februar 2011 - 22:59 #5
Tjekkede lige hvor lang tid koden tager.
Den tager 23 sekunder.
Den jeg har fundet tager så kort at man lige når at se skærmen blinke - nok værd at gå efter.

Jeg har oprette spørgsmål her

http://www.eksperten.dk/spm/931240
Avatar billede perhol Seniormester
09. februar 2011 - 23:09 #6
Så ikke lige at du havde sat ny kode her.

Testede den lige.

Det tog 2 sekunder.

Vildt hurtigt.

Tak endnu engang.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester