Conversione di Numeri in Lettere (senza decimali)

Conversione di Numeri in Lettere (con decimali)

Conversione di Numeri in Lettere (senza decimali):

Questa routine, perfettamente funzionante, è stata realizzata da Marco Nocciolini (basta copiare la/le routine ed incollare in un modulo o in un evento dl foglio di lavoro)

marco.nocciolini@tin.it

E' possibile modificare le celle usate nell'esempio (B6 per la cella che contiene il numero e B7 per la cella che ospita la conversione in lettere) sostituendo i relativi riferimenti  alle celle che vi necessitano

Sub NumeriLettere()
Dim N$(100), M$(100)
Range("B6").Select     'cella col numero da convertire
Num = ActiveCell.Value

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)
End If
If Len(NN$) > 3 Then
Migliaia$ = Left$(NN$, Len(NN$) - 3)
NN$ = Right$(NN$, 3)
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


Range("B7").Select       'cella che riporta la conversione il lettere
ActiveCell.Value = LLL$

GoTo Fine

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

Fine:
End Sub

Un plauso al bravo Marco; ora aspettiamo la versione per i decimali.

La versione per gli Euro con i  decimali è arrivata:

La routine è inserita nell'evento Change del Foglio di lavoro, ma può essere inserita anche in un modulo e attivabile tramite l'associazione ad un pulsante. (Dovrà essere assegnato un nome alla macro, per esempio Sub NumeriLettere() )

Private Sub Worksheet_Change(ByVal Target As Range)
' Converte un numero da cifre a lettere (con decimali)

Application.ScreenUpdating = False

Dim N$(100), M$(100)
Range("B6").Select      'cella col numero da convertire
NumTot = ActiveCell.Value

Num = Int(NumTot)
Dec = NumTot - Num
Decim$ = Format(Dec, ".00")
Decim$ = " / " + Right$(Decim$, Len(Decim$) - 1)

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)
End If
If Len(NN$) > 3 Then
Migliaia$ = Left$(NN$, Len(NN$) - 3)
NN$ = Right$(NN$, 3)
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

'ActiveCell.Offset(0, 1).Range("A1").Select
LLL$ = LLL$ + Decim$
Range("B7").Select             'cella che riporta la conversione il lettere
ActiveCell.Value = LLL$
'ActiveCell.Offset(1, -1).Range("A1").Select
Exit Sub
'GoTo Fine

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

Fine:

End Sub

Ancora grazie a Marco.