Discussione chiusa
Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Campo in un report che trasforma lettere in numeri con decimale /00

  1. #1
    sagrimal non è in linea Novello
    Post
    43

    Campo in un report che trasforma lettere in numeri con decimale /00

    Salve, ho trovato su questo forum una funzione che rtasforma una stringa di caratteri in numeri,

    solo che, es. il numero 15444,44 lo trasforma in quindicimilaquattrocentoquarantaquattro/
    il numero 1150,00 in millecentocinquanta/00

    non mi indica i decimali dopo il simbolo /

    di seguito la funzione che ho applicato al campo della query LETTERE: NumeriPerLettere([IMPMO])
    dove IMPMO è il campo che contiene il numero da trasformare in lettere
    Vi ringrazio anticipatamente
    Salvatore


    codice:
    Function NumeriPerLettere(Valore) As String
    
    Valore = Replace(Valore, ". ", "")
    
    Dim Sez()
    
    Unita = ""
    Decine = ""
    Centinaia = ""
    Uni = ""
    Dec = ""
    Cent = ""
    Sezioni = ""
    NoUnits = 0
    
    'Ritorna se vi è la virgola
    numInt = InStr(Valore, ",")
    numDecim = Len(Valore) - InStr(Valore, ",") 'Controlla il numero dei decimali dopo la virgola
    
    'Controlla se il numero è privo di virgola
    If numInt = 0 Then
    Valore = Left(Valore, Len(Valore))
    
    'Mette come decimali due zeri
    decimali = "00"
    
    ElseIf numDecim = 1 Then 'Se c'è un solo decimale dopo la virgola gli aggiunge uno zero
    Valore = Left(Valore, Len(Valore) - Len(Mid(Valore, (InStr(Valore, ",")))))
    decimali = Right(valoreint, 1) & "0"
    Else
    Valore = Left(Valore, Len(Valore) - Len(Mid(Valore, (InStr(Valore, ",")))))
    
    'Mi restituisce i due decimali alla destra della virgola
    decimali = Right(valoreint, 2)
    End If
    
    Cifre = Len(Valore)
    
    Stringa = ""
    
    P = 0
        
    For Posizione = 1 To Cifre
        P = P + 1
        Stringa = Mid(Valore, Cifre - (Posizione - 1), 1) & Stringa
        If P = 3 Then
            Stringa = "\" & Stringa: P = 0
        End If
    Next
    
    If Left(Stringa, 1) = "\" Then Stringa = Mid(Stringa, 2, Len(Stringa))
    
    Sezioni = Empty
    Sezioni = Split(Stringa, "\")
    
    Nsez = UBound(Sezioni) + 1
    
    Erase Sez()
    ReDim Sez(Nsez)
    
    For S = 0 To Nsez - 1
    
        If Len(Sezioni(S)) < 3 Then Sezioni(S) = String(3 - Len(Sezioni(S)), "0") & Sezioni(S)
        
        If Len(Sezioni(S)) = 3 Then
            Centinaia = Mid(Sezioni(S), 1, 1)
            
            Select Case Centinaia
            
            Case "0"
                Cent = ""
            Case "1"
                Cent = "cento"
            Case Else
                Cent = Converti(Centinaia) & "cento"
            End Select
           
            Decine = Mid(Sezioni(S), 2, 1)
            
            Select Case Decine
            
                Case "0"
                    Dec = ""
                    NoUnits = 0
                
                Case "1"
                    Dec = Converti(Decine & Mid(Sezioni(S), 3, 1))
                    NoUnits = 1
                    Unita = ""
                
                Case Else
                    Dec = Converti(Decine & "0")
                    NoUnits = 0
                
            End Select
                         
            If NoUnits <> 1 Then
                Unita = Mid(Sezioni(S), 3, 1)
                Uni = Converti(Unita)
                If (Unita = "1" Or Unita = "8") And Dec <> "" Then Dec = Mid(Dec, 1, Len(Dec) - 1)
            End If
        End If
        
        Sez(S) = Cent & Dec & Uni
        Cent = "": Dec = "": Uni = ""
    
    Next
    
    Finale = ""
    
    For X = 0 To Nsez - 1
    
        Select Case Nsez - (X + 1)
        
            Case 0
                interp = ""
            
            Case 1
                If Sez(X) = "uno" Then
                    Sez(X) = ""
                    interp = "mille"
                Else
                    interp = "mila"
                End If
                
            Case 2
                If Sez(X) = "uno" Then
                    Sez(X) = "un"
                    interp = "milione"
                Else
                    interp = "milioni"
                End If
                
            Case 3
                If Sez(X) = "uno" Then
                    Sez(X) = "un"
                    interp = "miliardo"
                Else
                    interp = "miliardi"
                End If
        
        End Select
        
        Finale = Finale & Sez(X) & interp
    
    Next
    
    NumeriPerLettere = Finale & "/" & decimali
    
    End Function
    
    
    Function Converti(Numero)
    
    If Numero = "1" Then Stringa = "uno"
    If Numero = "2" Then Stringa = "due"
    If Numero = "3" Then Stringa = "tre"
    If Numero = "4" Then Stringa = "quattro"
    If Numero = "5" Then Stringa = "cinque"
    If Numero = "6" Then Stringa = "sei"
    If Numero = "7" Then Stringa = "sette"
    If Numero = "8" Then Stringa = "otto"
    If Numero = "9" Then Stringa = "nove"
    If Numero = "10" Then Stringa = "dieci"
    If Numero = "11" Then Stringa = "undici"
    If Numero = "12" Then Stringa = "dodici"
    If Numero = "13" Then Stringa = "tredici"
    If Numero = "14" Then Stringa = "quattordici"
    If Numero = "15" Then Stringa = "quindici"
    If Numero = "16" Then Stringa = "sedici"
    If Numero = "17" Then Stringa = "diciassette"
    If Numero = "18" Then Stringa = "diciotto"
    If Numero = "19" Then Stringa = "diciannove"
    If Numero = "20" Then Stringa = "venti"
    
    If Numero = "30" Then Stringa = "trenta"
    If Numero = "40" Then Stringa = "quaranta"
    If Numero = "50" Then Stringa = "cinquanta"
    If Numero = "60" Then Stringa = "sessanta"
    If Numero = "70" Then Stringa = "settanta"
    If Numero = "80" Then Stringa = "ottanta"
    If Numero = "90" Then Stringa = "novanta"
    If Numero = "100" Then Stringa = "cento"
    
    Converti = Stringa
    
    End Function
    Ultima modifica di AntonioG; 13-03-2019 12:42  Motivo: Usa i tag CODE per il codice !

  2. #2
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,225
    Blogs
    5
    Il valore prevede i decimali dopo la ,

    Usi la virgola o il punto nei tuo campo?
    Poi quel codice non è l'originale ma pare modificato e in maniera sbagliata
    Ad esempio cosa è ValoreInt ???
    Ultima modifica di AntonioG; 13-03-2019 16:54 
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  3. #3
    sagrimal non è in linea Novello
    Post
    43

    Campo in un report che rtasforma lettere in numeri con decimale /00

    Ciao Antonio G
    Grazie innanzitutto per avermi risposto.
    nel campo numerico per i decimali uso la virgola cioè il numero è dormattato su standard
    es. 2.014,96

    Poi quel codice non è l'originale ma pare modificato e in maniera sbagliata709-IRM20-5
    Ad esempio cosa è ValoreInt ???


    Il codice come ho specificato l'ho trovato così

    modificando VALOREINT in valore ho notato che il numero 2.014,96 viene trasformnato in duemilaquattordici/14
    dopo il segno / mi mette le prime due cifre a sinistra della virgola e non a destra

  4. #4
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,045
    Semplifichiamo chiudendolo per CROSSPOST.
    Ultima modifica di @Alex; 13-03-2019 15:14 
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

Discussione chiusa

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi