Avatar billede sdh Mester
25. maj 2009 - 08:51 Der er 15 kommentarer og
1 løsning

Slet rækker hvis

Jeg har en projektmappe med ca 100 ark.
Jeg ønsker en makro der gennemløber alle markeret ark og sletter de rækker(hele rækken) der har 0 værdier (=0) i kolonne D til L. Såfremt bare en kolonne har en værdi og resten er 0 skal rækken ikke slettes.


Jeg arbejder i Excel 2007.

mvh
SDH
Avatar billede hellstern Nybegynder
25. maj 2009 - 09:24 #1
Hej SDH,
Lige et afklarende spørgsmål.
Skal der slettes i alle 100 ark eller kun i de ark som du markere?
Altså en markering af diverse ark med CTRL eller SHIFT.

Hilsen
Tue Hellstern
www.F1-support.dk
Avatar billede hellstern Nybegynder
25. maj 2009 - 10:33 #2
Hej SDH,
Denne makro gennemløber alle ark og sletter de rækker hvor alle celle mellem D og L er = 0

Sub mcrSletNul()
    'Variable
    Dim varAntalArk As Integer
    Dim i As Integer
    Dim varRow As Double
   
    varAntalArk = Sheets.Count
    varRow = 1
   
    For i = 1 To varAntalArk 'Gennemløb af alle ark
        Sheets(i).Select 'Vælg ark
        Range("A1").Select
       
        Do Until ActiveCell.Value = "" 'Gennemløb af data i det enkelte ark
       
            If ActiveCell.Offset(0, 3).Value = 0 And ActiveCell.Offset(0, 4).Value = 0 And _
                ActiveCell.Offset(0, 5).Value = 0 And ActiveCell.Offset(0, 6).Value = 0 And _
                ActiveCell.Offset(0, 7).Value = 0 And ActiveCell.Offset(0, 8).Value = 0 And _
                ActiveCell.Offset(0, 9).Value = 0 Then 'Check af D til L for 0 værdi
               
                'Slet Row
                Rows(varRow & ":" & varRow).Delete shift:=xlUp
            Else
                varRow = varRow + 1
                ActiveCell.Offset(1, 0).Select 'Gå en Row ned
            End If
           
        Loop
   
        varRow = 1
    Next
End Sub

Hilsen
Tue Hellstern
www.F1-support.dk
Avatar billede sdh Mester
25. maj 2009 - 11:26 #3
Må heller præcisere hvor data står.
Dataområde som makroen skal læses på er fra D4 til K313 (ikke L - my mistake) i hvert ark. I kolonne 1 til 3 og række A til C står der tekst.
Jeg ser helst at makroen kører på markeret ark - men hvis makroen bliver hurtigere/mere hensigtsmæssig hvis den kører på alle ark vil jeg heller foretrække dette.

Håber ovenstående er til at forstå.

mvh

SDH
Avatar billede hellstern Nybegynder
25. maj 2009 - 11:35 #4
Hej SDH,
Så blev jeg lige forviret :-)

Det er stadig 0 i cellerne A til L der er betingelsen? Eller?

I den makro jeg har lavet forudsættes det at data starter i cellen A1 og at der ikke forkommer tomme celler. Makrone stoper hvis der kommer en tom celle, dette kan dog ændres hvis du kender data området - D4 til K313 er det data området i alle Ark?

Det betyder ikke det store om makroen skal afvikles på alle ark eller om detkun er på det aktive ark.

/Tue
Avatar billede sdh Mester
25. maj 2009 - 11:42 #5
Det er 0 i cellerne D til K i område D4:K313
Avatar billede hellstern Nybegynder
25. maj 2009 - 12:20 #6
Hej,
Denne makro har følgende forudsætninger:

Data starter i cellen A4
Der forkommer IKKE blanke celler i A kollonen
Check for 0 i cellerne D til K

Den bliver afviklet over alle ark - kan nemt rettes til kun det aktive ark.

Sub mcrSletNul()
    'Variable
    Dim varAntalArk As Integer
    Dim i As Integer
    Dim varRow As Double
   
    varAntalArk = Sheets.Count
    varRow = 1
   
    For i = 1 To varAntalArk 'Gennemløb af alle ark
        Sheets(i).Select 'Vælg ark
        Range("A4").Select
       
        Do Until ActiveCell.Value = "" 'Gennemløb af data i det enkelte ark
       
            If ActiveCell.Offset(0, 3).Value = 0 And ActiveCell.Offset(0, 4).Value = 0 And _
                ActiveCell.Offset(0, 5).Value = 0 And ActiveCell.Offset(0, 6).Value = 0 And _
                ActiveCell.Offset(0, 7).Value = 0 And ActiveCell.Offset(0, 8).Value = 0 Then 'Check af D til L for 0 værdi
               
                'Slet Row
                Rows(varRow & ":" & varRow).Delete shift:=xlUp
            Else
                varRow = varRow + 1
                ActiveCell.Offset(1, 0).Select 'Gå en Row ned
            End If
           
        Loop
   
        varRow = 1
    Next
End Sub
Avatar billede sdh Mester
25. maj 2009 - 13:37 #7
Kan desværre ikke få din makro til at virke efter hensigten. Kan jeg evt. få lov til at maile dig arket så du kan se hvordan det er opbygget.

mvh
SDH
Avatar billede hellstern Nybegynder
25. maj 2009 - 15:04 #8
ja det må du gerne på:

tue@f1-support.dk

/Tue
Avatar billede hellstern Nybegynder
26. maj 2009 - 14:45 #9
E-mail er sendt retur

/Tue
Avatar billede sdh Mester
26. maj 2009 - 15:16 #10
Har desværre ikke modtaget din e-mail endnu???.
SDH
Avatar billede sdh Mester
28. maj 2009 - 09:51 #11
Hej Tue

Din makro virker bare perfekt.
Tager ca. 15 min at gennemløbe og slette rækker i ca 100 ark.

Tusind tak for din hjælp.

SDH

Angiver lige din løsning så andre måske kan få glæde af den:

Sub mcrSletNul()
    'Variable
    Dim varAntalArk As Integer
    Dim i As Integer
    Dim varRow As Double
   
    varAntalArk = Sheets.Count
    varRow = 4
   
    For i = 1 To varAntalArk 'Gennemløb af alle ark
        Sheets(i).Select 'Vælg ark
        Range("D4").Select
       
        Do Until ActiveCell.Value = "" 'Gennemløb af data i det enkelte ark
       
            If ActiveCell.Offset(0, 3).Value = 0 And ActiveCell.Offset(0, 4).Value = 0 And _
                ActiveCell.Offset(0, 5).Value = 0 And ActiveCell.Offset(0, 6).Value = 0 And _
                ActiveCell.Offset(0, 7).Value = 0 And ActiveCell.Offset(0, 8).Value = 0 Then 'Check af D til L for 0 værdi
               
                'Slet Row
                Rows(varRow & ":" & varRow).Delete shift:=xlUp
            Else
                varRow = varRow + 1
                ActiveCell.Offset(1, 0).Select 'Gå en Row ned
            End If
           
        Loop
   
        varRow = 4
    Next
Avatar billede sdh Mester
28. maj 2009 - 09:56 #12
Tue
Send lige et svar så jeg kan komme af med nogle point:-)

SDH
Avatar billede hellstern Nybegynder
28. maj 2009 - 10:59 #13
Hej,
Godt du kunne bruge den :-)

For at få den til at kører hurtigere kan du sætte disse to linjer helt i toppen af koden, lige efter Sub mcrSletNull()

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

og helt nede i bunden lige før End Sub sætter du disse to linjer:
   
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic

Det burde få koden til at kører hurtigere.

Hilsen
Tue Hellstern
www.F1-support.dk
Avatar billede blok Nybegynder
29. maj 2009 - 13:05 #14
Hej Tue
Jeg har "samme problem" næsten. Her er problemet på Ark1.
Jeg henter data fra Ark2 til Ark7 ind i Ark1. Det giver mange tomme rækker, disse tomme rækker skal slettes, kan du hjælpe med en Light-løsning af dette?
Hilsen Blok
Avatar billede hellstern Nybegynder
30. maj 2009 - 11:51 #15
Hej Blok,
Nu skriver du ikke noget om hvordan data ser ud, er det hele rækken der er tom eller er der en betingelse der skal være opfyldt for at slette. Hvis cellerne A1, A2 osv. er tomme er det meget svært at vide hvornår der ikke er mere data.
Kunne du komme med lidt mere information, så skal vi nok finde en løsning

Hilsen
Tue
Avatar billede blok Nybegynder
02. juni 2009 - 16:25 #16
Hej Tue
Ja, det er hele rækken f.eks. fra: A1,B1,C1,D1,E1,F1,G1 og til H1
der er tom og A2,B2,C2,D2,E2,F2,G2 og til H2 der står noget i. Og sådan kan det skifte, MEN er række 1 tom er det ok at slette den, der vil ikke stå noget i f.eks D1, hele rækker er tom eller fyldt.

Hilsen
Søren
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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