La routine converti numeri in lettere trasformata in FUNZIONE: NUMINEURO().

Utilizzo: Conversione numeri in lettere, quando la conversione interessa più celle . Aggiornata al 30/06/03 con l'aggiunta dell'argomento Arrotonda.

Questa procedura è utile nel caso si voglia utilizzare la conversione su più celle, e magari con riferimenti a celle distanti. A differenza delle routine del precedente paragrafo, dove è necessario inserire nel codice i riferimenti alle celle, sia quella che porta il numero, sia quella dove deve apparire la conversione in lettere del numero, questa funzione, una volta inserita la funzione in un modulo, consente di essere richiamata in qualunque cella, semplicemente dichiarando il nome della funzione ed il riferimento alla cella da convertire. Se per esempio, vogliamo che in F2 appaia il numero in lettere che è nella cella A1, in F2 scriveremo

=Numineuro(A1;2) 'arrotondata a due decimali

ed avremo in F2 la conversione. La conversione converte numeri interi o decimali e restituisce sempre il numero scritto in lettere con due decimali. (es: centoventisette/00). Ora è previsto l'arrotondamento a due decimali secondo il concetto: se il terzo decimale è 5 o maggiore, il secondo decimale viene arrotondato al decimale superiore (per eccesso), da 0 a 4, arrotondamento per difetto. Esempio:

in A1 abbiamo 127,5478 con la funzione =Numineuro(A1;2) in un'altra cella, otteniamo:

Centoventisette/55  (il secondo decimale arrotondato per eccesso)

Questo è il codice, da copiare e incollare in un modulo: 

Function NumInEuro(NumTot As Currency, Arrotonda As Integer)

Application.ScreenUpdating = False

Dim N$(100), M$(100)
NumTot = Round(NumTot, Arrotonda)
Num = Int(NumTot)
Dec = NumTot - Num
Decim$ = Format(Dec, "." + String(Arrotonda, "0"))
Decim$ = " / " + Right$(Decim$, Len(Decim$) - 1)
If Arrotonda = 0 Then Decim$ = " / 00"

N$(0) = ""
N$(1) = "uno"
N$(2) = "due"
N$(3) = "tre"
N$(4) = "quattro"
N$(5) = "cinque"
N$(6) = "sei"
N$(7) = "sette"
N$(8) = "otto"
N$(9) = "nove"
N$(10) = "dieci"
N$(11) = "undici"
N$(12) = "dodoci"
N$(13) = "tredici"
N$(14) = "quattordici"
N$(15) = "quindici"
N$(16) = "sedici"
N$(17) = "diciassette"
N$(18) = "diciotto"
N$(19) = "diciannove"
M$(0) = ""
M$(2) = "venti"
M$(3) = "trenta"
M$(4) = "quaranta"
M$(5) = "cinquanta"
M$(6) = "sessanta"
M$(7) = "settanta"
M$(8) = "ottanta"
M$(9) = "novanta"
M$(10) = "Cento"
NN$ = LTrim$(Str$(Num))

If Len(NN$) > 6 Then
Milioni$ = Left$(NN$, Len(NN$) - 6)
NN$ = Right$(NN$, 6)
Else
Milioni$ = ""
End If
If Len(NN$) > 3 Then
Migliaia$ = Left$(NN$, Len(NN$) - 3)
NN$ = Right$(NN$, 3)
Else
Migliaia$ = ""
End If

GoSub Ciclo
LLL$ = LL$
NN$ = Migliaia$
If Migliaia$ = "1" Then
LLL$ = "mille" + LLL$
Else
GoSub Ciclo
If Len(LL$) > o Then LLL$ = LL$ + "mila" + LLL$
End If

NN$ = Milioni$
If Milioni$ = "1" Then
LLL$ = "unmilione" + LLL$
Else
GoSub Ciclo
If Len(LL$) > o Then LLL$ = LL$ + "milioni" + LLL$
End If

NumInEuro = LLL$ + Decim$

Exit Function


Ciclo:
LL$ = ""
Num0 = Val(NN$)
If Len(NN$) = 2 Then NN$ = "0" + NN$
If Len(NN$) = 1 Then NN$ = "00" + NN$
Num3 = Val(Right$(NN$, 1))
Num2 = Val(Mid$(NN$, 2, 1))
Num1 = Val(Left$(NN$, 1))
If Num0 > 99 Then
If Num0 > 199 Then LL$ = N$(Num1)
LL$ = LL$ + "cento"
End If

If Num2 > 1 Then
LL$ = LL$ + M$(Num2)
If Num3 > 0 Then
If Num3 = 1 Or Num3 = 8 Then LL$ = Left$(LL$, Len(LL$) - 1)
LL$ = LL$ + N$(Num3)
End If
End If
If Num2 < 2 Then
LL$ = LL$ + N$(Num3 + Num2 * 10)
End If
Return
End Function

Procedura realizzata da Marco Nocciolini.