Condividi:        

Numeri in lettere

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Numeri in lettere

Postdi enrico43 » 27/03/15 22:58

Buonasera, nel file allegato i numeri sulla colonna A1 vengono trasformati in lettere con la formula che si trova sul Foglio2, ovvero sui documenti in cui alla fine c’è una cifra (pagamenti). Usavo quella formula per la trasformazione (conoscenza del VBA = 0, adesso 0+) molti anni fa. Ma la cifra da trasformare era una sola.
Ora ho a che fare con molte cifre su una stessa colonna e mi sono intestardito ad utilizzare quella formula, nonostante con il VBA esistano ora altri metodi per la trasformazione.
Il copia-incolla della formula non credo si possa usare (meglio sarebbe se si), perciò ho fatto una macrina che scorre la colonna dei numeri ma però mi trasforma solo l’ultimo numero e perdipiù mettendolo al primo posto. Cosa manca perché trasformi tutti i numeri mettendo per ciascuno le lettere sulla stessa riga, colonna accanto ? Ovvio che se qualcuno sa come farlo senza macro sarebbe meglio.
Ringrazio per l’attenzione ed anticipatamente chi mi potrà dare la dritta.
Un saluto e un buon WE
Enrico
http://www.filedropper.com/numerolettere_1
enrico43
Utente Senior
 
Post: 208
Iscritto il: 13/09/14 15:33
Località: Fiumicino

Sponsor
 

Re: Numeri in lettere

Postdi Flash30005 » 28/03/15 00:52

Sono già state pubblicate macro e funzioni per questo quesito

ne ho adattata una per il tuo foglio
Codice: Seleziona tutto
Sub NumeriLettere()
Dim N$(100), M$(100)
Dim Num As Double
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"
 Worksheets("Foglio1").select
UR =Range("A" & Rows.Count).End(xlUp).Row
For RR = 1 To UR

Num = range("A" & RR).Value
Ndec = InStr(Num, ",")
MyDec = Format(Val(Mid(Num, Ndec + 1, 2)), "00")
If Ndec = 0 Then MyDec = "00"
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("B" & RR).Value = LLL$ & "/" & MyDec
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:
Next RR
End Sub


Da avviare con il foglio 1 attivo

ciao

P.s. questa invece è una funzione
che una volta inserita in un modulo la puoi utilizzare a mo' di formula
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Numeri in lettere

Postdi Anthony47 » 28/03/15 02:15

Immagino che tu cercassi di costruire questa macro:
Codice: Seleziona tutto
Sub Macro1()
Dim Cifra As Object
'
Set Area = Worksheets("Foglio1").range([A1], [A1].End(xlDown))
For Each Cifra In Area
    Sheets(2).range("B1") = Cifra 'qui che non so come dirgli di scendere
    Cifra.Offset(0, 1).Value = "Diconsi " & Sheets("Foglio2").range("B2")
Next
End Sub


Guarda anche la Macro suggerita da Flash (vedi sopra) e la funzione "SpellIt", anche quella gia' linkata da Flash (viewtopic.php?p=552275#p552935 e successivi)
Usa la SpellItV2.
Poi in B1 scriverai
Codice: Seleziona tutto
=SpellItV2(A1)


Come vedi nessuna soluzione "solo formule"...

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19181
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Numeri in lettere

Postdi enrico43 » 28/03/15 07:26

Avevo già visto tutti quei topic con il "cerca" ed anche utilizzate quelle macro seppur reperite in altri forum ma, come detto, mi sono intestardito a rispolverare quella formula sperando che, anche con l'aiuto dei mostri delle formule (WGromit e Ninai che saluto e ZK che però non vedo più) e senza l'uso di macro o funzioni, si potesse copiare.
Un grazie ad ambedue ed un saluto da
Enrico
enrico43
Utente Senior
 
Post: 208
Iscritto il: 13/09/14 15:33
Località: Fiumicino

Re: Numeri in lettere

Postdi Anthony47 » 28/03/15 14:51

Penando si puo' anche fare con formule, ma bisogna su ogni rigo inserire tutte le formule che servono per la conversione.
Ad esempio come fatto sul file dimostrativo: https://www.dropbox.com/s/wow31nqysjzzd ... .xlsx?dl=0

Il valore da convertire e'in colonna A; lo spelling e' fatto in colonna B, usando pero' le colonne di servizio C:N e un elenco di valori memorizzati in colonne W:AB
La formula chiave, nelle celle colorate di arancione (es F3) e'
Codice: Seleziona tutto
=SE(VALORE(C3)=1;KMl;SE(VALORE(STRINGA.ESTRAI(C3;1;1))>1;CERCA.VERT(VALORE(STRINGA.ESTRAI(C3;1;1));__Key2;2;0);"")&SE(VALORE(STRINGA.ESTRAI(C3;1;1))>0;E3;"")&SINISTRA(CERCA.VERT(C3-STRINGA.ESTRAI(C3;1;1)*100;__Key2;2);LUNGHEZZA(CERCA.VERT(C3-STRINGA.ESTRAI(C3;1;1)*100;__Key2;2))-CONTA.SE(vocali;SINISTRA(CERCA.VERT(C3-STRINGA.ESTRAI(C3;1;1)*100-CERCA.VERT(C3-STRINGA.ESTRAI(C3;1;1)*100;__Key2;1);__Key2;2);1)))&CERCA.VERT(C3-STRINGA.ESTRAI(C3;1;1)*100-CERCA.VERT(C3-STRINGA.ESTRAI(C3;1;1)*100;__Key2;1);__Key2;2)&SE(VALORE(C3)>0;D3;""))
(si ripete nei tre blocchi, elaborando i dati delle tre colonne precedenti).

E' predisposta per gestire fno a 999 milioni; posso estendere le capacita' di calcolo previo versamento di una quota pari a 1 per mille del limite da gestire.
Non gestisce (per pigrizia mia) numeri negativi.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19181
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Numeri in lettere

Postdi enrico43 » 28/03/15 22:25

Ahh, ma allora anche tu ci sai fare con le formule. Non sono arrivato alla fine neppure a decifrare la prima, quell'arancione quasi mi ipnotizzava. Dai, la mia è più elegante, la metti su un foglio che poi nascondi e nessuno capisce come esce la cifra in lettere.
Sai quante scommesse ho vinto con miei colleghi ingegneri. Però mi costò quasi una settimana per farla, era il lontano 89, Mozambico, diga di Corumana al confine con il Sud Africa. Me la portai sempre dietro, dai flopponi ai cd poi alle pennette. Mi serviva nei certificati di pagamento dove la cifra finale deve essere espressa anche in lettere.
Ciao, ti saluto e ti ringrazio. Ho usato la macrina che tu hai perfezionato, anzi, che hai fatto funzionare, per il mio lavoro.
Enrico
enrico43
Utente Senior
 
Post: 208
Iscritto il: 13/09/14 15:33
Località: Fiumicino


Torna a Applicazioni Office Windows


Topic correlati a "Numeri in lettere":


Chi c’è in linea

Visitano il forum: Nessuno e 36 ospiti