In veel ERP systemen is een telefoonnummer veld vaak een 'simpel' tekst veld, zonder enige vorm van validatie. We zien telefoonnummers in het formaat 0182345678, 0182-345678, +31182345678, 0182-34.56.78, '0182345678, nummers met spaties, etc. Ik kreeg recentelijk een verzoek of daar in Excel iets mee te doen is, iemand had een download uit zijn systeem en wilde hier de telefooncentrale mee 'voeden'. Bijkomende requirement was dat de kolom landcode NL, BE of leeg kon zijn, indien leeg moest er uitgegaan worden van een NL landcode.
Met een simpele 'vervangen' functie in Excel kom je er niet, ik moest dus kijken of ik een VBA functie kon maken ;)
Ik heb een kolom met telefoonnummers, een kolom met de landcode en een (hulp) tabel waarin ik achter de landcodes de internationale toegangsnummers / prefix zet.
De functie die ik gemaakt heb heet StripEnInternationaliseer (What's in a name..):
De functie heeft 3 parameters:
MyRange bevat de cel met het nummer wat we om willen zetten.
MyLandcode bevat de cel met de landcode
MyLandCodeRange bevat de cellen range waarin alle landcodes met hun toegangsnummers staan
Public Function StripEnInternationaliseer(MyRange As Range, MyLandcode As Range, MyLandcodeRange As Range)Dim nTmpVal As StringDim nLandCode As StringDim nPrefix As String
nTmpVal = Replace(MyRange.Value, ".", "")nTmpVal = Replace(nTmpVal, "-", "")
'FF omzetten naar integer omdat we een nummer willen.. If IsNumeric(nTmpVal) Then nTmpVal = CStr(Int(nTmpVal))End If
'LandcodenLandCode = MyLandcode.ValueIf MyLandcode = "" Then nLandCode = "NL"End If
'Prefix opzoeken o.b.v. landcode nPrefix = Application.WorksheetFunction.VLookup(nLandCode, MyLandcodeRange, 2, False)
'Samenvoegen resultaten nTmpVal = nPrefix + nTmpVal
'En teruggeven aan VBA functie StripEnInternationaliseer = nTmpVal
End FunctionDOWNLOAD het bestand HIER