Ik heb VBA-code tijdje geleden gemaakt waarmee ik CSV-bestanden tezamen zal aanmaken indien in kolom D "Yes" staat. Indien er "No" staat zal het een aparte CSV aanmaken. Dit is echter niet meer wat ik nodig heb.
In plaats van kolom D te gebruiken met de inhoud Yes/No zou ik willen dat het naar de bestandsnaam kijkt in kolom A (wat betekend dat ik kolom D verwijder). Als de bestandsnaam identiek is (in kolom A) wil ik dat het voor al die regels met identieke naam een elke keer een CSV-bestand apart aanmaakt. Excuus als ik niet duidelijk genoeg ben maar hier is een voorbeeld van wat ik bedoel:
Sheet heeft in kolom A de volgende gegevens
A3 = Test001
A4 = Test001
A5 = Test002
A6 = Test002
A7 = Test003
A8 = Test002
1. Het zou moeten resulteren in verschillende CSV-bestanden waarbij alles onder elkaar met standaard 1x de "header" uit veld C2 en alle regels van kolom C zitten waarbij in kolom A identieke waardes (vanaf regel 3) zijn opgevoerd. Kortom in relatie tot voorbeeld bovenaan zou dit in het volgende dienen te resulteren
CSV 1 bevat uiteindelijk (bestandsnaam A3 - opgeslagen pad B3)
C2 (dit is header dus)
C3
C4
CSV 2 bevat (bestandsnaam A5 - opgeslagen pad B5)
C2 (dit is header dus)
C5
C6
C8
CSV 3 bevat (bestandsnaam A7 - opgeslagen pad B7)
C2 (dit is header dus)
C7
2. Zoals in voorbeeld aangegeven dient dus hierbij de CSV-bestand het bestandsnaam te hebben van betreffende reeks met identieke naam. Hierbij kan de eerste regel waarin de identieke waarde ontdekt wordt gebruikt worden.
3. Ook zoals in voorbeeld aangegeven dient het CSV-bestand opgeslagen zijn in het pad dat aangegeven is in kolom B van betreffende reeks met identieke naam. Hierbij kan de eerste regel waarin de identieke waarde ontdekt wordt gebruikt worden.
Simpelweg dient het dus hetzelfde te werken als onderstaande code maar dan dient het niet meer naar Yes/No te kijken maar naar de identieke waarden in kolom A vanaf regel 3. Wellicht dat een voorbeeldbestand meer duidelijkheid bied ook.
In bijlage nieuw voorbeeldbestand geplaatst
In plaats van kolom D te gebruiken met de inhoud Yes/No zou ik willen dat het naar de bestandsnaam kijkt in kolom A (wat betekend dat ik kolom D verwijder). Als de bestandsnaam identiek is (in kolom A) wil ik dat het voor al die regels met identieke naam een elke keer een CSV-bestand apart aanmaakt. Excuus als ik niet duidelijk genoeg ben maar hier is een voorbeeld van wat ik bedoel:
Sheet heeft in kolom A de volgende gegevens
A3 = Test001
A4 = Test001
A5 = Test002
A6 = Test002
A7 = Test003
A8 = Test002
1. Het zou moeten resulteren in verschillende CSV-bestanden waarbij alles onder elkaar met standaard 1x de "header" uit veld C2 en alle regels van kolom C zitten waarbij in kolom A identieke waardes (vanaf regel 3) zijn opgevoerd. Kortom in relatie tot voorbeeld bovenaan zou dit in het volgende dienen te resulteren
CSV 1 bevat uiteindelijk (bestandsnaam A3 - opgeslagen pad B3)
C2 (dit is header dus)
C3
C4
CSV 2 bevat (bestandsnaam A5 - opgeslagen pad B5)
C2 (dit is header dus)
C5
C6
C8
CSV 3 bevat (bestandsnaam A7 - opgeslagen pad B7)
C2 (dit is header dus)
C7
2. Zoals in voorbeeld aangegeven dient dus hierbij de CSV-bestand het bestandsnaam te hebben van betreffende reeks met identieke naam. Hierbij kan de eerste regel waarin de identieke waarde ontdekt wordt gebruikt worden.
3. Ook zoals in voorbeeld aangegeven dient het CSV-bestand opgeslagen zijn in het pad dat aangegeven is in kolom B van betreffende reeks met identieke naam. Hierbij kan de eerste regel waarin de identieke waarde ontdekt wordt gebruikt worden.
Simpelweg dient het dus hetzelfde te werken als onderstaande code maar dan dient het niet meer naar Yes/No te kijken maar naar de identieke waarden in kolom A vanaf regel 3. Wellicht dat een voorbeeldbestand meer duidelijkheid bied ook.
In bijlage nieuw voorbeeldbestand geplaatst
Code:
Sub GenerateCSV()
Max = Application.WorksheetFunction.CountA(Range("D:D")) + 1
i = 3
While i <= Max
'Find the first instance of a "Yes"
If Cells(i, 3).Value = "Yes" Then
'Set the title value
t = Range("D2")
'Loop through the remainder of the rows to find all "Yes" rows and build a single file
For j = i To Max
If Cells(j, 3).Value = "Yes" Then
t = t & vbNewLine & Cells(j, 4).Value
End If
Next j
'Create the file for "Yes" values
p = Cells(i, 2)
f = Cells(i, 2).Value & "\" & Cells(i, 1).Value & " TypeA" & ".csv"
X = Dir(p, vbDirectory)
If X = "" Then MkDir p
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile(f, True)
a.Write (t)
a.Close
'Exit the loop because the "Yes" file has been created
i = Max
End If
i = i + 1
Wend
'Create the "No" files
For i = 3 To Max
If Cells(i, 3).Value = "No" Then
t = Range("D2") & vbNewLine & Cells(i, 4).Value
p = Cells(i, 2)
f = Cells(i, 2).Value & "\" & Cells(i, 1).Value & " TypeA" & ".csv"
X = Dir(p, vbDirectory)
If X = "" Then MkDir p
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile(f, True)
a.Write (t)
a.Close
End If
Next i End Sub
Bijlagen
Laatst bewerkt: