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

Formule om een cijfer te exploiteren naar een lege cel

  • Onderwerp starter Onderwerp starter Adz1
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Adz1

Nieuwe gebruiker
Lid geworden
14 jul 2014
Berichten
2
Goedemiddag Excel-experts,

Ik ben bezig met het maken van een overzicht van een aantal opleidingen (op mijn werk). Nou heb ik door het draaien van een rapportage een excel-document gekregen waarin de naam van de opleiding en de code in 1 cel staan.
Die 2 wil ik graag splitsen. Gezien het feit dat het ruim 900 items betreft wil ik kijken of dit middels een formule kan zodat ik niet 900 keer dezelfde handeling hoef te herhalen.
Hier een voorbeeld van wat ik wil:
Opleiding A (654321)

Dit vetgedrukte wil ik splitsen naar 2 vakjes namelijk:
Cel1 ________Cel2
Opleiding A--654321

Het maakt me niet zoveel uit of het gekopieerd of geknipt wordt. Het enige wat van belang is, is dat ik die opleidingscode ook in een aparte cel kan krijgen.
Omdat de code voor elke opleiding verschilt zal het een generieke code moeten zijn die elke 6-cijfer combinatie kan opsporen en kopiëren/knippen.
Andere optie is dat hij cijfers zoekt tussen de 000001 en 999999 en deze kopieert.

Weet iemand hoe ik dit kan doen?

Vast hartelijk bedankt!
 
Tekst naar kolommen:
Daar heb je een standaard functie voor in Excel, te weten 'Tekst naar kolommen' onder de kop 'Gegevens'.
Scheidt de tekst op het teken "(". Dan je 1 kolom hebben met 'Opleiding A (' en '654321)'
Selecteer vervolgens de 1e kolom > CTRL+H > Zoeken naar: ) vervangen voor laat je leeg. Doe hetzelfde met de 2e kolom en vervang daar het teken (.

Formule:
Ervan uit gaande dat de tekst in A1 staat.
Voor B1:
Code:
=LINKS(A1;VIND.SPEC("(";A1)-2)
Voor C1:
Code:
=DEEL(A1;LENGTE(B1)+3;6)

VBA:
Code:
Sub Spaarie()
    For Each v In Sheets(2).Columns(1).SpecialCells(2) '.offset(1).specialcells(2) indien er een koptekst bestaat
        v.Offset(, 1) = Split(v.Value, "(")(0)
        v.Offset(, 2) = Mid(Split(v.Value, "(")(1), 1, 6)
    Next
End Sub
 
Laatst bewerkt:
Als aanvulling op de formule van @Spaarie, kan je ook deze gebruiken in C1:
PHP:
=WAARDE(DEEL(A1;VIND.SPEC("(";A1;1)+1;VIND.SPEC(")";A1;1)-VIND.SPEC("(";A1;1)-1))

Edit @spaarie, niet tussendoor formules lopen aanpassen en VBA toevoegen. Had ik niet gezien (tijd van mijn post en jouw aanpassing is gelijk):d
 
Laatst bewerkt:
@Sparie,

Deze regel : v.Offset(, 2) = Mid(Split(v.Value, "(")(1), 1, 6) geeft de foutmelding "subscript valt buiten het bereik".
Enig idee waar de fout zit?

mvg,
tkint
 
Een array begint te tellen bij 0, niet bij 1. Probeer deze eens:
v.Offset(, 2) = Mid(Split(v.Value, "(")(0), 1, 6)
 
Ervan uitgaande dat alle cijfers omgeven zijn door ronde haken en dat je gegevens beginen in A2, probeer dit (als je per se een macro wil gebruiken, wat niet echt noodzakelijk is).
Code:
Sub macro1()
Dim f As Integer, x As Integer, tekststr As String
'Deze macro werd geschreven door Zapatr
For x = 2 To Range("A" & Rows.Count).End(xlUp).Row
tekststr = Range("A" & x).Value
f = WorksheetFunction.Search("(", tekststr) - 1
Range("A" & x).Value = Left(tekststr, f)
Range("B" & x).Value = Mid(tekststr, f + 2, 6)
Next x
End Sub
 
Ik blijf het lastig lezen vinden: code zonder inspringen. Zonder iets gewijzigd te hebben behalve een paar tabjes
Is dit toch veel beter leesbaar
Code:
Sub macro1()
Dim f As Integer, x As Integer, tekststr As String
'Deze macro werd geschreven door Zapatr
For x = 2 To Range("A" & Rows.Count).End(xlUp).Row
    tekststr = Range("A" & x).Value
    f = WorksheetFunction.Search("(", tekststr) - 1
    Range("A" & x).Value = Left(tekststr, f)
    Range("B" & x).Value = Mid(tekststr, f + 2, 6)
Next x
End Sub
 
Ja dat is zo, maar met een code waar slechts 1 for-nextlus in staat waarbinnen de regels voor inspringen in aanmerking komen, kan Adz1 mijn macro toch wel lezen denk ik. Maar ik zal er voortaan rekening mee proberen te houden.
 
@tkint: Dat komt hoogstwaarschijnlijk omdat mijn code niet op jouw opmaak is gebaseerd. Dat is dus 1 van de redenen waarom er voorbeeld bestanden worden gevraagd.

@VenA: Mijn excuses voor het tussendoor aanpassen, maar had al eigenlijk al verwacht dat de ts de oplossing 'tekst naar kolommen' niet ging gebruiken. Vandaar nog aanvullingen met formules en VBA.

@edmoor: Volgens mij begin ik ook te tellen bij 0 zie code:
Code:
v.Offset(, 1) = Split(v.Value, "(")[B][U][COLOR="#FF0000"](0)[/COLOR][/U][/B]
v.Offset(, 2) = Mid(Split(v.Value, "(")(1), 1, 6)
 
Yep, helemaal correct :) Dan zal het probleem in de bron string zitten.
 
Code:
Sub WB()
    sn = Range("A2:C" & Cells(Rows.Count, 1).End(xlUp).Row)
    For i = 1 To UBound(sn)
        With CreateObject("VBScript.RegExp")
            .Global = True
            .Pattern = "[()]"
            sn(i, 2) = Split(.Replace(sn(i, 1), ""), " ")(0)
            sn(i, 3) = Split(.Replace(sn(i, 1), ""), " ")(1)
        End With
    Next
    Range("A2").Resize(UBound(sn), 3) = sn
End Subb
 
Laatst bewerkt:
Bedankt allemaal, het is gelukt! Uiteindelijk de 'tekst naar kolommen'-functie gebruikt, dat werkte goed!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan