Regel met celwaarde 0 verwijderen maar lege regels laten staan

Status
Niet open voor verdere reacties.

globe

Verenigingslid
Lid geworden
18 mrt 2001
Berichten
3.584
Ik gebruik al jaren een VB script om regels met een 0 te verwijderen.

Nu heb ik een andere lijst waar lege regels tussen staan. Als ik onderstaand script gebruik worden ook de lege regels verwijderd.

Wij kan me helpen onderstaand script aan te passen:

Code:
Sub Delete_row()
     
    Dim LastRow As Long, n As Long
     
    Last_Row = Range("D65536").End(xlUp).Row
    For n = LastRow To 11 Step -1
        If Cells(n, 2).Value = 0 Then Cells(n, 2).EntireRow.Delete
    Next n
     
End Sub

een andere oplossing zou kunnen zijn 2 voorwaarden aan het script te stellen.

De ene kolom moet wél een waarde bevatten, de andere kolom moet waarde 0 hebben, dan ben ik ook geholpen.
 
Laatst bewerkt:
Waarom gebruik je geen autofilter ?
 
Waar begint de data, gebruik je kolomkoppen, staat er niets in rij 9 als je kolomkoppen gebruikt in rij 10? Ofwel waarom niet even een voorbeeldbestandje?
 
Dank voor de reacties, autofilter is geen optie. Stukje code moet toegepast worden op dagelijks 24 excel bestanden.
Met autofilter gaat er te veel tijd inzitten en nulwaardes moeten echt uit de lijst.

bijgaand een voorbeeldje.

De regels met gele cellen moeten weg, de lege regels tussen de artikelen moeten behouden blijven,
 

Bijlagen

  • voorbeeld.xlsx
    8,8 KB · Weergaven: 44
Dank voor de reacties, autofilter is geen optie. Stukje code moet toegepast worden op dagelijks 24 excel bestanden.
Met autofilter gaat er te veel tijd inzitten en nulwaardes moeten echt uit de lijst.

Je weet echt niet waar je het over hebt.
 
Je weet echt niet waar je het over hebt.

Excuses SNB, nu valt het kwartje pas na de post van VenA.
Je bedoelde een autofilter icm VBA. Ik dacht te begrijpen een filter in excel te plaatsen wat veel te omslachtig is.
Dat was de manier hoe we het vroeger deden maar kost een half uur per dag.

uiteindelijk toch bedankt voor het meedenken:thumb:
 
Laatst bewerkt:
Het gaat om een stukje VBA waar je het autofilter zijn werk laat doen. Niet om handmatig filteren! Lijkt mij snel genoeg.
 
Ik begrijp nu waarom je 4 uur per dag 'in Excel files zit'.
 
de oplossing:

Code:
Sub legeregelsverwijderen()

Dim i As Long

For i = Cells(Rows.Count, "a").End(xlUp).Row To 2 Step -1

If Cells(i, "a") <> 0 And Cells(i, "d") = 0 Then Rows(i).Delete

Next i

End Sub
 
Laatst bewerkt:
Zo houd je wat meer tijd over voor andere dingen dan excel.

Code:
Sub VenA()
Dim r As Range, j As Long
  For Each cl In Columns(4).SpecialCells(2, 1)
    If cl = 0 Then
      If r Is Nothing Then Set r = cl Else Set r = Union(r, cl)
    End If
  Next cl
  If Not r Is Nothing Then r.EntireRow.Delete
End Sub

of
Code:
Sub VenA()
  With Range("A1:J" & Cells(Rows.Count, 1).End(xlUp).Row)
    .AutoFilter 4, 0
    .Offset(1).EntireRow.Delete
    .AutoFilter
  End With
End Sub
 
Mijn versie was:

Code:
Sub M_snb()
   with sheet1.usedrange.columns(4)
     .autofilter 1,0
     .offset(1).entirerow.delete
     .autofilter
  end with
End sub

Nu moeten we alleen nog even die 24 bestanden (het zijn toch geen csv-bestanden ?) geautomatiseerd naar voren toveren.

Waar moet VBA deze bestanden vinden en hoe heten ze ?
 
De autofilteroptie, de tweede code van VenA, is dus niet kansloos!
 
Waanzinnig bedankt tot zover.

Ik heb mijn voorbeeld file geupdate. In mijn file staan nu 4 macro's.

1 om de nulwaardes te verwijderen
3 om een specifieke prijslijst te maken door het verwijderen van kolommen

Zo werkt het prima maar moet ik voor iedere prijslijst file die ik heb telkens 4x een macro draaien. En het resultaat handmatig opslaan

Code:
Sub EuroPrijslijst()
    Range("j:s").EntireColumn.Delete
End Sub

Sub GBPPrijslijst()
    Range("e:i,o:s").EntireColumn.Delete
End Sub

Sub USDPrijslijst()
    Range("e:n").EntireColumn.Delete
End Sub

Sub Verwijderen_nulwaardes()
  With Range("A1:J" & Cells(Rows.Count, 1).End(xlUp).Row)
    .AutoFilter 4, 0
    .Offset(1).EntireRow.Delete
    .AutoFilter
  End With
End Sub

Het eindresultaat zou eigenlijk moeten worden dat ik met 1 macro draaien 3 files krijg. Opgeschoond en met de prijslijst specifieke waarden erin.
Er zou dus een opslaan commando in moeten komen.

onderstaand gebruik ik nu:

Code:
Sub EuroPrijslijst()
    Range("j:s").EntireColumn.Delete
    

Worksheets(Array("blad1")).Copy
ActiveWorkbook.SaveAs Filename:="Prijslijst_Euro.xlsx"

End Sub

de bestandsnamen zouden uiteindelijk moeten worden:
Prijslijst_USD_26_6_2018.xls

Prijslijst_EURO_26_6_2018.xls

Prijslijst_GBP_26_6_2018.xls

De datum moet dus in de bestandnaam komen

Dan nog een dingetje, voordat de prijslijst wordt opgeslagen moet de gehele sheet als harde waarden gekopieerd worden. Dat doe ik nu handmatig voordat ik de macro's draai.

Het originele bestand moet ongewijzigd blijven.

snappen jullie het nog?
 

Bijlagen

  • voorbeeld_update_incl_savefunctie.xlsm
    16,1 KB · Weergaven: 26
Laatst bewerkt:
Code:
Sub EuroPrijslijst()
    Range("j:s").EntireColumn.Delete

Worksheets(Array("blad1")).Copy
ActiveWorkbook.SaveAs Filename:="Prijslijst_Euro.xlsx"

End Sub

Sub GBPPrijslijst()
    Range("e:i,o:s").EntireColumn.Delete
    
    Worksheets(Array("blad1")).Copy
ActiveWorkbook.SaveAs Filename:="Prijslijst_GBP.xlsx"
End Sub

Sub USDPrijslijst()
    Range("e:n").EntireColumn.Delete
    
    Worksheets(Array("blad1")).Copy
ActiveWorkbook.SaveAs Filename:="Prijslijst_USD.xlsx"
End Sub

Sub Verwijderen_nulwaardes()
  With Range("A1:J" & Cells(Rows.Count, 1).End(xlUp).Row)
    .AutoFilter 4, 0
    .Offset(1).EntireRow.Delete
    .AutoFilter
  End With
End Sub

deze code heb ik uiteindelijk weten te bakken, maar dan moet ik telkens het origenel bestand heropenen omdat er kolommen worden verwijderd bij het draaien van een specifieke prijslijst.
 
Verhelderend allemaal voor iemand die het/de bestand/en voor zijn neus heeft. Jammer dat je geen goed voorbeeld plaatst en is het niet na te gaan wat je allemaal aan het doen bent.

@snb, Pm gezien. Bij veel data is het geavanceerde filter in combinatie met een formule nog veel sneller.:d
 
Het voorbeeld staat er nu inderdaad boven. Waarom is het voorbeeld in #17 dan weer anders qua code. Wees duidelijk naar welk bestand gekeken moet worden. Wat het resultaat moet worden en waar het opgeslagen moet worden mogen de helpers zelf verzinnen?
 
Bedankt voor je geduld, ik ben nou eenmaal een enorme prutser ;) maar dat was al wel duidelijk.

ik zie het, ik was ondertussen weer een stap verder met een datum in de bestandsnaam te krijgen.
In principe moet het bestand op dezelfde locatie worden opgeslagen als het origineel.

De resultaten moeten worden:

3 bestanden met de juiste valuta én de datum in het bestand.

Dit resultaat krijg je nu wanneer je de 3 macro's draait van de originele file.

Probleem waar ik tegenaan loop:

Na het opslaan moet ik het origineel heropenen omdat er kolommen verwijderd zijn, oplossing kan zijn om de diverse prijslijsten in verschillende tabs op te slaan en deze te laten opslaan.
Dat zou volgens mij eenvoudig met een COPY commando kunnen? Jullie zijn de experts, ik de beunhaas.

als bijlage een GBP prijslijst mét datum in de bestandsnaam.

het uiteindelijke resultaat moeten dus 3 prijslijsten worden én het originele bestand moet intact blijven. Althans Blad1, de overige bladen maakt niet uit.
 

Bijlagen

  • Prijslijst_GBP 26-jun-2018.xlsx
    9,9 KB · Weergaven: 28
Ik kan jouw bijlagen totaal niet volgen.

Maak een bijlage zoals in #14 en zet in minimaal 1 tabje de verwachte uitkomst? Waar zijn de lege rijen en kolommen voor nodig? En is dit de werkelijkheid zoals het uit een systeem komt?
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan