• 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.

Excel file splitsen met Macro

Status
Niet open voor verdere reacties.

Julesw

Gebruiker
Lid geworden
18 feb 2019
Berichten
9
Goedemiddag forummers,

Ik werk sinds kort weer wat meer met Excel en heb een leuk opdrachtje gekregen:
het splitsen van een excel file op basis van debiteurnummers.
Het liefste wil ik het bestand van een kleine 5000 rijen met een +/- 30 tal debiteurnummer splitsen naar aparte excelbestanden met als naam het debiteurnummer (kolom E) en daarachter de klantnaam (kolom F), zodat we deze naar onze klant kunnen sturen.

Ik heb al geprobeerd een macro op te nemen en wat zoekwerk gedaan via Google maar ik kom er nog niet helemaal uit.

Hopelijk is er hier iemand die me op weg kan helpen.

Groet,
Jules
 
Hallo Jules,

Welkom op dit forum. Het helpt enorm als je een voorbeeldbestandje plaatst, met Jip en Janneke informatie, maar waar wel duidelijk uit wordt wat je wilt.
 
Jules,

zoals Jan al aangeeft, een bestand is wel gewenst. gokken kunnen we in het casino :)
 
we zitten in het casino, hopelijk zijn er nu geen illegale tekens binnen de debiteurennaam:cool:
Code:
Sub Opsplitsen()

    With ActiveSheet
        .Range("z1").Resize(, 4).EntireColumn.ClearContents          'bereik rond uitvoer leegmaken
        .Range("A1").CurrentRegion.Columns("E:F").AdvancedFilter xlFilterCopy, , .Range("AA1"), True    'uitgebreid filter op debiteurennummer en naam
        sn = .Range("AA1").CurrentRegion                             'lees unieke debiteurennummers en namen

        With .Range("A1").CurrentRegion                              'je 5.000 gegevens
            For i = 2 To UBound(sn)                                  'alle debiteuren aflopen
                .AutoFilter                                          'filter resetten
                .AutoFilter 5, sn(i, 1)                              'filteren op een debiteur
                .Copy                                                'kopieer gefilterde gegevens
                Set wb = Workbooks.Add                               'nieuwe workbook
                wb.Sheets(1).Paste                                   'plakken
                wb.SaveAs Filename:=ThisWorkbook.Path & "\" & sn(i, 1) & "-" & sn(i, 2) & ".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False    'opslaan als
                wb.Close                                             'sluiten
            Next
            .AutoFilter
        End With
    End With
End Sub
 
2 keer het geavanceerde filter kan ook. Bij gebrek aan een voorbeeldbestand alles maar een beetje algemeen gehouden. En obv een eigen testbestandje.
Code:
Sub VenA()
  With Sheets(1)
    .Cells(1).CurrentRegion.Resize(, 1).AdvancedFilter xlFilterCopy, ,.Range("Z1"), Unique:=True
    ar = .Range("Z1").CurrentRegion
    .Range("Z1").CurrentRegion.Offset(1).Clear
    For j = 2 To UBound(ar)
      .Range("Z2") = ar(j, 1)
      .Cells(1).CurrentRegion.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=.Range("Z1:Z2"), CopyToRange:=Workbooks.Add.Sheets(1).Cells(1)
      ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & ar(j, 1) & ".xlsx"
      ActiveWorkbook.Close 0
    Next j
  End With
End Sub
 
Laatst bewerkt:
Dank voor het welkom en de snelle reacties al! Ik ga even stoeien, mocht ik er niet uit komen dan zal ik een voorbeeldje maken.
 
Volgens mij was mijn uitleg toch niet zo duidelijk :eek:
Ik kom er in elk geval niet helemaal uit zo.
Ik heb een voorbeeldje gemaakt. De bedoeling is dus dat ik per debtor_number een excel file heb met als naam: debtor_number business_partner_name
Elke debtor name heeft 10-tallen stores met verschillende artikelen.

Ben benieuwd of het zo duidelijker is, anders hoor ik het graag.
 

Bijlagen

  • voorbeeld.xlsx
    9,6 KB · Weergaven: 88
Wat gaat er niet goed dan? Heb je beide codes geprobeerd? Is in het bestand niets van terug te vinden.
Code:
Sub VenA()
  With Sheets(1)
    .Cells(1).CurrentRegion[COLOR="#FF0000"].Columns("E:F")[/COLOR].AdvancedFilter xlFilterCopy, , .Range("Z1"), Unique:=True
    ar = .Range("Z1").CurrentRegion
    .Range("Z1").CurrentRegion.Offset(1).Clear
    For j = 2 To UBound(ar)
      .Range("Z2") = ar(j, 1)
      .Cells(1).CurrentRegion.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=.Range("Z1:Z2"), CopyToRange:=Workbooks.Add.Sheets(1).Cells(1)
      ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & ar(j, 1) [COLOR="#FF0000"]& " " & ar(j, 2) [/COLOR]& ".xlsx"
      ActiveWorkbook.Close 0
    Next j
  End With
End Sub
 
je moet de file moet al een keer opslaan zijn, zodat "thisworkbook.path", dus de subdirectory, waar je straks die nieuwe excelfiles zal opslaan , gekend is.
Vermoedelijk is dat je probleem.
 
Hij was al wel een keer opgeslagen. Bovenstaande macro van VenA deed wel wat; enkel zijn niet alle debiteurnummers en ook niet alle rijen per debiteurnummer opgeslagen als file. Zal hem vanmiddag nog eens proberen.
 
Hij loopt weer vast op hetzelfde debiteurnummer, "Run-time error 1004: Application defined or object-defined error
 
Wat is het nummer en de naam van de debiteur. Niet alle tekens mogen in een bestandsnaam staan.
 
dat had ik in #4 al eens gezegd :)
 
Dan zal het iets anders moeten zijn. Rien pas plus, het geld is niet meer van u:d
 
Aha, sommige tekens mogen er niet in dus! Er zat een / in één van de debiteurnamen. Ik kan weer wat verder nu :)

Veel dank mensen! Ik zal mij waarschijnlijk wel weer melden in de toekomst.

Hebben jullie trouwens tips over het leren de taal die jullie zo goed lijken te beheersen? ;) Ik ben echt een leek maar vind het wel super om te zien wat je hier allemaal mee kunt.
 
De taal heet VBA. Als je deze 3 letters in Google invoert dan kan je alle kanten op om het te leren. De hier geplaatste codes zal je niet in de eerste hoofdstukken tegenkomen.;)
 
Ik zal eens wat gaan Googelen :) Heb mijzelf vandaag al grofweg 1,5 uur bespaard voor een maandelijks terugkerend fenomeen dus erg blij mee!

Ik heb nog een dingetje waar ik dom mee aan het klikken ben, ik ben benieuwd of jullie hier ook iets op weten.

Voor de duidelijkheid heb ik maar meteen een voorbeeld toegevoegd. Wat ik met bovenstaand bestand wil:
Stap 1: 'customer_organization_name' (waardes kolom A: Hem en Arcade) alle rijen verwijderen uit het bestand indien deze toegevoegd zijn na: 2018-02-01 (dus 02-01, 1 februari mag blijven staan, amerikaanse datum notering) Kolom K; tijd maakt niet uit). Dit aangezien deze klanten het eerste jaar niet gefactureerd worden.

Stap 2: van het gehele bestand alles jonger dan een maand verwijderen. In dit geval dus alles na 2019-02-01 (tijd maakt niet uit).

Ik ben benieuwd of dit ook mogelijk is.

Alvast dank voor jullie input :)
 

Bijlagen

  • Voorbeeld2.xlsx
    9 KB · Weergaven: 52
Voor nieuwe vragen kan je beter een nieuw draadje aanmaken anders wordt het een beetje een onleesbaar verhaal.

Ik zie geen 02-01 van welk jaar dan ook in het bestand. Volgens mij klopt de beschrijving ook niet; als alles na een startdatum + een bepaalde termijn verwijderd wordt, dan wordt er toch nooit gefactureerd? Door gebruik te maken van Text to columns kan je vrij eenvoudig ervoor zorgen dat je een echte datum in kolom K krijgt of je gebruikt een formule in een hulpkolom.
Code:
=DATEVALUE(LEFT(K2;10))
Even filteren en klaar.
 
Goedemorgen behulpzame mensen :)

Inmiddels een paar maanden naar extreme tevredenheid de code van V&A gebruikt, en aardig wat uurtjes bespaard!

Vanmorgen liep hij meteen vast met error code 'Runtime Error 1004'
Er is naar mijn weten weinig structureels veranderd aan het bestand. Na wat googelen en prutsen is het mij gelukt om het toch werkend te krijgen nadat ik het tabblad apart heb opgeslagen als sjabloon.

Ik vroeg me echter af of jullie een idee hebben wat deze error kan veroorzaken als het bestand weinig verandert? Er zijn wellicht wat regels toegevoegd en wat unieke debiteurnummers; maar dat zou toch weinig problematisch moeten zijn?

Ik ben benieuwd of jullie een idee hebben.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan