14. marts 2013 - 09:06Der er
5 kommentarer og 1 løsning
VBA der kan slette linier der opfylder et kriterium
Hej eksperter
Jeg bruger excel 2010 engelsk version.
Jeg har et regneark med en fane med 22 rækker og 70.000 linier (kan variere). I kolonne K til V indeholder arket salgstal med en kolonne pr måned (12 måneder). Men en hel del af linierne er tomme/0 i kolonne K til V fordi at der ikke er noget salg fx på et bestemt varenr.
Min tanke er nu at jeg gerne vil slette alle de linier der ikke har nogen salgstal i nogen måneder, simpelthen for at reducere størrelsen af mit ark.
Kan der skrives en VBA kode der foretager denne sletning. Enten ved at den kontrollerer at værdierne i kolonne K til V ALLE er 0, eller jeg kan evt tilføje en ekstra kolonne der angiver et "X" hvis rækken skal slettes?
Set Rng = Nothing With .AutoFilter.Range On Error Resume Next Set Rng = .Offset(1, 0).Resize(.Rows.Count - 1, 1) _ .SpecialCells(xlCellTypeVisible) On Error GoTo 0 If Not Rng Is Nothing Then Rng.EntireRow.Delete End With
'Fjerner autofilter .AutoFilterMode = False End With
Next i
With Application .ScreenUpdating = True .Calculation = calcmode End With
Public Sub SletTomme() Dim Rv As Long, I As Long Application.ScreenUpdating = False rw = ActiveSheet.UsedRange.Rows.Count ' finder antal rækker som er brugt i arket For I = rw To 2 Step -1 ' jeg går ud fra at der er overskrifter i række 1, derfor startes i række 2 If Application.WorksheetFunction.Sum(Range(Cells(I, "K"), Cells(I, "V"))) = 0 Then ' tjekker om summen er 0 Cells(I, "D").EntireRow.Delete ' hvis summen er 0, slættes rækken End If Next Application.ScreenUpdating = True End Sub
prøv denne makro på et kopi, husk at makrokørsel ikke kan fortrydes.
Den virker :-) MEN kan man istedet for en almindelig sum lave en absolut sum, så jeg ikke risikerer at slette linier hvor der i en måned er +100 og i en anden måned er -100? Normal ville jeg beregne den absolutte sum som =sumproduct(ABS(K1:V1). Jeg prøvede om jeg kunne ændre til det i din VBA kode, men det kunne jeg ikke finde ud af... Jeg vil nemlig aller helst være fri for at skulle tilføje en kolonne i mit datasheet der beregner den absolutte sum. Jeg vil gerne have det hele i koden istedet.
Public Sub SletTomme() Dim Rv As Long, I As Long, Tom As Boolean Application.ScreenUpdating = False rw = ActiveSheet.UsedRange.Rows.Count ' finder antal rækker som er brugt i arket For I = rw To 2 Step -1 ' jeg går ud fra at der er overskrifter i række 1, derfor startes i række 2 Tom = True For col = 11 To 22 If Cells(I, col) <> 0 Then Tom = False Exit For End If Next If Tom Then Cells(I, "D").EntireRow.Delete ' hvis summen er 0, slættes rækken Next Application.ScreenUpdating = True End Sub
FANTASTISK - det er helt perfekt, tusinde tak. Og igen tak for forklaringerne på hver linie, det gør en stor forskel for mig i forhold til at kunne lave smårettelser i koden efterfølgende.
Synes godt om
Ny brugerNybegynder
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.