conversione numeri



  • conversione numeri
    di archbrunetti data: 25/09/2014 11:54:38

    Ciao a tutti. Ennesima richiesta di aiuto: devo convertire automaticamente un numero in lettere in una casella a fianco, ovvero quando scrivo un numero in una cella, ad esempio 100,21, nella cella a fianco deve comparire la scritta "cento/21" oppure "centovirgolaventuno". Grazie



  • di gdito data: 25/09/2014 15:00:16

    Questa volta è davvero difficile... mi ha portato via non poco tempo (almeno mi sono divertito eheheh). Devi inserire una macro, sai come farlo? Se non lo sai chiedi pure e ti sarà detto.

    Nel frattempo ecco la funzione, converte i numeri in lettere da 0 a 999.999.999.999 compresi i centesimi che verranno convertiti in "/538".

    Una volta copiato il codice in un modulo non devi far altro che scrivere, nella cella dove vuoi il testo, =ConvertiInTesto(A1) ed il gioco è fatto :)
     
    Public Unita(20) As String, Decine(11) As String
    
    Function Processa(ByVal numero)
        If Len(numero) = 3 Then
            If Mid(numero, 1, 1) = 1 Then
                Temp = "cento"
            Else
                Temp = Unita(CInt(Mid(numero, 1, 1))) & "cento"
            End If
            
            If Right(numero, 2) = "00" Then
                Processa = Temp
            Else
                Processa = Temp & Processa(Right(numero, 2))
            End If
        End If
        
        If Len(numero) = 2 Then
            If CInt(numero) < 20 Then
                Temp = Unita(CInt(numero))
            Else
                Temp = Decine(CInt(Left(numero, 1)))
            End If
            
            
            If ((Right(numero, 2) <> "0") And (CInt(numero) > 19)) Then
                If CInt(Right(numero, 1)) = 1 Then
                    Processa = Left(Temp, Len(Temp) - 1) & Unita(CInt(Right(numero, 1)))
                Else
                    Processa = Temp & Unita(CInt(Right(numero, 1)))
                End If
            Else
                Processa = Temp
            End If
        End If
        
        If Len(numero) = 1 Then
            Processa = Unita(CInt(numero))
        End If
    End Function
    
    Function ConvertiInTesto(ByVal numero)
        Dim TempVal As String
        Dim TempResult As String
        Dim Decimali As String
        
        Dim Miliardi As String
        Dim Milioni As String
        Dim Migliaia As String
        
        Unita(0) = ""
        Unita(1) = "uno"
        Unita(2) = "due"
        Unita(3) = "tre"
        Unita(4) = "quattro"
        Unita(5) = "cinque"
        Unita(6) = "sei"
        Unita(7) = "sette"
        Unita(8) = "otto"
        Unita(9) = "nove"
        Unita(10) = "dieci"
        Unita(11) = "undici"
        Unita(12) = "dodici"
        Unita(13) = "tredici"
        Unita(14) = "quattordici"
        Unita(15) = "quindici"
        Unita(16) = "sedici"
        Unita(17) = "diciassette"
        Unita(18) = "diciotto"
        Unita(19) = "diciannove"
        Decine(0) = ""
        Decine(2) = "venti"
        Decine(3) = "trenta"
        Decine(4) = "quaranta"
        Decine(5) = "cinquanta"
        Decine(6) = "sessanta"
        Decine(7) = "settanta"
        Decine(8) = "ottanta"
        Decine(9) = "novanta"
        Decine(10) = "Cento"
        
        TempVal = LTrim(numero)
        
        If InStr(1, TempVal, ",") > 0 Then
            Decimali = "/" & Mid(TempVal, InStr(1, TempVal, ",") + 1)
            TempVal = Left(TempVal, InStr(1, TempVal, ",") - 1)
        End If
        
        If TempVal = "0" Then
            ConvertiInTesto = "zero"
            Exit Function
        End If
        
        
        If Len(TempVal) > 9 Then
            Miliardi = CStr(CInt(Left(TempVal, Len(TempVal) - 9)))
            If Miliardi = "1" Then
                TempResult = "unmiliardo"
            Else
                TempResult = Processa(Miliardi) & "miliardi"
            End If
            
            TempVal = Right(TempVal, Len(TempVal) - Len(Miliardi))
        End If
        
        If Len(TempVal) > 6 Then
            Milioni = CStr(CInt(Left(TempVal, Len(TempVal) - 6)))
            If Milioni = "1" Then
                TempResult = TempResult & "unmilione"
            Else
                TempResult = TempResult & Processa(Milioni) & "milioni"
            End If
            
            TempVal = Right(TempVal, Len(TempVal) - Len(Milioni))
        End If
        
        If Len(TempVal) > 3 Then
            Migliaia = CStr(CInt(Left(TempVal, Len(TempVal) - 3)))
            If Len(Migliaia) = 1 Then
                TempResult = TempResult & "mille"
            Else
                TempResult = TempResult & Processa(Migliaia) & "mila"
            End If
            
            TempVal = Right(TempVal, (Len(TempVal) - Len(Migliaia)))
        End If
        
        ConvertiInTesto = TempResult & Processa(TempVal) & Decimali
    End Function



  • di Mister_x (utente non iscritto) data: 25/09/2014 15:08:14

    ciao
    visto che ti hanno gia' passato una funzione ti posto anche questa trovata in rete
    da inserire in un Modulo di classe
    =converti(B2)

    Descrizione Prodotto Importo
    Computer € 20.001,00 (ventimilauno/00)
    Monitor € 39.808,00 (trentanovemilaottocentootto/00)
    Stampante € 340,00 (trecentoquaranta/00)
    Tonner € 35,38 (trentacinque/trentaotto)
    Sviluppatore € 120.000,00 (centoventimila/00)
    Totale € 180.184,38 (centoottantamilacentoottantaquattro/trentaotto)


    si ringrazia l'autore

    ciao
     
    Option Base 1
    Option Explicit
    
    'Array contenente le lettere dei numeri
    Dim Strconv(0 To 45) As String
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'Name Function:     Public Function converti(strNumero)
    'Author:            Emanuele Mattei
    'Date Crated:       12/09/2004
    'Last Modified:
    'Description:       Converte i numeri in lettere
    Public Function Converti(Strnumero As String)
    'variabile per l'importo
    Dim CrrEuro As Currency
    'centesimi
    Dim IntCents As Integer
    'variabile di tipo stringa per i centesimi
    Dim StrCentesimi As String
    'lettere dell'importo
    Dim StrLettere As String
    'centesimi
    
    
    StrCentesimi = "00"
    'Aggiornamento dello schermo attivato
    Application.ScreenUpdating = True
    
    'Imposto i valori dell'array
    Strconv(0) = "zero"
    Strconv(1) = "uno"
    Strconv(2) = "due"
    Strconv(3) = "tre"
    Strconv(4) = "quattro"
    Strconv(5) = "cinque"
    Strconv(6) = "sei"
    Strconv(7) = "sette"
    Strconv(8) = "otto"
    Strconv(9) = "nove"
    Strconv(10) = "dieci"
    Strconv(11) = "undici"
    Strconv(12) = "dodici"
    Strconv(13) = "tredici"
    Strconv(14) = "quattordici"
    Strconv(15) = "quindici"
    Strconv(16) = "sedici"
    Strconv(17) = "diciasette"
    Strconv(18) = "diciotto"
    Strconv(19) = "diciannove"
    Strconv(20) = "venti"
    Strconv(21) = "ventuno"
    Strconv(22) = "trenta"
    Strconv(23) = "trentuno"
    Strconv(24) = "quaranta"
    Strconv(25) = "quarantuno"
    Strconv(26) = "cinquanta"
    Strconv(27) = "cinquantuno"
    Strconv(28) = "sessanta"
    Strconv(29) = "sessantuno"
    Strconv(30) = "settanta"
    Strconv(31) = "settantuno"
    Strconv(32) = "ottanta"
    Strconv(33) = "ottantuno"
    Strconv(34) = "novanta"
    Strconv(35) = "novantuno"
    Strconv(36) = "cento"
    Strconv(37) = "mille"
    Strconv(38) = "mila"
    Strconv(39) = "milione"
    Strconv(40) = "milioni"
    Strconv(41) = "miliardo"
    Strconv(42) = "miliardi"
    Strconv(43) = "centomila"
    
        'Verifico che ilvalore che sto convertendo sia numerico
        If Val(Strnumero) = 0 And IsNumeric(Strnumero) = False Then
            MsgBox "La Cella selezionata non è un numero", vbInformation + vbOKOnly, "Shareoffice.it"
            Converti = "#Nome"
            Exit Function
        ElseIf Val(Strnumero) > 999999999999# Then
            MsgBox "La Cella selezionata ha un valore maggiore di 999999999999 ", vbInformation + vbOKOnly, "Shareoffice.it"
            Converti = "#Nome"
            Exit Function
        
        End If
    
        'converto il numero in currency
        CrrEuro = CCur(Strnumero)
       
        
        ' Formattazione dei centesimi
         StrCentesimi = Right(Format(Strnumero, "##,##0.00"), 2)
        
        'testo per centesimi
        
        If CInt(StrCentesimi) < 21 And CInt(StrCentesimi) > 0 Then
            StrCentesimi = num_venti(CLng(StrCentesimi))
        ElseIf CInt(StrCentesimi) >= 21 And CInt(StrCentesimi) < 100 Then
            StrCentesimi = num_cento(CLng(StrCentesimi))
        End If
        
        
        
        
        CrrEuro = Fix(CrrEuro)
        
        If CrrEuro < 21 Then
            StrLettere = num_venti(CLng(CrrEuro))
        ElseIf CrrEuro >= 21 And CrrEuro < 100 Then
            StrLettere = num_cento(CLng(CrrEuro))
        ElseIf CrrEuro >= 100 And CrrEuro < 1000 Then
            StrLettere = num_mille(CLng(CrrEuro))
        ElseIf CrrEuro >= 1000 And CrrEuro < 100000 Then
            StrLettere = num_centomila(CLng(CrrEuro), 0)
        ElseIf CrrEuro >= 100000 And CrrEuro < 1000000 Then
            StrLettere = num_milione(CLng(CrrEuro))
        ElseIf CrrEuro >= 1000000 And CrrEuro < 1000000000 Then
            StrLettere = num_miliardo(CLng(CrrEuro))
        'conversione per i miliardi
        ElseIf CrrEuro >= 1000000000 And CrrEuro < 1000000000000# Then
            StrLettere = num_miliardi(Format(CrrEuro, "##,##0"))
        End If
        'restituisco il valore
        Converti = "(" & StrLettere & "/" & StrCentesimi & ")"
        
        
    
    
    End Function
    
    
    Private Function num_venti(LngNum As Long)
        num_venti = Strconv(LngNum)
    End Function
    
    Private Function num_cento(LngNum As Long)
        Dim inNum1 As Integer
        Dim IntNum2 As Integer
        Dim StrLettera As String
        On Error GoTo errore
        If LngNum > 0 And LngNum < 21 Then
            num_cento = num_venti(LngNum)
        Else
            inNum1 = Int(LngNum / 10)
            If LngNum = 21 + (10 * (inNum1 - 2)) Then
                num_cento = Strconv((21 + (2 * (inNum1 - 2))))
            Else
                StrLettera = Strconv((20 + (2 * (inNum1 - 1) - 2)))
                IntNum2 = LngNum - (inNum1 * 10)
                If IntNum2 = 0 Then
                num_cento = StrLettera
                Else
                 num_cento = StrLettera & Strconv(IntNum2)
                End If
               
            End If
        End If
        Exit Function
    errore:
        MsgBox Err.Description, vbInformation, "num_cento"
        
    End Function
    'funzione mille
    Private Function num_mille(LngNum As Long)
        Dim IntNum1 As Integer
        Dim IntNum2 As Integer
        Dim StrLettera As String
        On Error GoTo errore
        If LngNum = 100 Then
            num_mille = Strconv(36)
        ElseIf LngNum > 100 And LngNum < 200 Then
            IntNum1 = LngNum - 100
            StrLettera = Strconv(36)
            num_mille = StrLettera & num_cento(CLng(IntNum1))
        ElseIf LngNum >= 200 And LngNum < 1000 Then
            IntNum1 = Int(LngNum / 100)
            StrLettera = Strconv(IntNum1) & Strconv(36)
            IntNum2 = LngNum - (IntNum1 * 100)
            If LngNum <> 100 * IntNum1 Then
                num_mille = StrLettera & num_cento(CLng(IntNum2))
            Else
                num_mille = StrLettera
            End If
        End If
        Exit Function
    errore:
        MsgBox Err.Description, vbInformation, "Num_mille"
    End Function
    'funzione che converto il testo dei centomila
    Private Function num_centomila(LngNum As Long, flag As Boolean)
        Dim IntNum1 As Integer
        Dim lngNum2 As Long
        Dim StrLettera As String
        StrLettera = "mila"
        On Error GoTo errore
        IntNum1 = Int(LngNum / 1000)
        If IntNum1 = 1 And LngNum = 1000 Then
            If flag = 0 Then
                StrLettera = Strconv(37)
            Else
                StrLettera = Strconv(1)
                StrLettera = StrLettera & Strconv(38)
        
            End If
        ElseIf IntNum1 = 1 And LngNum <> 1000 Then
            If flag = 0 Then
                StrLettera = Strconv(37)
            Else
                StrLettera = Strconv(1)
                StrLettera = StrLettera & Strconv(38)
            End If
            lngNum2 = LngNum - 1000
            If lngNum2 < 100 Then
                StrLettera = StrLettera & num_cento(lngNum2)
            Else
                StrLettera = StrLettera & num_mille(lngNum2)
            End If
        
        ElseIf IntNum1 > 1 And IntNum1 <= 21 Then
            StrLettera = Strconv(IntNum1)
            StrLettera = StrLettera & Strconv(38)
            lngNum2 = LngNum - (IntNum1 * 1000)
            If lngNum2 >= 1 And lngNum2 < 100 Then
                StrLettera = StrLettera & num_cento(lngNum2)
            ElseIf lngNum2 >= 100 Then
                StrLettera = StrLettera & num_mille(lngNum2)
            End If
        ElseIf IntNum1 > 21 And IntNum1 < 100 Then
            StrLettera = num_cento(CLng(IntNum1))
            StrLettera = StrLettera & Strconv(38)
            lngNum2 = LngNum - (CLng(IntNum1) * 1000)
            If lngNum2 >= 1 And lngNum2 < 100 Then
                StrLettera = StrLettera & num_cento(lngNum2)
            ElseIf lngNum2 >= 100 Then
                StrLettera = StrLettera & num_mille(lngNum2)
            End If
        End If
        num_centomila = StrLettera
        Exit Function
    errore:
        MsgBox Err.Description, vbInformation, "Num_centomila"
    End Function
    
    'funzione concerti in milioni
    Private Function num_milione(LngNum As Long)
    On Error GoTo errore
        Dim IntNum1 As Integer
        Dim lngNum2 As Long
        Dim StrLettera As String
        
        IntNum1 = Int(LngNum / 100000)
        If IntNum1 = 1 And LngNum = 100000 Then
            StrLettera = Strconv(43)
        ElseIf IntNum1 = 1 And LngNum <> 100000 Then
            StrLettera = Strconv(36)
            lngNum2 = LngNum - 100000
            If lngNum2 >= 1 And lngNum2 < 100 Then
                StrLettera = StrLettera & Strconv(38)
                StrLettera = StrLettera & num_cento(CLng(lngNum2))
            ElseIf lngNum2 >= 100 And lngNum2 < 1000 Then
                StrLettera = StrLettera & Strconv(38)
                StrLettera = StrLettera & num_mille(CLng(lngNum2))
            Else
                StrLettera = StrLettera & num_centomila(CLng(lngNum2), 1)
            End If
        ElseIf IntNum1 > 1 Then
            StrLettera = Strconv(IntNum1)
            StrLettera = StrLettera & Strconv(36)
            lngNum2 = LngNum - (100000 * IntNum1)
            If lngNum2 > 0 And lngNum2 < 22 Then
                StrLettera = StrLettera & Strconv(38)
                StrLettera = StrLettera & num_venti(CLng(lngNum2))
            ElseIf lngNum2 >= 22 And lngNum2 < 1000 Then
                StrLettera = StrLettera & Strconv(38)
                StrLettera = StrLettera & num_mille(CLng(lngNum2))
            Else
                StrLettera = StrLettera & num_centomila(CLng(lngNum2), 1)
            End If
        End If
        num_milione = StrLettera
        Exit Function
        
    errore:
        MsgBox Err.Description, vbInformation, "Num_milione"
    End Function
    'Funzione che converti gli importi sotto al 999.999.999
    Private Function num_miliardo(LngNum As Long)
        Dim IntNum1 As Integer
        Dim lngNum2 As Long
        Dim StrLettera As String
        On Error GoTo errore
        IntNum1 = Int(LngNum / 1000000)
        If IntNum1 = 1 And LngNum = 1000000 Then
            StrLettera = "un" & Strconv(39)
        ElseIf IntNum1 = 1 And LngNum <> 1000000 Then
            StrLettera = "un" & Strconv(39)
            lngNum2 = LngNum - 1000000
            If lngNum2 >= 1 And lngNum2 < 100 Then
                StrLettera = StrLettera & num_cento(CLng(lngNum2))
            ElseIf lngNum2 >= 100 And lngNum2 < 1000 Then
                StrLettera = StrLettera & num_mille(CLng(lngNum2))
                'nuova modifica
            ElseIf lngNum2 >= 1000 And lngNum2 < 100000 Then
                StrLettera = StrLettera & num_centomila(CLng(lngNum2), 1)
            Else
                 StrLettera = StrLettera & num_milione(CLng(lngNum2))
            End If
        ElseIf IntNum1 > 1 Then
            If IntNum1 > 21 And IntNum1 < 100 Then
                StrLettera = num_cento(CLng(IntNum1))
            ElseIf IntNum1 >= 100 And IntNum1 < 1000 Then
                StrLettera = num_mille(CLng(IntNum1))
            Else
                StrLettera = Strconv(CLng(IntNum1))
            End If
                StrLettera = StrLettera & Strconv(40)
                lngNum2 = LngNum - (1000000 * IntNum1)
            If lngNum2 >= 1 And lngNum2 < 100 Then
                StrLettera = StrLettera & num_cento(CLng(lngNum2))
            ElseIf lngNum2 >= 100 And lngNum2 < 1000 Then
                StrLettera = StrLettera & num_mille(CLng(lngNum2))
            ElseIf lngNum2 >= 1000 And lngNum2 < 100000 Then
                StrLettera = StrLettera & num_centomila(CLng(lngNum2), 1)
            Else
                StrLettera = StrLettera & num_milione(CLng(lngNum2))
            End If
        End If
        num_miliardo = StrLettera
        Exit Function
    errore:
        MsgBox Err.Description, vbInformation, "Num_miliardo"
    End Function
    
    'Converte gli importi sotto i 999.999.999.999
    Private Function num_miliardi(LngNum As Currency)
        Dim IntNum1 As Integer
        Dim lngNum2 As Long
        'variabile per il calcolo della differnza
        Dim CrrTemporaneo As Currency
        
        Dim StrLettera As String
        On Error GoTo errore
        IntNum1 = Int(LngNum / 1000000000)
        If IntNum1 = 1 And LngNum = 1000000000 Then
            StrLettera = "un" & Strconv(41)
        ElseIf IntNum1 = 1 And LngNum <> 1000000000 Then
            StrLettera = "un" & Strconv(41)
            lngNum2 = LngNum - 1000000000
            If lngNum2 >= 1 And lngNum2 < 100 Then
                StrLettera = StrLettera & num_cento(CLng(lngNum2))
            ElseIf lngNum2 >= 100 And lngNum2 < 1000 Then
                StrLettera = StrLettera & num_mille(CLng(lngNum2))
            ElseIf lngNum2 >= 100000 And lngNum2 < 1000000000 Then
                StrLettera = StrLettera & num_miliardo(lngNum2)
            Else
                StrLettera = StrLettera & num_centomila(CLng(lngNum2), 1)
            End If
        ElseIf IntNum1 > 1 Then
            If IntNum1 > 21 And IntNum1 < 100 Then
                StrLettera = num_cento(CLng(IntNum1))
            ElseIf IntNum1 >= 100 And IntNum1 < 1000 Then
                StrLettera = num_mille(CLng(IntNum1))
            Else
                StrLettera = Strconv(CLng(IntNum1))
            End If
                StrLettera = StrLettera & Strconv(42)
                'lo valorizzo con il valore di un miliardo
                CrrTemporaneo = 1000000000
                CrrTemporaneo = CrrTemporaneo * IntNum1
                
                lngNum2 = LngNum - CrrTemporaneo
            If lngNum2 >= 1 And lngNum2 < 100 Then
                StrLettera = StrLettera & num_cento(CLng(lngNum2))
            ElseIf lngNum2 >= 100 And lngNum2 < 1000 Then
                StrLettera = StrLettera & num_mille(CLng(lngNum2))
            ElseIf lngNum2 >= 1000 And lngNum2 < 100000 Then
                StrLettera = StrLettera & num_centomila(CLng(lngNum2), 1)
            ElseIf lngNum2 >= 100000 And lngNum2 < 1000000000 Then
                StrLettera = StrLettera & num_miliardo(lngNum2)
            Else
                StrLettera = StrLettera & num_milione(CLng(lngNum2))
            End If
        End If
        num_miliardi = StrLettera
        Exit Function
    errore:
        MsgBox Err.Description, vbInformation, "Num_miliardi"
    End Function
    
    






  • di gdito data: 25/09/2014 15:23:28

    @Mister_X non potevi arrivare prima così non la scrivevo :P... comunque è molto simile alla mia...

    La mia conteneva un piccolo errore che ho corretto, visto che non si può correggere il messaggio sul forum la riposto riveduta e corretta
     
    Public Unita(20) As String, Decine(11) As String
    
    Function Processa(ByVal numero)
        If CInt(numero) = 0 Then
            Processa = ""
            Exit Function
        End If
    
        If Len(numero) = 3 Then
            If Mid(numero, 1, 1) = 1 Then
                Temp = "cento"
            Else
                Temp = Unita(CInt(Mid(numero, 1, 1))) & "cento"
            End If
            
            If Right(numero, 2) = "00" Then
                Processa = Temp
            Else
                Processa = Temp & Processa(Right(numero, 2))
            End If
        End If
        
        If Len(numero) = 2 Then
            If CInt(numero) < 20 Then
                Temp = Unita(CInt(numero))
            Else
                Temp = Decine(CInt(Left(numero, 1)))
            End If
            
            
            If ((Right(numero, 2) <> "0") And (CInt(numero) > 19)) Then
                If CInt(Right(numero, 1)) = 1 Then
                    Processa = Left(Temp, Len(Temp) - 1) & Unita(CInt(Right(numero, 1)))
                Else
                    Processa = Temp & Unita(CInt(Right(numero, 1)))
                End If
            Else
                Processa = Temp
            End If
        End If
        
        If Len(numero) = 1 Then
            Processa = Unita(CInt(numero))
        End If
    End Function
    
    Function ConvertiInTesto(ByVal numero)
        Dim TempVal As String
        Dim TempResult As String
        Dim Decimali As String
        
        Dim Miliardi As String
        Dim Milioni As String
        Dim Migliaia As String
        
        Dim TempMiliardi As String
        Dim TempMilioni As String
        Dim TempMigliaia As String
        
        Unita(0) = ""
        Unita(1) = "uno"
        Unita(2) = "due"
        Unita(3) = "tre"
        Unita(4) = "quattro"
        Unita(5) = "cinque"
        Unita(6) = "sei"
        Unita(7) = "sette"
        Unita(8) = "otto"
        Unita(9) = "nove"
        Unita(10) = "dieci"
        Unita(11) = "undici"
        Unita(12) = "dodici"
        Unita(13) = "tredici"
        Unita(14) = "quattordici"
        Unita(15) = "quindici"
        Unita(16) = "sedici"
        Unita(17) = "diciassette"
        Unita(18) = "diciotto"
        Unita(19) = "diciannove"
        Decine(0) = ""
        Decine(2) = "venti"
        Decine(3) = "trenta"
        Decine(4) = "quaranta"
        Decine(5) = "cinquanta"
        Decine(6) = "sessanta"
        Decine(7) = "settanta"
        Decine(8) = "ottanta"
        Decine(9) = "novanta"
        Decine(10) = "Cento"
        
        TempVal = LTrim(numero)
        
        If InStr(1, TempVal, ",") > 0 Then
            Decimali = "/" & Mid(TempVal, InStr(1, TempVal, ",") + 1)
            TempVal = Left(TempVal, InStr(1, TempVal, ",") - 1)
        End If
        
        If TempVal = "0" Then
            ConvertiInTesto = "zero"
            Exit Function
        End If
        
        
        If Len(TempVal) > 9 Then
            Miliardi = CStr(CInt(Left(TempVal, Len(TempVal) - 9)))
            If Miliardi = "1" Then
                TempResult = "unmiliardo"
            Else
                TempMiliardi = Processa(Miliardi)
                If Len(TempMiliardi) > 0 Then TempResult = TempResult & TempMiliardi & "miliardi"
            End If
            
            TempVal = Right(TempVal, Len(TempVal) - Len(Miliardi))
        End If
        
        If Len(TempVal) > 6 Then
            Milioni = CStr(CInt(Left(TempVal, Len(TempVal) - 6)))
            If Milioni = "1" Then
                TempResult = TempResult & "unmilione"
            Else
                TempMilioni = Processa(Milioni)
                If Len(TempMiliardi) > 0 Then TempResult = TempResult & TempMiliardi & "milioni"
            End If
            
            TempVal = Right(TempVal, Len(TempVal) - Len(Milioni))
        End If
        
        If Len(TempVal) > 3 Then
            Migliaia = CStr(CInt(Left(TempVal, Len(TempVal) - 3)))
            If Migliaia = 1 Then
                TempResult = TempResult & "mille"
            Else
                TempMigliaia = Processa(Migliaia)
                If Len(TempMigliaia) > 0 Then TempResult = TempResult & TempMigliaia & "mila"
            End If
            
            TempVal = Right(TempVal, (Len(TempVal) - Len(Migliaia)))
        End If
        
        ConvertiInTesto = TempResult & Processa(TempVal) & Decimali
    End Function
    



  • di Zer0Kelvin data: 25/09/2014 15:34:45

    Caio.
    Solo una dritta, quando dovete assegnare un elenco di costanti ad una matrice, può essere conveniente usa re la funzione Array.
     
    Dim Unita ' oppure Dim Unita ()
    '...
    Unita = Array("", "uno", "due", "tre", "quattro", "cinque", "sei", "sette" ...eccetera)
    



  • di archbrunetti data: 25/09/2014 15:36:55

    Adesso mi state ubriacando.. avrei bisogno di sitruzioni passo passo visto che non ho idea di cosa siano macro e moduli... il mio excel è base, limitato ai comandi classici.. grazie. Facciamo che devo convertire i numeri della colonna A in lettere nella colonna B.. è possibile anche per le cifre dopo la virgola?



  • di lepat (utente non iscritto) data: 25/09/2014 16:32:09

    se ti accontenti di una sola cella prova l'allegato Lepat.xls che non utilizza macro



  • di archbrunetti data: 25/09/2014 17:01:42

    Grazie ma ho una colonna di 400 numeri da convertire nella colonna a fianco..



  • di lepat (utente non iscritto) data: 25/09/2014 17:08:12

    se non hai voglia di imparare ad utilizzare le macro, basta fare una ricerca con google, non ti rimane che aspettare che Ninai tiri fuori una soluzione con formule dal suo cilndro magico.

    Che significa "il mio excel è base" ?



  • di archbrunetti (utente non iscritto) data: 25/09/2014 17:51:22

    Che non so usare le macro ed i moduli ad esempio.. non è questione di non voler imparare o di attendere il cilindro, ho trovato anche su internet la macro che fa quello che mi serve, ho cercato anche di imparare le macro da solo su internet ma non ci sono riuscito... tutto qua



  • di lepat (utente non iscritto) data: 25/09/2014 18:12:23

    allega i tuo foglio e te lo restituiamo funzionante



  • di archbrunetti data: 26/09/2014 13:25:44

    Semplice: colonna A numeri con 2 cifre dopo la virgola, in colonna B vorrei che comparisse il numero in lettere (ad esempio A1=12.13, in B1 vorrei che in automatico comparisse "dodicivirgolatredici")..