Public Function SayiOku(ByVal Sayi As String, Optional ByVal Bosluk As Byte) As String
' Bu fonksiyon -fatihçopur- tarafından yazılmıştır (Made in Turkiye)
' girilen 36 basamaklı sayının okunuşunu döndürür
Dim Basamak(2) As Byte, Birler As String, Yuzler As String, Boluk As String, UBSayi As String, UBSayiOkunusu As String
Birler = " bir iki üç dört beş altı yedi sekizdokuz"
Sayi = String$(36 - Len(Left$(Sayi, 36)), "0") & Left$(Sayi, 36)
For i = 0 To 11
UBSayi = Mid$(Sayi, 3 * i + 1, 3): UBSayiOkunusu = ""
If (i <> 10 Or UBSayi <> "001") And UBSayi <> "000" Then
For j = 0 To 2: Basamak(j) = Val(Mid(UBSayi, j + 1, 1)): Next
Yuzler = ""
If Basamak(0) = 1 Then
Yuzler = Space(Bosluk) & "yüz"
ElseIf Basamak(0) > 1 Then
Yuzler = RTrim$(Space(Bosluk) & Mid$(Birler, 5 * Basamak(0) + 1, 5)) & Space(Bosluk) & "yüz"
End If
UBSayiOkunusu = Yuzler & RTrim$(Space(Bosluk) & Mid$(" on yirmi otuz kırk elli altmışyetmişseksendoksan", 6 * Basamak(1) + 1, 6)) & RTrim$(Space(Bosluk) & Mid$(Birler, 5 * Basamak(2) + 1, 5))
End If
If UBSayi = "000" Then Boluk = "" Else Boluk = RTrim$(Space(Bosluk) & Mid$("desilyon nonilyon oktilyon septilyon sekstilyonkentilyon katrilyon trilyon milyar milyon bin ", 10 * i + 1, 10)) ' sekstilyon yerine hekstilyon da kullanılabilir.
SayiOku = LTrim$(SayiOku & UBSayiOkunusu & Boluk)
Next
End Function