Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[VBA] Verwijder kolommen uit csv

Pagina: 1
Acties:

  • Soepstengel
  • Registratie: April 2006
  • Laatst online: 28-11 10:44
Wij zijn op zoek naar een manier om kolommen te verwijderen uit een csv bestand. We hebben het hele internet al afgezocht naar mogelijkheden maar we komen er maar niet uit. We zijn totaal niet bekend met VBA of andere scripting mogelijkheden als perl of een andere taal. Wat we nu hebben gedaan is een macro maken die simpel weg kolom 1, 2, 3, 6, 7, 8 en 9 verwijderd, daarvoor zit nog een CSV import code. Echter willen we deze macro over 500+ bestanden uitvoeren zonder dat een gebruiker daar naar hoeft te kijken, deze bestanden hebben natuurlijk allemaal een andere naam dus moet het import bestand variabel worden. Ik zit te denken aan iets van een for lus met een variabel van alle .csv bestanden in een map, maar omdat ik absoluut geen kennis heb van VBA heb ik geen idee hoe ik dit zou moeten realiseren. Het is trouwens geen probleem als het bestand daarna weer als excel sheet wordt opgeslagen. Kan iemand mij in de goede richting helpen?

whoops, misschien handig als ik de code erbij zet die ik nu heb 8)7
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Sub DeleteColum()
'
' DeleteColum Macro
'

'
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;F:\EDDRXP727.csv", _
        Destination:=Range("$A$1"))
        .Name = "EDDRXP727"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 437
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
    Columns("A:C").Select
    Range("C1").Activate
    Selection.Delete Shift:=xlToLeft
    Columns("C:F").Select
    Selection.Delete Shift:=xlToLeft
End Sub

[ Voor 41% gewijzigd door Soepstengel op 17-09-2008 12:30 ]

Desktop: Ryzen 7 7800X3D | 32 GB | Radeon RX 6800


  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

Kun je dit niet gewoon in een sed macro doen?
Of iets met het linux programmatje 'cut' ?
cut -f5 -d " " zal bijv het stukje na de 5e spatie weergeven (of juist verwijderen :P).

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
"Een for loop" is wel heel erg vaag, denk je niet? Begin eens met een VBA tutorial en neem er een VBA reference bij? Er zijn zat manieren om alle bestanden uit een directory te lezen; daar heb je geen 'for loop' voor nodig (maar het kan wel).

Hoewel dit behoorlijk neigt naar een scriptrequest laat ik 't nog even open, maar dan verwachten we wel van jou het een en ander aan eigen inzet en code en input te zien.

Edit: ah, de code staat er nu bij. Wat let je om dit in een functie te gieten en vervolgens door alle bestanden heen te itereren en die functie aan te roepen waarbij je de filename door geeft aan de functie?

Waar hoort mijn topic?
PRG >> OFF

[ Voor 34% gewijzigd door RobIII op 17-09-2008 12:32 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Soepstengel
  • Registratie: April 2006
  • Laatst online: 28-11 10:44
RobIII schreef op woensdag 17 september 2008 @ 12:30:
Edit: ah, de code staat er nu bij. Wat let je om dit in een functie te gieten en vervolgens door alle bestanden heen te itereren en die functie aan te roepen waarbij je de filename door geeft aan de functie?
Ja ik zag zelf al dat ik wat vergeten was ;) Maar dit script heeft excel gewoon gemaakt door middel van de record functie die excel levert. Het probleem is dus nog steeds dat ik geen idee heb hoe ik met VBA om moet gaan, maar om nou heel VBA te gaan leren om 1 scriptje te maken vindt ik ook erg overdreven en daar heb ik (helaas) geen tijd voor. Ik ga eens zoeken op een tutorial voor functies denk ik, tenzie je natuurlijk nog een hint kan geven ;)

Desktop: Ryzen 7 7800X3D | 32 GB | Radeon RX 6800


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

zonder dat een gebruiker daar naar hoeft te kijken
Dan wil je het niet gaan doen zonder eerst te willen leren hoe VBA werkt. Laat het als je VBA wilt gebruiken dan (betaald of tenminste buiten het forum om) door een ander doen. Het gaat gegarandeerd fout als je het met wat macro-opnemen-probeersels probeert te doen zonder te snappen hoe en wat er gebeurt.
Als wel VBA: inderdaad opschonen en in een functie zetten, dan die functie per bestand(snaam) aanroepen.

Overigens gaf Krypt in "[BATCH] Input en outputfile gelijk" een andere manier: delim/tokens gebruiken (namelijk door te 'knippen' na de komma als je die gebruikt in je csv).
De laatste alinea van Soepstengel in "Vele CSV bestanden editen" was trouwens nog mooier, meteen bij de bron goed doen ;)

[ Voor 7% gewijzigd door F_J_K op 17-09-2008 12:57 ]

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)