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

alfanummerieke tekens vanaf eerste cijfers ophalen uit andere cel

Status
Niet open voor verdere reacties.

Gerald Baalhuis

Gebruiker
Lid geworden
14 jan 2006
Berichten
369
Beste forum leden,

Ik heb een lijst met ongeveer 9000 cellen, gevuld met tekst waarin ook cijfers voorkomen. Het gaat om geneesmiddelnamen met een sterkte, bijv. Paracetamol 500mg, Levodopa/carbidopa 100/25mg of Perindolpril 0,125mg.
Het is de bedoeling dat de tekst vanaf het eerste cijfer t/m het laatste teken in een aparte kolom komen. In bovenstaand geval dus "500mg", "100/25mg" en "0,125mg".
In de uiteindelijke cel heb ik ruimte voor 25 tekens waarvan een deel wordt gebruikt door de sterkte aanduiding plus een voorafgaande spatie. De rest van de tekens (bijv. 19 tekens) kan dan gebruikt worden voor de geneesmiddelnaam. Deze naam mag afgebroken worden. In het tweede voorbeeld wordt het dus: "Levodopa/carbid 1000/25mg"
Zie bijgaand voorbeeld met plm. 1100 rijen.

Alvast weer bedankt voor het meedenken.

Gerald
 

Bijlagen

Laatst bewerkt:
Hoi Edmoor,

Ik vind t elke keer weer zo gaaf wat jullie bedenken! Hartstikke bedankt, hier kan ik wat mee...

Thanks a lot,

Gerald
 
Graag gedaan Gerard. Maar er zal ook nog wel iemand met een oplossing zonder VBA komen.
 
Mooi, zulke code
Maar zijn er geen geneesmiddelnamen met nummers is de naam, zoals "advil 500" of "asperine 4", die het verkeerde resultaat opleveren?
Of zijn er afspraken in de geneesmiddellenwereld dat er nooit getallen in de naam staan, anders dan de dosis?
 
Wellicht dat het hier niet gaat om geneesmiddelnamen maar om de werkzame stof. In je Advil voorbeeld is dat bijvoorbeeld Ibuprofen, dat ook in de lijst voor komt. In aspirine is dat Acetyl.
 
Laatst bewerkt:
Code:
=hoofdletters(rechts(a1;lengte(a1)-min(vind.spec({1\2\3\4\5\6\7\8\9\0};a1&"1234567890";1))+1))
excel2007nl, zelfde uitkomsten als de UDF van edmoor.
 
Laatst bewerkt:
Met één druk op een knopje volgens mij hetzelfde resultaat als mijn voorgangers.
Code:
Sub hsv()
Dim Regex As Object, i As Long, sn As String, sq, sn0
    Set Regex = CreateObject("VBscript.Regexp")
 With Sheets("Blad1")
  sq = .Columns(1).SpecialCells(2).Value
    ReDim arr(UBound(sq), 0)
  With Regex
    For i = 1 To UBound(sq)
              .Pattern = "(?=[0-9]{1,})"
               sn = .Replace(sq(i, 1), ";")
               sn0 = Split(Trim(sn), ";")
            If UBound(sn0) > 0 Then
               arr(i - 1, 0) = Trim(sn0(UBound(sn0)))
             Else
               arr(i - 1, 0) = ""
            End If
        Next i
    End With
.Range("D1").Resize(UBound(sq)) = arr
    End With
  Set Regex = Nothing
End Sub
 
Beste forumleden,

Het gaat inderdaad om geneesmiddelen, soms de merknaam soms de zogenaamde generieke naam. Er zijn een aantal geneesmiddelen met een getal in de merknaam, zoals Diane 35, maar die haal ik er mat de hand wel even uit.
Allemaal bedankt voor jullie oplossingen, ze werken allemaal. :)

Groet,

Gerald
 
of

Code:
Sub M_snb()
    For j = 0 To 9
        Columns(1).Replace " " & j, "_" & j
    Next
    Columns(1).TextToColumns , , , , 0, 0, 0, 0, -1, "_"
End Sub
 
Het kan ook met:

Code:
Sub M_snb()
    Columns(1).SpecialCells(2).Offset(, 2) = Application.Transpose(Split(Join(Filter(Split(LCase(Join(Application.Transpose(Columns(1).SpecialCells(2)), " mg| "))), "mg")), "mg| "))
End Sub


Maar dan worden de invoerinconsistenties wel erg duidelijk.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan