Avatar billede Casper Andersen Juniormester
12. juni 2013 - 10:28 Der er 23 kommentarer

Fjern rækker med 0 værdi i excel

Hej Eksperten's brugere

Jeg ønsker en måde hvorpå jeg kan slette de rækker hvor værdien er 0, dette er for 700 rækker og hver måned. Så jeg ønsker at lave en makro, dette ønsker jeg at lave i en ikke VPA/kode løsning. De løsninger jeg har kunnet finde skjuler kun 0 værdien, men jeg har behov for at de bliver slettet.

Med venlig hilsen

Casper
12. juni 2013 - 10:34 #1
Hvad mener du med denne sætning:

Så jeg ønsker at lave en makro, dette ønsker jeg at lave i en ikke VPA/kode løsning.

Makroer er VBA!
Avatar billede Casper Andersen Juniormester
12. juni 2013 - 10:41 #2
Jeg vil indspille en makro som gøre det for mig automatisk.
Avatar billede lordnelson Seniormester
12. juni 2013 - 12:53 #3
En Vba kode er på en måde også en macro , kan da afspilles under makro , så en løkke , his A100 = 0 then slet rækken
Avatar billede Casper Andersen Juniormester
12. juni 2013 - 13:35 #4
Jeg har et excel med 8 kolonner og 626 rækker, så hvis jeg skal slette det manuelt tager det lang tid. Jeg har pt. lavet det sådan at den sortere tallene, største til mindste, for så kan jeg manuelt slette de rækker med 0 værdi manuelt hurtigere end hvis det ikke var sorteret. Men det ville være meget nemmere hvis 0 værdierne blev slette i den makro i stedet for sorteret. Der bliver hentet data fra A7:H626, der hvor jeg skal have slettet nu starter fra A7:H7 og se ellers bare der ned af.

Håber min lidt uddybende forklaring er til gavn.

PS. dette skal gøres i 5-10 ark hver måned. Så manuel sletning tager for lang tid. Det jeg mener med en ikke VPA/kode løsning, er at jeg ikke ønsker at opfinde koden selv, da jeg slet ikke har nok erfaring.
Avatar billede lordnelson Seniormester
12. juni 2013 - 13:51 #5
Starter date altid i A7 ?
Hvilken kolonne står 0 i ?
Avatar billede lordnelson Seniormester
12. juni 2013 - 14:03 #6
Glemte slutter den altid med 626 eller skal det være fleksibel
Avatar billede Casper Andersen Juniormester
12. juni 2013 - 14:25 #7
Det er kasseopgørelser så de slutter d.31, 30 og i februar er der yderligere afvigelser. Men hvis den sletter alle felter hvor F = 0, så er det lige meget om der der kun er 600 felter og den tager 626. Bare alle felter er med, det er det vigtigste.
Avatar billede lordnelson Seniormester
12. juni 2013 - 17:11 #8
Ok prøv den her:
Public Sub SletRaekker()
i = 7
Do While Worksheets("ark1").Range("F" & i).Value <> ""
If Range("f" & i).Value = 0 Then
Rows(i & ":" & i).Delete shift:=xlUp
i = i - 1
End If
i = i + 1
Loop
End Sub

' Worksheets(Her skal navnet på arket stå"
i starter på række 7
Avatar billede Casper Andersen Juniormester
12. juni 2013 - 17:42 #9
Da jeg satte din formel ind skete der da et eller andet og den stoppede ikke før jeg stoppede den i job listen. Jeg har fundet en midlertidig løsning indtil jeg lige får fundet den rigtige formel, min makro ser således ud.

Sub Kunde1()
'
' Kunde1 Makro
' Ændret dokument
'

'
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "='Dagsrapporter Eksport'!R[5]C"
    Range("A1").Select
    Selection.AutoFill Destination:=Range("A1:H1"), Type:=xlFillDefault
    Range("A1:H1").Select
    Selection.AutoFill Destination:=Range("A1:H621"), Type:=xlFillDefault
    Range("A1:H621").Select
    Columns("B:B").Select
    Range("B586").Activate
    Selection.NumberFormat = "dd.mm.yyyy;@"
    Columns("E:E").Select
    Range("E586").Activate
    Selection.NumberFormat = "0"
    Columns("F:F").Select
    Range("F586").Activate
    Selection.NumberFormat = "#,##0.00"
    Columns("F:F").Select
    Range("F586").Activate
    ActiveWorkbook.Worksheets("Ark1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Ark1").Sort.SortFields.Add Key:=Range("F2:F621"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Ark1").Sort
        .SetRange Range("A1:H621")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

Det der sker er at jeg læser alt data fra et ark over i et andet, her formatere jeg så 3 koloner så dato står som dato, kontonr er uden 1000 tals separator og der er 1000 tals separator på beløb. Som midlertidig løsning, sortere jeg så beløb med største til mindste. Hvilket gør jeg har en række følge i kolonnen der hedder 1. 0<, .2 0, 3.>0, så går jeg ind og sletter alle 0 værdi rækkerne manuelt og så er det sådan set løst. Men tænker der er en formel som sletter 0 værdierne for mig. Hvis der ikke er så er denne også en holdbar løsning.

Tak for spørgsmål og svar indtil videre, har bare ikke helt fået løst problemet endnu.
Avatar billede lordnelson Seniormester
13. juni 2013 - 05:02 #10
Hmm den virker upåklageligt her
Kører så længe der er noget i F
uanset hvad
Sletter alle rækker med 0
Går en tur tilbage fordi hvis der kommer
2 eller flere nuller efter hinanden
Avatar billede Casper Andersen Juniormester
13. juni 2013 - 08:46 #11
Så tror jeg bare ikke jeg er helt med på hvordan jeg skal skrive det worksheet korrekt. Eller tager det bare noget tid, fordi der er 626 rækker den skal regne igennem ?
Avatar billede lordnelson Seniormester
13. juni 2013 - 09:26 #12
Hvis du altid kører makroen i det rigtige Worksheet , kan du godt undvære den
Do Range("F" & i).Value <> ""

Hmmm 626 rækker næ ikke så længe på en nogenlunde pc. kommer an på hvor mange nuller der er

Se den her:
Public Sub SletRaekker()
Dim start As Date
Dim slut As Date
Dim i As Integer


start = Now()

i = 7
Do While Range("F" & i).Value <> ""
If Range("f" & i).Value = 0 Then
Rows(i & ":" & i).Delete shift:=xlUp
i = i - 1
End If
i = i + 1
Loop
slut = Now()
MsgBox "Den startede: " & start & vbNewLine & "Den sluttede " & slut & vbNewLine & "Det tog " & Second(slut - start) & " sekunder "

End Sub

Den har jeg kørt på 700 rækker det tog 1 sekund
Avatar billede Casper Andersen Juniormester
13. juni 2013 - 11:09 #13
Så hvis jeg skal have den sammenkoblet med det jeg selv har lavet hvordan skal den så se ud?

Det her er det jeg skal bruge fra min egen:

Sub Kunde1()
'
' Kunde1 Makro
' Ændret dokument
'

'
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "='Dagsrapporter Eksport'!R[5]C"
    Range("A1").Select
    Selection.AutoFill Destination:=Range("A1:H1"), Type:=xlFillDefault
    Range("A1:H1").Select
    Selection.AutoFill Destination:=Range("A1:H621"), Type:=xlFillDefault
    Range("A1:H621").Select
    Columns("B:B").Select
    Range("B586").Activate
    Selection.NumberFormat = "dd.mm.yyyy;@"
    Columns("E:E").Select
    Range("E586").Activate
    Selection.NumberFormat = "0"
    Columns("F:F").Select
    Range("F586").Activate
    Selection.NumberFormat = "#,##0.00"
    Columns("F:F").Select
    Range("F586").Activate

Så skal jeg bare have sat det sidste på så den sletter alle o værdier.

Da jeg havde kørt min midlertidige makro så gik jeg fra 626 rækker til 227 rækker, så der er rimeligt mange 0 værdi rækker.
Avatar billede lordnelson Seniormester
13. juni 2013 - 11:43 #14
Makroen hedder SletRaekker

Så du skriver bare SletRaekker der hvor den skal kører
Avatar billede Casper Andersen Juniormester
13. juni 2013 - 14:00 #15
Hej lordnelson

Tak for svaret men er ikke lige helt med på hvad du mener med den sidste besked. Hvordan skal kodningen se ud?
Avatar billede lordnelson Seniormester
13. juni 2013 - 14:37 #16
Din kode:
Sub Kunde1()
'
' Kunde1 Makro
' Ændret dokument
'

'
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "='Dagsrapporter Eksport'!R[5]C"
    Range("A1").Select
    Selection.AutoFill Destination:=Range("A1:H1"), Type:=xlFillDefault
    Range("A1:H1").Select
    Selection.AutoFill Destination:=Range("A1:H621"), Type:=xlFillDefault
    Range("A1:H621").Select
    Columns("B:B").Select
    Range("B586").Activate
    Selection.NumberFormat = "dd.mm.yyyy;@"
    Columns("E:E").Select
    Range("E586").Activate
    Selection.NumberFormat = "0"
    Columns("F:F").Select
    Range("F586").Activate
    Selection.NumberFormat = "#,##0.00"
    Columns("F:F").Select
    Range("F586").Activate

hvis den er færdig her
skriver du
SletRaekker
Så kører den , makroen sletraekker
Avatar billede Casper Andersen Juniormester
13. juni 2013 - 14:59 #17
Jeg kan ikke få det til at virke?

Lige et ekstra spørgsmål, efter at jeg har lavet makro, så hver gang jeg åbner excel så bliver der åbnet et ekstra excel vindue. Hvilket ikke direkte er til gene, men det irritere mig at det åbner. Hvordan får jeg excel til ikke at gøre dette?
Avatar billede lordnelson Seniormester
13. juni 2013 - 17:38 #18
Først prøv makro alene
Virker den ?
Ok har du makroer i Personlig project mappe ?
Hvis du går i VBA ALT + F11
kan du se om der er 2 mapper
så hedder den ene nemlig personlig makro project mappe
det er fordi du ha makroer liggende her
Hvis du ønsker ikke at ha det, skal alle makroer her slettes

Næst
Lav en makro
Sub blabla()
SletRaekker
end sub
Virker den ?
Avatar billede Casper Andersen Juniormester
14. juni 2013 - 08:26 #19
Nu har jeg fået sat alt sammen og det virker næsten, der er 4 rækker med 0 værdi der ikke bliver slettet. Dette er tilfældet i forskellige ark. Men det er de samme 4, jeg ved godt man bare kan slette dem, men hvis man skal slette de sidste 4 manuelt så kan jeg lige så godt undlade slet rækker makroen og så sortere dem selv?

Nogle ide om hvorfor den undlade de 4 rækker. Det er ikke de første i arket den henter fra, de forekommer efter række nr. 10 og så til nr. 20 ca.?
Avatar billede lordnelson Seniormester
14. juni 2013 - 21:59 #20
Hmmmmmm Har du mulighed for at sende en fil med dem I ?
Avatar billede Casper Andersen Juniormester
17. juni 2013 - 09:27 #21
Kan jeg desværre ikke.

Min Makro ser således ud.

Sub Kunde()
'
' Kunde Makro
' Makro for kunder
'

'
    ActiveCell.FormulaR1C1 = "='Dagsrapporter Eksport'!R[5]C"
    Range("A1").Select
    Selection.AutoFill Destination:=Range("A1:H1"), Type:=xlFillDefault
    Range("A1:H1").Select
    Selection.AutoFill Destination:=Range("A1:H626"), Type:=xlFillDefault
    Range("A1:H626").Select
    Columns("B:B").Select
    Range("B600").Activate
    Selection.NumberFormat = "dd.mm.yyyy;@"
    Columns("E:E").Select
    Range("E600").Activate
    Selection.NumberFormat = "0"
    Columns("F:F").Select
    Range("F600").Activate
    Selection.NumberFormat = "#,##0.00"
   
    i = 7
Do While Range("F" & i).Value <> ""
If Range("f" & i).Value = 0 Then
Rows(i & ":" & i).Delete shift:=xlUp
i = i - 1
End If
i = i + 1
Loop
slut = Now()
MsgBox "Den startede: " & Start & vbNewLine & "Den sluttede " & slut & vbNewLine & "Det tog " & Second(slut - Start) & " sekunder "

   
End Sub
Avatar billede Casper Andersen Juniormester
17. juni 2013 - 09:45 #22
Jeg fandt ud af problemet, vi eller jeg havde misforstået hinanden. Jeg skulle bruge at den slettede 0 værdierne fra rækker 7 i mit data ark, men den gør det i arket hvor tallene er hentet. Så grunden til at jeg havde 4 felter med 0 i værdi var at makroen fjern rækker første startede ved række 7, så de første 6 rækker ikke var med i makroen. Jeg ændrede det til række 2, da række 1 er tekst og så virkede det. Så lordnelson, du får tildelte point for dit svar som virkede, efter jeg lige forstod det og fordi du ihærdigt forsøgte at hjælpe. Jeg siger tusind mange gange tak for hjælpen.
Avatar billede Casper Andersen Juniormester
30. marts 2015 - 10:45 #23
Kan se jeg stadig har point til denne tråd til at hænge, kan du ikke skrive et svar så du kan få de 30 point ?
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

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