Avatar billede warberg78 Nybegynder
29. oktober 2008 - 13:25 Der er 4 kommentarer og
1 løsning

Slette flere rækker og indsætte rækker under 5 cifret tal

Jeg har blandt andet følgende tal i kolonne A som fortsætter i rigtig mange rækker:

34BC
Side
Valuta
-------
Konto
-------
FÆLLES

1

90
70022

1

90


Jeg skal have slettet de fem øverste rækker ud fra deres værdi og efter det sidste 5 cifret tal skal der indsætte en tom række

Koden jeg har lavet ser således ud:

Dim C As Range

For Each C In ActiveSheet.Columns("A").Cells
                If C.Value = "Side" Then
                C.EntireRow.Delete
       
                ElseIf C.Value = "34BC" Then
                C.EntireRow.Delete
       
                Elseif C.Value = "Valuta" Then
                C.EntireRow.Delete

                ElseIf C.Value = "Konto" Then
                C.EntireRow.Delete
       
                Elseif Left(C.Value, 7) = "-------" Then
                C.EntireRow.Delete
         
                ElseIf Len(C.Value) = 5 Then
                C.Offset(1).EntireRow.Insert
     
End if
    Next C       

Mit problem er at man formentligt ikke kan have så mange elseif i en kode, og derfor sletter den ikke alle linjer og det har jeg forsøgt at afhjælpe ved at splitte det op i 3 subs som gennemløber kolonne A med hver 2 kriteriaer, men uden held, bortset fra når jeg kører hver sub en 2-3 gange så ender det med at alle rækker er fjernet. Probelmet er også at den kun slette den første række med "------" og springer og den der står under "Konto"
Avatar billede warberg78 Nybegynder
29. oktober 2008 - 13:27 #1
Derudover er det lidt et problem at makroen tjekker samtlige celler i kolonne A efter, da det kun skal være indtil der ikke er flere tal i kolonnen
Avatar billede kabbak Professor
29. oktober 2008 - 14:17 #2
Public Sub Slet()

    Dim RW As Long, I As Long
    RW = Range("A65536").End(xlUp).Row
    For I = RW To 1 Step -1

        If Cells(I, 1).Value = "Side" Then
            Cells(I, 1).EntireRow.Delete
        End If

        If Cells(I, 1).Value = "34BC" Then
            Cells(I, 1).EntireRow.Delete
        End If

        If Cells(I, 1).Value = "Valuta" Then
            Cells(I, 1).EntireRow.Delete
        End If

        If Cells(I, 1).Value = "Konto" Then
            Cells(I, 1).EntireRow.Delete
        End If

        If Left(Cells(I, 1).Value, 7) = "-------" Then
            Cells(I, 1).EntireRow.Delete
        End If

        If Len(Cells(I, 1).Value) = 5 Then
            Cells(I, 1).Offset(1).EntireRow.Insert
        End If

    Next
End Sub
Avatar billede kabbak Professor
29. oktober 2008 - 14:20 #3
Når man sletter rækker, er det bedst at starte fra bunden.

Hvis du nu sletter række 5, så rykker række 6 op på dens plads, så ved next, er du faktisk på den række der før var 7, så du hopper over 6 på den måde.
Avatar billede warberg78 Nybegynder
29. oktober 2008 - 16:10 #4
Hej Kabbak, mange tak for hjælpen og det virker helt upåklageligt nu, så hvis du smider et svar, så er der point på vej. Men da jeg aldrig har brugt "Step" før, vil jeg lige høre om det er korrekt opfattet at dit "Step -1" er det som at den sletter linjerne fra bunden og derved undgår det med at den ikke tjekker linjen som er under den linje som slettes?
Avatar billede kabbak Professor
29. oktober 2008 - 16:49 #5
Jep,"Step -1" tæller nedad med 1 række ad gangen, så linjen under er tjekket inden sletning.
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
Kurser inden for grundlæggende programmering

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