Hur man kontrollerar om en sträng innehåller en alfabetisk (icke-numerisk) karaktär via Access VBA

Att "rengöra" information innan du importerar den till din databas är ganska standard – en av anledningarna till att du har börjat använda en databas är ju trots allt att du kan förutsägbart fråga databasen efter fastställda kriterier, eller hur... eller hur? Så hur hanterar du externa situationer där du till exempel måste importera information från en fil där en person skriver in "$" men en annan antar att du vet att det är ett monetärt värde – eller ännu värre, där någon skriver in "am" eller "pm" men en annan person använder 24-timmarsklockan? Som vanligt finns det många sätt att närma sig problemet, men ett sätt är att kontrollera om en sträng bara är en uppsättning siffror, eller om den innehåller några "icke-tal". Med lite VBA är den här typen av kontroll enkel – och den här artikeln visar dig hur enkelt...

Varför behöver vi göra detta?

DatateckenOm du importerar någon form av information som du inte har kontroll över hur den matas in eller extraheras, har du säkert stött på det här problemet många (många!) gånger tidigare – folk matar in information på det sätt som är mest bekvämt för dem, inte på ett enhetligt sätt. Det betyder att det bara är en tidsfråga innan du måste... göra det är enhetligt innan du kan importera det.

Ett typiskt exempel på detta är där du behöver importera data till ett numeriskt fält men när du tittar på data ser du att vissa har separerat tusentals med komma, andra har lagt till ett valutatecken - och vem vet vad mer.

Ett snabbt varningsord!

Importera data som inte har rensats till din databas kan vara ganska katastrofalt - i bästa fall kan det skeva din rapportering, i värre fall kan det hända att alla slags saker går sönder - låt inte "smutsig" dataimport vara orsaken till att du jag försöker fixa åtkomstproblem hela helgen!

Hur man kan bli av med alfabetiska tecken

Du kan naturligtvis göra en sökning och byta ut manuellt, men att göra det kan ta tid och du kan mycket väl sakna något (om du bara söker till exempel efter dollartecken kan du missa eurotecknet eller komma, mellanslag osv.) . Så det enklaste och mer pålitliga sättet att göra det är att låta Access göra det hårda arbetet med koden nedan.

På koden ...

Public Function removeNonNumeric(inString As String) As Long
    Dim outputString, chrString As String
    Dim strPos As Integer
    
    For strPos = 1 To Len(inString)
        chrString = Mid(inString, strPos, 1)
        If IsNumeric(chrString) Then outputString = outputString & chrString
    Next
    
    removeNonNumeric = CLng(outputString)
End Function

Vad koden gör

VBA-kodFunktionen här är väldigt enkel. Allt vi gör här är att loopa igenom strängen som skickas in, ett tecken i taget. Om tecknet är ett nummer lägger vi till det i vår temporära sträng, och när vi är klara konverterar vi den till en "lång".

Anpassa koden så att den passar dig

Som du kan se - funktionen returnerar en datatyp av "lång" - om du arbetar med heltal, eller flytande punkter etc så vill du ändra funktionen i enlighet med detta så att den returnerar rätt typ av värde för din databas.

Författarintroduktion:

Mitchell Pond är en dataåterställningsexpert i DataNumen, Inc., som är världsledande inom teknik för återställning av data, inklusive reparation SQL Server databas och Excel-programvara för återställningsprogramvara. För mer information besök www.datanumen.com

Kommentarer är stängda.