snb
Verenigingslid
- Lid geworden
- 12 jun 2008
- Berichten
- 20.289
In de laatste nieuwsbrief plaatste Octafish een artikel onder de titel Cursus Access voor beginners H14.
Daarin beschrijft hij een methode om een getal te 'vertalen' in tekst.
Omdat de beschreven methode vanwege het gebruik van VBA een bredere toepassing kan hebben dan in Access alleen, leek het me aardig hieraan in dit VBA subforum aandacht te besteden.
Ik kon het niet nalaten Octafish' methode te bestudereen met in het achterhoofd de vraag: 'kan dat niet simpeler '?
Het resultaat daarvan plaats ik hieronder.
Omdat Octafish alles in een funktie heeft gegoten doe ik dat ook in dit geval.
Hoe is de methode opgebouwd ?
- De tekstopbouw van getallen is erg regelmatig, daarvoor maken we een algoritme
- De tekstopbouw van getallen kent een aantal uitzonderingen, die zetten we in een array
- De tekstopbouw van getallen is voor iedere groep van 3 opeenvolgende getallen (honderden, honderdduizenden, honderdmiljoenen, etc. identiek; daarom maken van ider getal vóór het te analyseren een getal met 3,6,9,12, etc. tekens met behulp van de format methode. 2, wordt "002", 12 wordt "012", 1203 wordt "001203", etc.
- Eerst kijkt de methode of een uitzondering van toepassing is, die wordt dan gebruikt; als er geen uitzondering is wordt het reguliere algoritme gebruikt.
Daarin beschrijft hij een methode om een getal te 'vertalen' in tekst.
Omdat de beschreven methode vanwege het gebruik van VBA een bredere toepassing kan hebben dan in Access alleen, leek het me aardig hieraan in dit VBA subforum aandacht te besteden.
Ik kon het niet nalaten Octafish' methode te bestudereen met in het achterhoofd de vraag: 'kan dat niet simpeler '?
Het resultaat daarvan plaats ik hieronder.
Omdat Octafish alles in een funktie heeft gegoten doe ik dat ook in dit geval.
Hoe is de methode opgebouwd ?
- De tekstopbouw van getallen is erg regelmatig, daarvoor maken we een algoritme
- De tekstopbouw van getallen kent een aantal uitzonderingen, die zetten we in een array
- De tekstopbouw van getallen is voor iedere groep van 3 opeenvolgende getallen (honderden, honderdduizenden, honderdmiljoenen, etc. identiek; daarom maken van ider getal vóór het te analyseren een getal met 3,6,9,12, etc. tekens met behulp van de format methode. 2, wordt "002", 12 wordt "012", 1203 wordt "001203", etc.
- Eerst kijkt de methode of een uitzondering van toepassing is, die wordt dan gebruikt; als er geen uitzondering is wordt het reguliere algoritme gebruikt.
Code:
Sub snb()
MsgBox vertaal(328)
End Sub
Code:
Function vertaal(y)
sq = Array(, "", "een", "twee", "drie", "vier", "vijf", "zes", "zeven", "acht", "negen", "tien", "elf", "twaalf", "dertien", "veertien", "twintig", "dertig", "veertig", "tachtig")
x = Format(y, String(3 * ((Len(y) - 1) \ 3 + 1), "0"))
For j = Len(x) \ 3 To 1 Step -1
y = Mid(x, Len(x) - (j * 3) + 1, 3)
c00 = ""
If Left(y, 1) <> "0" Then c00 = sq(mats(Left(y, 1))) & "honderd"
If Right(y, 2) <> "00" Then
If IsError(mats(Right(y, 2))) Then
c00 = c00 & sq(mats(Right(y, 1)))
If Mid(y, 2, 1) <> "0" Then
If IsError(mats(Mid(y, 2, 1) & "0")) Or Mid(y, 2, 1) = "1" Then
c00 = c00 & IIf(Mid(y, 2, 1) = "1", "tien", IIf(Right(y, 1) = "0", "", "en") & sq(mats(Left(Right(y, 2), 1))) & "tig")
Else
c00 = c00 & "en" & sq(mats(Mid(y, 2, 1) & "0"))
End If
End If
Else
c00 = c00 & sq(mats(Right(y, 2)))
End If
End If
c01 = c01 & c00 & Choose(j, "", "duizend ", "miljoen ", "miljard ")
Next
vertaal = Replace(Replace(Replace(c01, "eendu", "du"), "eenho", "ho"), "eee", "eeë")
End Function
Code:
Function mats(y)
mats = Application.Match(y, Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "20", "30", "40", "80"), 0)
End Function
Laatst bewerkt: