Serie con lettere



  • Serie con lettere
    di bcgeppo data: 07/03/2014 13:07:01

    Ciao a tutti e buon Venerdi, volevo chiedere se è possibile fare una serie con le lettere anziche con i numeri o se fosse possibile associare una lettera ad un numero in modo da creare prima la serie in numeri e poi convertirla in lettere.
    Grazie



  • di scossa data: 07/03/2014 13:12:42

    Ciao,

    potresti fare alcuni esempi che chiariscano la tua richiesta?



  • di accordix (utente non iscritto) data: 07/03/2014 14:20:38

    trovato in rete qualche tempo fa e funge na meraviglia
     
    Function NumeroInLettere(Numero)
       If Numero = 0 Then Exit Function
       Dim Frazione1, Frazione2, Frazione3, Esp As Integer
       Dim InLettere As String
       Dim Temp As Double
       Static Cifra(28) As String
       Cifra(1) = ""
       Cifra(2) = "uno"
       Cifra(3) = "due"
       Cifra(4) = "tre"
       Cifra(5) = "quattro"
       Cifra(6) = "cinque"
       Cifra(7) = "sei"
       Cifra(8) = "sette"
       Cifra(9) = "otto"
       Cifra(10) = "nove"
       Cifra(11) = "dieci"
       Cifra(12) = "undici"
       Cifra(13) = "dodici"
       Cifra(14) = "tredici"
       Cifra(15) = "quattordici"
       Cifra(16) = "quindici"
       Cifra(17) = "sedici"
       Cifra(18) = "diciassette"
       Cifra(19) = "diciotto"
       Cifra(20) = "diciannove"
       Cifra(21) = "venti"
       Cifra(22) = "trenta"
       Cifra(23) = "quaranta"
       Cifra(24) = "cinquanta"
       Cifra(25) = "sessanta"
       Cifra(26) = "settanta"
       Cifra(27) = "ottanta"
       Cifra(28) = "novanta"
    
    For Esp = 3 To 0 Step -1
        Temp = Numero / 1000 ^ Esp
        Frazione1 = Int(Temp)
        If Frazione1 > 0 Then
            Frazione2 = Frazione1
            If Frazione2 > 99 Then
                Temp = Frazione2 / 100
                Frazione3 = Int(Temp)
                Frazione2 = Frazione2 - Frazione3 * 100
                If Frazione3 = 1 Then
                    InLettere = InLettere + "cento"
                Else
                    InLettere = InLettere + Cifra(Frazione3 + 1) + "cento"
                End If
            End If
            If Frazione2 <= 20 Then
                InLettere = InLettere + Cifra(Frazione2 + 1)
            Else
                Temp = Frazione2 / 10
                Frazione3 = Int(Temp)
                InLettere = InLettere + Cifra(Frazione3 + 19)
                Frazione2 = Frazione2 - Frazione3 * 10
                If Frazione2 = 1 Or Frazione2 = 8 Then
                    InLettere = Left(InLettere, Len(InLettere) - 1)
                End If
                InLettere = InLettere + Cifra(Frazione2 + 1)
            End If
            Select Case Esp
                Case 1
                    If Frazione1 = 1 Then
                        InLettere = Left(InLettere, Len(InLettere) - 3) + "mille"
                    Else
                        InLettere = InLettere + "mila"
                    End If
                Case 2
                    If Frazione1 = 1 Then
                        InLettere = Left(InLettere, Len(InLettere) - 3) + "unmilione"
                    Else
                        InLettere = InLettere + "milioni"
                    End If
                Case 3
                    If Frazione1 = 1 Then
                        InLettere = "unmiliardo"
                    Else
                        InLettere = InLettere + "miliardi"
                    End If
                End Select
                Numero = Numero - Frazione1 * 1000 ^ Esp
            End If
        Next
        NumeroInLettere = InLettere
    End Function
    



  • di Vecchio Frac data: 07/03/2014 22:06:39

    Ah, una ennesima versione di Num2Let... ma siamo sicuri che fosse questa la richiesta di bcgeppo? ^_^

    p.s. io tanto tempo fa ho realizzato - al contrario - una decente (migliorabile, ma funzionante) versione di Let2Num per convertire ad esempio "settecentotredicimiladuecentouno" in qualcosa come "713.201"... funzione inutile cioè di nessuna utilità pratica, ma piuttosto divertente ^_^





  • di bcgeppo data: 08/03/2014 05:00:54

    Ciao a tutti, non riesco a capire come far funzionare il codice postato da accordix, ma se è come credo di aver capito non era questo quello che intendevo, era semplicemente una serie di lettere, faccio un es:
    A1=A
    A2=B
    A3=C
    ecc.ecc.
    se dovessi scrivere su cento righe esiste un modo per riempire in serie automaticamanete?
    inoltre per dare una smussata alla mia ignoranza qualcuno sarebbe cosi gentile da spiegarmi come funziona il codice postato da accordix.
    Buona giornata



  • di scossa data: 08/03/2014 09:22:54

    Qualcosa del genere:
    in A1 (o dove vuoi cominciare la serie)::
    =SOSTITUISCI(INDIRIZZO(1;RIF.RIGA();4);1;"")

    da incollare a piacere nelle celle sotto.



  • di bcgeppo data: 08/03/2014 13:12:09

    Risolto
    Grazie Mille



  • di Vecchio Frac data: 08/03/2014 13:39:44

    cit. "come funziona il codice postato da accordix"
    ---> In breve il codice serve a trasformare un numero in lettere (come quando si compila un assegno o un bollettino postale). Basicamente, legge un numero scindendolo nelle sue potenze di dieci e trasforma ogni potenza nel valore letterale corrispondente esaminando casi particolari per accordarsi alle regole della lingua italiana in tema di traduzione di un numero in lettere.
    Ci sono altri algoritmi più o meno brevi, più o meno efficienti, per fare la stessa cosa, ed è un ottimo esercizio secondo me ^_^





  • di accordix (utente non iscritto) data: 08/03/2014 15:53:22

    avevo capito male?

    vabbuo
    cmq puo servire lo stesso ehehehehe



  • di bcgeppo data: 11/03/2014 06:37:03

    scusate, avevo capito cosa faceva questo codice, ma, quello che ancora non ho capito è come si attiva, leggendo qua e là nel forum spesso vedo codice che non è una macro (che comincia per sub) e non riesco a mettere a fuoco la differenza e soprattutto come si applica.
    Buona giornata



  • di Raffaele_53 (utente non iscritto) data: 11/03/2014 16:05:53

    Private Sub o Sub è una macro con un'altri nomi
    Function è una funzione (tipo =somma, =se ecc ecc)

    Incollando il codice in un modulo
    Scrivi una cifra in A1 e in B1 metti =NumeroInLettere(A1)



  • di bcgeppo data: 12/03/2014 06:26:48

    o capito, però ho provato a copiare il codice di accordix in un modulo ma non succede niente, dove sbaglio?
    Grazie ciao



  • di bcgeppo data: 12/03/2014 06:32:04

    come non detto, sbagliavo solo a scrivere, ora funziona ed ho capito (almeno credo), incredibile la potenza di sto gioco!
    Grazie e scusate se ho rotto un pochino.
    Ciao ragazzi buona giornata