Risultati da 1 a 7 di 7

Discussione: Formato variabile CURRENCY con .. 3 decimali



  1. #1
    L'avatar di GioPL
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Varsavia
    Età
    42
    Messaggi
    68
    Versione Office
    Excell 2007
    Likes ricevuti
    0
    Likes dati
    23

    Cool Formato variabile CURRENCY con .. 3 decimali

    Buon giorno a tutti ( o buona sera dipende da quando uno legge...)
    Ho incontrato un problemino con la variabile CURRENCY.
    Da un foglio leggo dei dati che vengono poi elaborati e divisi nel foglio che vi ho allegato.
    La casella E11 contiene il dato 460,758. Essendo la casella formattata come valuta in euro, viene visualizzato il valore 460,76.

    Durante l'elaborazione dei dati, pur avendo definito le variabili come CURRENCY, prendono il valore "reale" con 3 decimali quando viene letta questa casella.
    Ma la variabile CURRENCY non dovrebbe proprio eliminare il problema dei valori con piu' di 2 decimali?

    La somma finale dovrebbe essere un valore in euro con due decimali ma mi ritrovo un risultato con 3 decimali. Ho provato in diversi modi ( con format(....)) ma mi ritrovo sempre tre decimale alla fine. Il punto nella macro dove viene letto il valore con 3 decimali l'ho segnato con due righe '**********
    Il valore con tre decimali viene letto quando X=11.

    Sto battendo la testa contro una porta semiaperta o e' in effetti un problema che necessita' di piu'...impegno?

    PS. Conoscendovi un po' so che vorreste stravolgermi il progetto....se potete modificate solamente quello che serve relativamente al problema sopra descritto altrimento devo fare nottate per risistemare il tutto.....Grazie a tutti e (vista l'ora) buona notte!

    Codice: 
    Option Explicit
    Public Color As Boolean
    Sub Sumaxclient2()    'somma valori per ogni singolo cliente
    Dim sh2 As Worksheet: Set sh2 = Worksheets("FNP")
    Dim Tot As Currency, Sc As Currency, Tot2 As Currency, Sc2 As Currency
    Dim X As Long, Y As Long, Qt As Long, Ur As Long, Xz As Long
    
    Application.ScreenUpdating = False
    Ur = sh2.Range("B" & Rows.Count).End(xlUp).Row 'determino lunghezza tabella
        ' Ripulisco tabella del colore di sfondo
        sh2.Range(sh2.Cells(4, 2), sh2.Cells(Ur, 8)).Interior.ColorIndex = xlNone
    
        sh2.Range("H4:H" & Ur).ClearContents 'pulizia colonna H totale per cliente
        sh2.Rows(Ur + 1 & ":" & Ur + 10).Delete ' cancello righe sotto la tabella
        sh2.Sort.SortFields.CLEAR
        sh2.Sort.SortFields.Add Key:=Range("C4:C" & Ur), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        sh2.Sort.SortFields.Add Key:=Range("G4:G" & Ur), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With sh2.Sort
            .SetRange Range("B3:H" & Ur)
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        ' calcolo parziale per cliente
        For X = 4 To Ur
            Tot = 0
            Sc = 0
            Qt = Application.WorksheetFunction.CountIf(sh2.Range("C:C"), sh2.Cells(X, 3).Value)
            If Qt = 1 Then
                sh2.Cells(X, 8) = sh2.Cells(X, 5)
                
     '**** PUNTO CRITICO CON X=11 LEGGE VALORE CON 3 DECIMALI E TOT2 ANCHE SE "CURRENCY"
     '***** HA 3 DECIMALI CHE ALLA FINE VENGONO RIPORTATI COME SOMMA FINALE.
                
                Tot2 = Tot2 + sh2.Cells(X, 5)
                Sc2 = Sc2 + sh2.Cells(X, 7)
                If Color = False Then
                    Color = True
                Else
                    sh2.Range(sh2.Cells(X, 2), sh2.Cells(X, 8)).Interior.ColorIndex = 15
                    Color = False
                End If
            Else
                Xz = X
                For Y = 1 To Qt
                    Tot = Tot + sh2.Range("E" & X).Value
                    Sc = Sc + sh2.Range("G" & X).Value
                    X = X + 1
                Next Y
                sh2.Range("H" & X - 1) = Tot - Sc
                Tot2 = Tot2 + Tot
                Sc2 = Sc2 + Sc
                If Color = False Then
                    Color = True
                    X = X - 1
                Else
                ' coloro range in grigio
                    sh2.Range(sh2.Cells(Xz, 2), sh2.Cells(X - 1, 8)).Interior.ColorIndex = 15
                    Color = False
                    X = X - 1
                End If
            End If
    Next X
        Tot = Tot2 - Sc2
        sh2.Cells(Ur + 2, 7) = "TOTAL "
        sh2.Cells(Ur + 2, 8) = Tot & "  EUR"
        'Coloro riga del TOT e font BOLD
        Range(Cells(Ur + 2, 2), Cells(Ur + 2, 8)).Select
        'GIALLO 'pasek ziólt plus bold text
    ' SET font Arial Narrow su tutta la tabella
        Range(Cells(4, 2), Cells(Ur, 8)).Select
            With Selection.Font
            .Name = "Arial Narrow"
            .Size = 10
            .Strikethrough = False
            .Superscript = False
            .Subscript = False
            .OutlineFont = False
            .Shadow = False
            .Underline = xlUnderlineStyleNone
            .ThemeColor = xlThemeColorLight1
            .TintAndShade = 0
            .ThemeFont = xlThemeFontNone
        End With
        Selection.Font.Bold = True
        Selection.Font.Bold = False
    ' SET valuta EURO colonna tot EUR
        Range(Cells(4, 5), Cells(Ur, 5)).Select
        Selection.NumberFormat = _
            "_-[$€-2] * #,##0.00_ ;_-[$€-2] * -#,##0.00 ;_-[$€-2] * ""-""??_ ;_-@_ "
    'SET allineamento a dx data ISSUE
        Range(Cells(4, 6), Cells(Ur, 6)).Select
        With Selection
            .HorizontalAlignment = xlRight
            .VerticalAlignment = xlBottom
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
    'SET value EUR credit EUR and tot clients
        Range(Cells(4, 7), Cells(Ur, 8)).Select
        Selection.NumberFormat = _
            "_-[$€-2] * #,##0.00_ ;_-[$€-2] * -#,##0.00 ;_-[$€-2] * ""-""??_ ;_-@_ "
    'SET
    'SET
       Set sh2 = Nothing
    Application.ScreenUpdating = True
    End Sub
    File Allegati File Allegati

  2. #2
    L'avatar di rollis13
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Cordenons
    Messaggi
    654
    Versione Office
    2010 64bit
    Likes ricevuti
    106
    Likes dati
    38

    Re: Formato variabile CURRENCY con .. 3 decimali

    Forse ti basta cambiare questa riga:
    Codice: 
    Da:
       Tot = Tot2 - Sc2
    A:
       Tot = Format(Tot2, "#,##0.00") - Sc2
    Al limite fa la stessa cosa più a monte, dipende come devi fare i calcolo, ovvero, arrotondati fin da subito ad ogni voce o solo nel totale.

  3. I seguenti utenti hanno dato un "Like"


  4. #3

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    980
    Versione Office
    .
    Likes ricevuti
    322
    Likes dati
    0

    Re: Formato variabile CURRENCY con .. 3 decimali

    Ciao,

    ma avete ben presente, vero, che la funzione Format() restituisce una stringa?
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  5. #4
    L'avatar di rollis13
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Cordenons
    Messaggi
    654
    Versione Office
    2010 64bit
    Likes ricevuti
    106
    Likes dati
    38

    Re: Formato variabile CURRENCY con .. 3 decimali

    In questo caso è solo il totale finale e l'unica sua utilità è essere visualizzato con tanto di EUR scritto a fianco.

  6. #5
    L'avatar di Powerwin
    Clicca e Apri
    Data Registrazione
    Mar 2016
    Località
    Milano
    Messaggi
    899
    Versione Office
    2016 - 2010
    Likes ricevuti
    142
    Likes dati
    51

    Re: Formato variabile CURRENCY con .. 3 decimali

    Ciao GioPl prova questo da porre dove occorre nel tuo codice

    Codice: 
    Tot = NumberFormat(Tot + sh2.Range("E" & X).Value, "$#,##0.00")
    Flavio


  7. I seguenti utenti hanno dato un "Like"


  8. #6
    L'avatar di GioPL
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Varsavia
    Età
    42
    Messaggi
    68
    Versione Office
    Excell 2007
    Likes ricevuti
    0
    Likes dati
    23

    Re: Formato variabile CURRENCY con .. 3 decimali

    Giuste osservazioni.
    Come dice SCOSSA format mi da una stringa che pero, se il fine e' solamente quello di visualizzare il valore, mi sta anche bene.
    Essendo pero dei calcoli in valuta, ogni valore dovrebbe gia' essere "depurato" e "arrotondato" a due decimali.
    Sto quindi pensando prima di fare le somme, di elaborare tutta la colonna E, G e H in maniera da avere nelle caselle dei valori a due decimali.
    Con le formule c'e' la possibilita di arrotondamento ma in VBA non l'ho mai utilizzata. Proposte?
    Grazie a tutti per l'aiuto.

  9. #7

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    980
    Versione Office
    .
    Likes ricevuti
    322
    Likes dati
    0

    Re: Formato variabile CURRENCY con .. 3 decimali

    Citazione Originariamente Scritto da rollis13 Visualizza Messaggio
    In questo caso è solo il totale finale e l'unica sua utilità è essere visualizzato con tanto di EUR scritto a fianco.
    Vorrei chiarire una cosa: come già detto la funzione Format() restituisce una stringa; ora con
    Tot = Format(Tot2, "#,##0.00") - Sc2
    prendi un valore numrico (Tot2), lo converti in stringa formattata, che viene riconvertita dal VBA (conversione implicita) in valore numerico per eseguire la sottrazione di Sc2 (per cui Tot sarà comunque un valore numerico) ....

    Attenzione quindi a non confondere la funzione Format() con la proprietà NumberFormat, che si limita solo a formattare la rappresentazione del valore senza alterare il valore stesso.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

Discussioni Simili

  1. Risposte: 2
    Ultimo Messaggio: 13/01/17, 15:25
  2. Prodotto con decimali
    Di Sergio nel forum Domande su Excel in generale
    Risposte: 3
    Ultimo Messaggio: 16/08/16, 20:12
  3. Variabile SINGLE: risulato con soli due decimali....
    Di GioPL nel forum Domande su Excel VBA e MACRO
    Risposte: 9
    Ultimo Messaggio: 12/08/16, 17:32
  4. Trasformare il formato cella da formato data a formato normale
    Di para siempre nel forum Domande su Excel in generale
    Risposte: 13
    Ultimo Messaggio: 11/03/16, 23:23
  5. Currency Data Type
    Di Bruno nel forum Domande su Excel VBA e MACRO
    Risposte: 4
    Ultimo Messaggio: 09/01/16, 13:29

Tag per Questa Discussione

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •