Onderscheid letters & cijfers in string

Status
Niet open voor verdere reacties.

Warme bakkertje

Meubilair
Lid geworden
13 apr 2008
Berichten
7.963
Besturingssysteem
Windows 10
Office versie
MO Home and Business 2024
Geachte,

In een tekstveld heb ik alfanumerieke waarden staan bv. BE2170
Kan ik met vba elk element controleren of het om een cijfer dan wel een letter gaat en indien het een letter betreft deze laten vervangen door een welbepaalde waarde uit een andere tabel bv A=10, B=11, enz.
Kan iemand mijn neus in de goede richting zetten.
In ieder geval alvast bedankt.
 
IsNumeric

Je kunt controleren of een string een cijfer is met de functie IsNumeric. Bijvoorbeeld:
Code:
dim x as long, MijnString as string, tmp as string
mijnstring="BE2170"
for x=1 to len(MijnString)
  if isnumeric(Mid(MijnString,x,1)) then
    'opzoeken en vervangen
  else
    tmp=tmp & Mid(MijnString,x,1)
  end if
next x
debug.print tmp
 
IsNotNumeric

Thanks Sesam:thumb:

Als ik dan de logica volg en ik wil er de letters uit filteren dan maak ik gebruik van de functie Not IsNumeric.
Mijn volgende vraag is dan of de letters als dusdanig herkend worden dat ik ze kan laten opzoeken in een andere tabel en vervangen door een vaste waarde voor die betreffende letter?
Kan de functie Replace mij hier dan verder helpen?
 
Laatst bewerkt:
Hoi warme bakker,
Je kan eerst een Dlookup uitvoeren om te zien welke cijfer overeenkomt letter.
En daarna een replace doorvoeren .

Onderstaande code ertussen voegen .
Is niet getest , zullen nog kleine aanpassingen gedaan moeten worden
Code:
Dim Letterwaarde as Integer

Letterwaarde = Dlookup("[Cijfer]","TBLLetters", "[Letter]='" & Left(MijnString,x) & "'"

MijnString = replace(MijnString, Left(MijnString,x),Letterwaarde)

Groeten
Romain
 
Fout 94

Ikke terug,
Bij het starten van de code wijzigt hij perfect de eerste letter.
Bij het zoeken naar de volgende letter krijg ik de foutmelding Ongeldig gebruik van Null.
Heb al vanalles geprobeerd maar zie de fout niet zitten.
Kan iemand mij eruit helpen?
Dim x As Long, MijnString As String, tmp As String
MijnString = "BE2170"
For x = 1 To Len(MijnString)
If Not IsNumeric(Mid(MijnString, x, 1)) Then
Dim Letterwaarde As Integer
Letterwaarde = DLookup("[Cijfer]", "tblLetters", "[Letter]='" & Left(MijnString, x) & "'")
MijnString = Replace(MijnString, Left(MijnString, x), Letterwaarde)
Else
tmp = tmp & Mid(MijnString, x, 1)
End If
Next x
Debug.Print tmp
 
Hoi Warme bakkertje ,

Kan je geen bijlage bijvoegen dan kunnen we eens kijken waar de fout zich juist bevind

Groetjes
Romain
 
Voorbeeldje

Heb dit snel in elkaar gestoken om de functie te testen.
De bedoeling is dat als het werkt dit in te voegen in de eigenlijke database.
Bij nummer een geldig IBAN-rekeningnummer (Belgisch) invoeren.
De berekeningswijze zelf moet nog aangepast worden nadat omzetting werkt.
 

Bijlagen

Hoi warme bakkertje

Met onderstaande code moet je er wel geraken

Code:
For x = 1 To Len(MijnString)
    
    If Not IsNumeric(Mid(MijnString, x, 1)) Then      
       Letterwaarde = DLookup("[Cijfer]", "tblLetters", "[Letter]='" & Mid(MijnString, x, 1) & "'")
       MijnString = Replace(MijnString, Mid(MijnString, x, 1), Letterwaarde)
    End If
    tmp = tmp & Mid(MijnString, x, 1)
Next x

Groet
Romain
 
No more problem

Romain :thumb::thumb:

Je oplossing heeft het gedaan.
Heb de volledige code ingevoerd in de eigenlijke database en na aanpassing van de nodige velden werkt het ook daar perfect.
Thanks again.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan