• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Lege rijen verwijderen en/of rijen met tekst X...

Status
Niet open voor verdere reacties.

Georgyboy

Terugkerende gebruiker
Lid geworden
6 jan 2007
Berichten
1.020
Besturingssysteem
Windows 11
Office versie
365
Goedemorgen,

Heb een csv file met veel gegevens (iedere minuut een meting x 60 x 24 uur x 365 dagen) dus een groot bestand.
Iedere dag hebben we een csv rapport die we kunnen downladen en opslaan in een map.
Ben er in geslaagd om alle csv bestanden in 1 file samen te voegen via "Opdracht prompt".

In het voorbeeld is er een klein voorbeeld van die file, zie tabblad "Tekst", de andere 2 tabbladen zijn kopieën van "Tekst" om de VBA code te testen.

Bedoeling is om:
1) Lege rijen te verwijderen
2) De rijen waar "Datum / Uhrzeit Error Automatic Recipe No Act. temperature Stp. temperature Fan speed Dwell time" in voor komt te verwijderen, behalve rij 1 (koptekst)

De 2 codes werken na selectie kolom 1, maar denk dat dit veel beter en sneller kan?

Leer tips en/of voorbeeld van een kortere / snellere code zijn welkom :)

Alvast bedankt!

Groeten,
Georgyboy
 

Bijlagen

Dankjewel Emields,

Werkt supersnel en wat ik wou :)
Leer altijd van je :):):)
 
Nog eentje zonder loop

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
If Not Intersect(Target, [a:a]) Is Nothing And Target.Count = 1 Then
  With Range("A3", Range("A" & Rows.Count).End(xlUp))
    .Value = Evaluate("if((" & .Address & " = ""Datum / Uhrzeit"")+(" & .Address & " = """"),""#N/A""," & .Address & ")")
     On Error Resume Next
    .SpecialCells(2, xlErrors).EntireRow.Delete
  End With
 End If
End Sub
 
Code:
Sub M_snb()
  With Blad6.UsedRange
    .Offset(1).Columns(1).Replace "Datum / Uhrzeit", ""
    .Columns(1).SpecialCells(4).EntireRow.Delete
  End With
End Sub
of
Code:
Sub M_snb()
  With Blad5.UsedRange
    .Offset(1).Columns(1).Replace "Datum / Uhrzeit", ""
    .Sort .Cells(1), , , , , , , 1
  End With

  with Blad5.Cells(1).CurrentRegion
     .Offset(.Rows.Count).Resize(Blad5.UsedRange.Rows.Count).Clear
  end with
End Sub

NB. Het is goed je te realiseren dat je in een werkblad strikt genomen geen rijen kunt verwijderen. Het aantal rows.count blijft immer 2^20
 
Dankjewel Emields, JVeer, snb voor de vele mogelijke oplossingen :thumb:


Code:
NB. Het is goed je te realiseren dat je in een werkblad strikt genomen geen rijen kunt verwijderen. Het aantal rows.count blijft immer 2^20

@ snb als ik het goed begriip is rows.count voor max 1.048.576 Rijen

Dus voor 1 jaar zou het kunnen lukken ?
Tijd Rijen
1 uur 60
24 uur 2.040
365 dagen 744.600

Titels 365
Lege rij per dag 365
Totaal rijen 1 jaar 745.330

Ter info waar het om gaat:

Dagelijks is er een rapport in csv die men kan downloaden, zijn de 1 titel 1 lege rij en 1440 rijen (60 min * 24 uur) = 1442 rijen per dag

Van:
Datum / Uhrzeit Error Automatic Recipe No Act. temperature Stp. temperature Fan speed Dwell time

01.01.2021 00:00:36 1 0 23 16,7 0 0 0 0 0 0
01.01.2021 00:01:36 1 0 23 16,65 0 0 0 0 0 0
01.01.2021 00:02:36 1 0 23 16,6 0 0 0 0 0 0
01.01.2021 00:03:36 1 0 23 16,6 0 0 0 0 0 0

Tot:
01.01.2021 23:55:37 1 0 23 10,7 0 0 0 0 0 0
01.01.2021 23:56:37 1 0 23 10,7 0 0 0 0 0 0
01.01.2021 23:57:37 1 0 23 10,7 0 0 0 0 0 0
01.01.2021 23:58:37 1 0 23 10,7 0 0 0 0 0 0
01.01.2021 23:59:37 1 0 23 10,7 0 0 0 0 0 0

Nu heb ik test gedaan op enkele csv bestanden om dit in 1 csv file te importeren, via "Opdrachtprompt"

C:\Users\G….>cd C:\Users\G……..\Documents\M….\Bestand\Data

C:\Users\G………\Documents\M…….\Al……….\Alco_Data>copy *.csv Master11.csv
Alco_DataLog_1_1_2021.csv
Alco_DataLog_1_1_2022.csv
Alco_DataLog_1_2_2021.csv
Alco_DataLog_1_3_2021.csv
Alco_DataLog_1_4_2021.csv
Alco_DataLog_1_5_2021.csv
Alco_DataLog_1_6_2021.csv
Master.csv
Test.csv
test2.csv
1 file(s) copied. (Dit is Master11.csv file)

Ben heel blij met jullie leerrijke oplossingen en tips

Groeten,
Georgyboy
 
Je kunt alle csv-bestanden met VBA integreren:

Code:
Sub M_snb()
   shell "copy G:\OF\*.csv G:\totaal.csv"
End Sub

Je kunt alle lege en overbodige rijen uit het totaalbestand verwijderen en vervolgens inlezen in een nieuw werkblad met:

Code:
Sub M_snb()
   with createobject("scripting.filesystemobject")
     .createtextfile("G:\totaal.csv").write join(filter(split(.opentextfile("G:\totaal.csv").readall,vbcrlf),"."),vbcrlf)
   end with

   sheets.add , sheets(sheets.count),,"G:\totaal.csv"
End sub

Daarna hoef je alleen de koppen in rij 1 toe te voegen.
 
o dat is nog beter als dit kan,

Probeer dit deze week uit, denk in je code de juiste locatie invoegen waar de bestanden staan en het zou moeten lukken, kijk er naar uit :)
 
@ snb Ondanks je top voorbeeld (mijn excuses) was het me niet gelukt om het pad in te geven in:

Code:
Sub M_snb()
   shell "copy G:\OF\*.csv G:\totaal.csv"
End Sub

PAD : \\m....-fp01\userdesk$\geo\Desktop\Ga.....\Rapporten

Moet deze zo ?
Code:
shell "copy \\m....-fp01\userdesk$\geo\Desktop\Ga.....\Rapporten\*.csv \\m....-fp01\userdesk$\geo\Desktop\Ga.....\Rapporten\totaal.csv"


Of
Pad: C:\Test

Of ander Pad :
Code:
shell "copy C:\Test\*.csv C:\totaal.csv"

Groeten,
Georgyboy
 
Je zult het pad volledig moeten uitschrijven (wat je ook na de opdrachtprompt doet). Met puntjes kan de shell niets.

Je laatste voorbeeldcode is zoals het hoort.
Hou het simpel.
 
Dankjewel,

die puntjes zijn omwille van beschermde info, dus delen van het pad vervangen door .....
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan