Avatar billede Butterfly Ekspert
29. december 2018 - 18:09 Der er 7 kommentarer og
1 løsning

Slet række hvis 0, ellers ingenting

Hej
Jeg har denne makro der sletter en række, hvis værdien i kolonne E er mindre end 0, men hvad skal der stå, hvis der ikke er nogle tal mindre end 0. Så skal den bare gøre ingenting. Lige nu går den i stå ved "Do While ...."
Public Sub SletRaekker()
i = 1
Do While Worksheets("ark1").Range("E" & i).Value <> ""
If Range("E" & i).Value < 0 Then
Rows(i & ":" & i).Delete shift:=xlUp
i = i - 1
End If
i = i + 1
Loop
End Sub
Avatar billede Jan Hansen Ekspert
29. december 2018 - 20:57 #1
Mit bud


Option Explicit

Dim ws As Worksheet
Dim rColumn As Range
Dim vArray As Variant, newArray As Variant
Dim i As Integer, iCount As Integer

Public Sub SletRaekker()
    Set ws = Sheets("Ark1") ' giver ws arknavnet
    Set rColumn = ws.Range("E1")
    Set rColumn = Range(rColumn, ws.Range("E10000").End(xlUp)) ' tildeler rColumn E1 ned til sidste E-celle med indhold (max række 10.000)
    vArray = rColumn.Value ' overfører rColumn til en hukommelses tabel
    'Finder ud af hvormange rækker der indeholder negative tal
    For iCount = 1 To UBound(vArray)
        If vArray(iCount, 1) < 0 Then i = i + 1
    Next
    If i = 0 Then Exit Sub ' slutter makroen hvis der ingen negavive tal er
    ' sætter størelsen på newArray til 1 til antallet af negative tal
    ReDim newArray(1 To i)
    i = 1
    'tildeler rækkenumre til newArray
    For iCount = UBound(vArray) To 1 Step -1
        If vArray(iCount, 1) < 0 Then
            newArray(i) = iCount
            i = i + 1
        End If
    Next
    i = i - 1
    ' bruger de rækkenumre som står i newArray til at slette dem
    For iCount = 1 To i
        Rows(newArray(iCount) & ":" & newArray(iCount)).Delete shift:=xlUp
    Next
End Sub



Jan
Avatar billede Jan Hansen Ekspert
29. december 2018 - 21:09 #2
den mere simple:


Option Explicit
Dim i As Integer
Public Sub SletRaekker()
    i = Worksheets("ark1").Range("E10000").End(xlUp).Row ' sætter i= sidste række
    Do
        If Range("E" & i).Value < 0 Then
            Rows(i & ":" & i).Delete shift:=xlUp
        End If
        i = i - 1
    Loop Until i = 1 'gennem traver rækkerne til den når række et
End Sub


Jan
Avatar billede Jan Hansen Ekspert
29. december 2018 - 21:14 #3
1. er hurtigst ved mange rækker, da det meste foregår i hukommelsen
2. er den mest overskuelige og ved få rækker betyder det intet for hastigheden

Jan
Avatar billede store-morten Ekspert
30. december 2018 - 00:59 #4
den endnu mere simple:
Sub DeleteNegative()
LastRk = Range("E65536").End(xlUp).Row
    For Rk = LastRk To 2 Step -1
    If Range("E" & Rk) < 0 Then Rows(Rk).Delete
    Next Rk
End Sub
Avatar billede Dan Elgaard Ekspert
30. december 2018 - 07:57 #5
Dim Counter As Long
For Counter = Range("E" & Rows.Count).End(xlUp).Row To 1 Step -1
      If Range("E" & Counter).Value < 0 Then Rows(Counter).Delete
Next
Avatar billede store-morten Ekspert
30. december 2018 - 10:39 #6
Sub SletRk()
    For Rk = Range("E65536").End(xlUp).Row To 2 Step -1
    If Range("E" & Rk) < 0 Then Rows(Rk).Delete
    Next
End Sub
Avatar billede Dan Elgaard Ekspert
30. december 2018 - 11:12 #7
@Store-Morten: Er det ikke fuldstændig den samme, som jeg har givet???

...bortset fra, at min er mere robust - hvad nu, hvis OP's tabel er på mere end 65536 rækker?  Det tager min højde for.
Avatar billede Butterfly Ekspert
30. december 2018 - 13:05 #8
tusind tak for hurtige svar, det er lige hvad jeg ønsker mig.
I ønskes alle et rigtig godt og lykkebringende nytår.
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