Het probleem is dat je dubbele waarden in kolom A hebt. In dit voorbeeld zijn dat groente en fruit in het bereik A4:A20.
Met de functie VERT.ZOEKEN kun je daarom niet goed uit de voeten. Echter, je kunt kolom A en Kolom B samenvoegen in je formule d.m.v. het & teken. Met de functies INDEX en VERGELIJKEN kun je toch de juiste waarden opzoeken.
Vroeger kreeg je een rapport met daarop cijfers en een omschrijving die bij dat cijfer hoorde. Je weet wel: “Zeer slecht”, “Slecht”, “Ruim onvoldoende” etc. Hoe weet je nu bij welk cijfer de juiste omschrijving hoort? Door gebruik te maken van de functie KIEZEN kun je dat achterhalen.
Vervolgens doorvoeren tot en met cel F20. Je krijgt dan zoiets. Cijfers in E11:E20.
Maar de werkelijk kracht van de functie KIEZEN zie je hieronder in combinatie met de functie VERT.ZOEKEN. De opzet. Je hebt 3 tabellen genaamd tabel1, tabel2 en tabel3.
KIEZEN(A11;tabel1;tabel2;tabel3) betekent dat KIEZEN in kolom A kijkt, of meer specifiek in cel A11. In die kolom staan de nummers 1, 2 en 3. De functie kiest dus een getal. Dit getal wordt gebruikt om de respectievelijke tabel te kiezen. Vervolgens neemt VERT.ZOEKEN de waarde in kolom B of meer specifiek cel B11 en zoekt dat op in de tabel die KIEZEN heeft geselecteerd. De formule kun je doorvoeren tot C20.
Gegevens vanaf [A2] in het volgende formaat: Achternaam Voornaam Nummer
Bijvoorbeeld: Smith John 12345678
Eindresultaat moet zijn: [B2] = Nummer [C2] = Initialen van Voornamen en vervolgens Achternaam.
Het eerste woord in [A2] is altijd de Achternaam. Het laatste gegeven is altijd het Nummer. Alle woorden tussen Achternaam en Nummer zijn Voornamen en vormen de initialen in [C2].
De volgende VBA‑functie (werkt voor onbeperkt aantal voornamen)
In Excel: ALT + F11 → Insert → Module → plak dit:
FunctionInitialsAndLastName(fullname As String) As StringDim parts() AsStringDim i AsIntegerDim result AsStringparts=Split(fullname, " ")' Last name is first elementDim lastname AsStringlastname=parts(0)' Build initials from all middle namesFori=1ToUBound(parts) -1result= result&Left(parts(i), 1) &" "Next iInitialsAndLastName=Trim(result& lastname)End Function
Gebruiken in bijvoorbeeld C2: =InitialsAndLastName(A2)
Voor het extraheren van het nummer in B2: =RIGHT(A2;LEN(A2)-FIND(“¶”;SUBSTITUTE(A2;” “;”¶”;LEN(A2)-LEN(SUBSTITUTE(A2;” “;””)))))
Die VBA functie is veelzijdiger en robuuster en werkt als er meerdere voornamen zijn.
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