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

deel van een tekst weergeven in sterk variabele tekstformaten

Status
Niet open voor verdere reacties.

Foxmaster

Gebruiker
Lid geworden
14 mei 2012
Berichten
19
Geachte Experts!

Uit SAP downloads wil ik een tekst halen, welke op een bepaald punt begint en op een bepaald punt eindigd. Echter de positie en het aantal karakters is variabel. De tekst waarin gezocht moet worden bevat scheidingstekens, echter deze kunnen per download anders zijn. In de download zelf zijn ze wel constant. (toch nog een lichtpuntje) :)

Bijgaand een voorbeeld.
Ik wil graag de tekst na de 1e punt en voor het (in dit geval) 1e streepje - in een andere cel (ernaast).
Met behulp van een formule krijg ik het voor elkaar, ook als de scheidingstekens wijzigen, maar het gaat om een behoorlijke hoeveelheid data waardoor het bestand met formules groot/log wordt. De tijd die Excel vervolgens nodig heeft om de boel uit te rekenen is aanzienlijk (helemaal omdat ik er een complete tool omheen wil bouwen).
 

Bijlagen

Je kunt in VBA de regular expression engine van microsoft importeren. Het voordeel hiervan is dat die veel sneller is dan de meeste formules.

om een basisfunctie toe te voegen:

Ga naar excel en doe ALT-F11 om in de macro editor te komen. Vervolgens invoegen -> module en plak de volgende code:
Code:
Function RegExpGet(ReplaceIn, ReplaceWhat As String, MatchNR As Integer)
    Dim RE As Object
    Dim MC As Object
    Dim M As Object

    Set RE = CreateObject("vbscript.regexp")
    RE.Pattern = ReplaceWhat
    RE.Global = True
    Set MC = RE.Execute(ReplaceIn)
    Set M = MC(0)
    If MatchNR > M.submatches.Count Then
        RegExpGet = ""
    Else
        RegExpGet = M.submatches(MatchNR - 1)
    End If
End Function

vervolgens plak je het volgende in cell B2:

=RegExpGet(A2;"[.](\w+)[-]?";1)

De formule kan je zoals normaal doortrekken naar beneden. eenmaal F9 om een hercalculatie te forceren en het zou moeten werken

*edit*

voor sommige toepassingen is de volgende oplossing misschien beter:

=RegExpGet(A2;"[.]([^-]+)";1)

de oplossing begint bij een punt ([.]) en eindigt bij een streepje ([^-]). Deze variant is misschien wat makkelijker aan te passen naar je wensen via variabelen. bijvoorbeeld beginnen bij een komma en eindigen bij een punt-komma:

=RegExpGet(A2;"[,]([^;]+)";1)
 
Laatst bewerkt:
vervolgens plak je het volgende in cell B2:

=RegExpGet(A2;"[.](\w+)[-]?";1)

De formule kan je zoals normaal doortrekken naar beneden. eenmaal F9 om een hercalculatie te forceren en het zou moeten werken

Dankje voor je snelle reactie! Ik probeer hem gelijk uit!
Kan ik in bovenstaande formule de . en het - vervangen voor een vaste celverwijzing? Dan kan ik hier de variabele invullen en vervolgens de juiste tekst boven water krijgen.

Ontzettend bedankt!
 
Zie mijn edit in mijn originele post.

De eerste formule pakt alleen letters en cijfers tot het eerste "vreemde" teken. Daar dat misschien niet altijd de bedoeling is werkt mijn tweede formule wel exact tot het juiste teken.
 
Laatst bewerkt:
Dankjewel wampier! De eerste oplossing werkt goed, de volgende houd ik achter de hand.
Graag zou ik een mogelijkheid inbouwen dat de .;-, variabele een celverwijzing krijgt, zodat ik met 1 aanpassing alle formules wijzig.

Ik zal zelf proberen in de functie e.e.a. te wijzigen, maar mocht iemand een goed idee hebben, dan houd ik mij warm aanbevolen!!
 
zet dit in C1:

="["&B1&"](\w+)"
in B1 zet je vervolgens .,;:-

de formule verander je naar:

=RegExpGet(A2;$C$1;1)
 
Weledele wampier! Ontzettend bedankt voor uw hulp!
Ik liep al helemaal vast en was verder gegaan met mijn andere queries en rariteiten.

Dankjewel!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan