In een rij staan in diverse cellen dubbele waarden. We willen echter alleen unieke waarden hebben. De functie zorgt er voor dat die dubbele waarden worden genegeerd en het resultaat in één cel wordt gezet waarbij de waarden door een komma worden gescheiden.
FunctionDubbels(Target As Range, q As Boolean) As StringDim rngCell AsRangeDim Resultaat AsStringResultaat= EmptyForEach rngCell In TargetIfNotrngCell= EmptyThenIfq= FalseThenIfResultaat= EmptyThenResultaat= rngCellElseResultaat= Resultaat&", "& rngCellEnd IfElseIfInStr(Resultaat, rngCell) =0ThenIfResultaat= EmptyThenResultaat= rngCellElseResultaat= Resultaat&", "& rngCellEnd IfEnd IfEnd IfEnd IfNext rngCellDubbels= ResultaatEnd Function
Er zijn veel manieren om bereiken te selecteren. Hier een aantal voorbeelden.
– Gegevens staan in kolom C, beginnen vanaf cel [C1] én zijn aaneengesloten. Selecteren met deze code:
Range("C1", Range("C1").End(xlDown)).Select
– Gegevens staan in kolom C, beginnen vanaf cel [C1] én zijn NIET aaneengesloten. Selecteren met deze code:
Range("c1", Range("C1048576").End(xlUp)).Select
– Gegevens staan in bereik A1:D10, zijn aaneengesloten én de actieve cel bevindt zich in dat bereik namelijk B4. Alle cellen vanaf actieve cel (B4) naar beneden en naar rechts selecteren met deze code:
In Excel kun je op drie manieren gegevens importeren uit een tekstbestand:
Je kunt het tekstbestand openen in Excel of je kunt een tekstbestand importeren als een extern gegevensbereik. Gegevens | Van tekst
Je kunt gegevens van Excel exporteren naar een tekstbestand met de opdracht Opslaan als.
De twee, meest gebruikte indelingen voor tekstbestanden zijn:
Tekstbestanden met scheidingstekens (TXT-bestanden), waarin de afzonderlijke tekstvelden zijn gescheiden door een tab (ASCII-tekencode 009). Tekstbestanden met door een komma of puntkomma gescheiden waarden (CSV-bestanden), waarin de afzonderlijke tekstvelden zijn gescheiden door een komma (,) of puntkomma(;). Je kunt voor TXT- en CSV-bestanden een ander scheidingsteken kiezen, wat nodig kan zijn als je de gegevens op jouw manier wilt importeren of exporteren.
Let op ! ! !
Je kunt maximaal 1.048.576 rijen en 16.384 kolommen importeren of exporteren.
Je kunt een CSV bestand ook inlezen middels een macro:
SubLees_CSV_Bestand()Dim lngBestandNr AsLong, lngRijAsLong, varRijAsVariantDim strTotaal AsString, strRijen() AsString, strVeld() AsString'Freefile geeft als resultaat een integer met het volgende'bestandsnummer dat voor de instructie Open kan worden gebruikt.lngBestandNr= FreeFile'Open het juiste bestand. Let op de locatie. Open "C:\temp\test.csv"For Binary As #lngBestandNr'De Space functie geeft als resultaat een Tekenreeks'die bestaat uit het opgegeven aantal spaties in LOF'LOF betekent Lenght Of FilestrTotaal=Space(LOF(lngBestandNr))'Leest gegevensGet #lngBestandNr, , strTotaal'Sluiten Close #lngBestandNr'Let op ! ! !'Gebruik Chr(10), Chr(13), vbCr, vbLf, vbCrLf, of vbNewLine'Al naar gelang waarmee de rij eindigt. Rijen worden gesplitststrRijen=Split(strTotaal, vbCr) '< < < hier bijv. vbCr'Foutafhandeling uitschakelenOn Error Resume NextForEach varRij In strRijen'Let op ! ! ! de zogenaamde delimiter'Kan zijn , of ; De velden worden gesplitststrVeld=Split(varRij, ",") '< < < hier bijv. de kommalngRij= lngRij+1'Gegevens wegschrijven naar celCells(lngRij, "A").Resize(, UBound(strVeld) +1) = strVeldNext'Foutafhandeling weer inschakelenOn Error GoTo 0End Sub
Het probleem is het volgende. Er staan gegevens in een cel en de opmaak van de cel staat op tekst terugloop ingesteld. Hierdoor staan er meerdere regels gegevens in 1 cel. Deze gegevens wil je splitsen naar andere cellen. Dit is een voorbeeld van de situatie:
Sla het bestand op als temp.csv, in de lokatie: C:\temp\temp.csv Let op ! ! ! Bestandsextensie is dus .csv. Je krijgt dan het volgende bestand als je dit opent in de gratis te downloaden tekstverwerker Notepad++
Neem onderstaande code op in een nieuwe werkmap
Let op ! ! ! TEST eerst in een kopie van je werkmap. Je weet nooit of het mis gaat en dan ben je je gegevens kwijt 1. Kopieer de onderstaande code 2. Open een nieuwe werkmap 3. Druk op de toetscombinatie ALT + F11 om de Visual Basic Editor te openen 4. Druk op de toetscombinatie ALT + N om het menu Invoegen te openen 5. Druk op M om een standaard module in te voegen 6. Daar waar de cursor knippert voeg je de code in middels Ctrl + V 7. Druk op de toetscombinatie ALT + Q om de Editor af te sluiten en terug te keren naar Excel 8. Druk op de toetscombinatie ALT + F8 om de Macro Dialoog te tonen. Dubbeklik op de macro naam om te starten.
SubLees_CSV_Bestand()Dim lngBestandNr AsLong, lngRijAsLong, varRijAsVariantDim strTotaal AsString, strRijen() AsString, strVeld() AsString'Freefile gives an integerlngBestandNr= FreeFile'Open the right file, watch location ! ! ! Open "C:\temp\temp.csv"For Binary As #lngBestandNr'Space function gives a string with spaces.strTotaal=Space(LOF(lngBestandNr))'Read the datasetGet #lngBestandNr, , strTotaal'Close Close #lngBestandNr'Pay attention ! ! !'Use Chr(10), Chr(13), vbCr, vbLf, vbCrLf, of vbNewLine'Depends what character is used for end of linestrRijen=Split(strTotaal, vbCrLf) '< < < here use vbCrLf just like in the screen above'Error handling offOn Error Resume NextlngRij=1x=1ForEach varRij In strRijen'Write data to worksheet cells.Cells(lngRij, x) = varRij'varRij.Resize(, UBound(strVeld) + 1) = strVeldx= x+1Ifx= 7Thenx=1lngRij= lngRij+1End IfNext'Error handling on.On Error GoTo 0End Sub
En je krijgt dit als resultaat. De gegevens staan nu in de cellen A1:F1:
De onderstaande zogenaamde “User Defined function” oftewel een zelfgemaakte functie, splitst de gegevens die in 1 cel staan en meerdere regels omvat. Kijk ook even bij dit bericht:
Opzet: – Je gegevens staan in kolom A. – Je splitst de gegevens naar de naastliggende cellen, dus C1:H1, C2:H2, C3:H3 etc. – Je krijgt dan als resultaat zoals je het op de afbeelding ziet.
Alle bestanden in een bepaalde map weergeven op en werkblad.
Deze is eenvoudig
Let op ! ! ! TEST eerst in een kopie van je werkmap. Je weet nooit of het mis gaat en dan ben je je gegevens kwijt 1. Kopieer de onderstaande code 2. Open een nieuwe werkmap 3. Druk op de toetscombinatie ALT + F11 om de Visual Basic Editor te openen 4. Druk op de toetscombinatie ALT + N om het menu Invoegen te openen 5. Druk op M om een standaard module in te voegen 6. Daar waar de cursor knippert voeg je de code in middels Ctrl + V 7. Druk op de toetscombinatie ALT + Q om de Editor af te sluiten en terug te keren naar Excel 8. Druk op de toetscombinatie ALT + F8 om de Macro Dialoog te tonen. Dubbeklik op de macro naam om te starten.
SubAlle_Bestandsnamen_Weergeven()Dim objFSO AsObjectDim objFolder AsObjectDim objFile AsObjectDim ws AsWorksheet'Verwijzing naar Scripting.FileSystemObjectSet objFSO=CreateObject("Scripting.FileSystemObject")'Werkblad toevoegenSet ws= Worksheets.Add'Verkrijg het map object dat geassocieerd is met de directorySet objFolder= objFSO.GetFolder("C:\windows") '<<< Geef een directory op ws.Cells(1, 1).Value="De bestanden gevonden in "& objFolder.Name&" zijn:"'Doorloop de bestanden collectieForEach objFile In objFolder.Files ws.Cells(ws.UsedRange.Rows.Count+1, 1).Value= objFile.NameNext'Opruimen!Set objFolder= NothingSet objFile= NothingSet objFSO= NothingEnd Sub
SubSplitsGegevens()'Splits data in een cel naar naast gelegen cellenDim SplitsData AsVariantDim intTotaal AsInteger'Gegevens van een cel in matrix opslaanSplitsData=Split(ActiveCell.Value, Chr(10))'Bovengrens matrix bepalenintTotaal=UBound(SplitsData)'Naar naast gelegen cellen schrijvenRange(Cells(ActiveCell.Row, ActiveCell.Column+1), _Cells(ActiveCell.Row, ActiveCell.Column+1+ intTotaal)).Value= SplitsDataEnd Sub
Selecteer ergens een cel in het bereik A1:C27 en toets Ctrl+L om een tabel te creëren met de naam Tabel1. Maak een Dummy kolom [D] [H2] >>> Gegevensvalidatie | Gegevensvalidatie | Lijst | Bron:=$F$4:$F$21 [H2] is weliswaar geen combobox maar je kunt wel waarden kiezen. Als je geen waarden ziet, moet je even naar boven scrollen.
[D2]=SOM(ALS(AANTAL.ALS(A$2:A2;A2)<>1;0;AANTAL.ALS(A$2:A2;A2));D1) (Doorvoeren naar beneden) [F2]=MAX(Tabel1[Dummy]) [F4]=ALS(RIJEN(F$4:F4)>$F$2;””;INDEX(Tabel1[Steden]; VERGELIJKEN(RIJEN(F$4:F4);Tabel1[Dummy];0))) (Doorvoeren naar beneden) [I2]=AANTAL.ALS(Tabel1[Steden];$H$2)
Onderstaande formules zijn Matrixformules. Invoeren met Ctrl+Shift+Enter en vervolgens (Doorvoeren naar beneden)
Selecteer ergens een cel in het bereik A1:C4000 en toets Ctrl+L om een tabel te creëren met de naam Tabel1. Nu kun je gemakkelijk naar die tabel verwijzen in je formules met:
Tabel1[Steden] of Tabel1[Provincie] of Tabel1[Postcode]
[Z2:Z444] een lijst met plaatsnamen van Nederland. Voorbeeld hier! [E2] >>> Gegevensvalidatie | Gegevensvalidatie | Lijst | Bron:=$Z$2:$Z$444
[F2]=AANTAL.ALS(Tabel1[Steden];E2) [E4]=ALS(RIJEN(E$4:E4)<=F$2;$E$2;””) (Doorvoeren naar beneden)
Onderstaande formules zijn Matrixformules. Invoeren met Ctrl+Shift+Enter: Er verschijnen dan accolades { } om de formule. Niet zelf typen want dan werkt de formule niet en vervolgens (Doorvoeren naar beneden)