Risultati da 1 a 10 di 10

Discussione: Variabile SINGLE: risulato con soli due 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 Variabile SINGLE: risulato con soli due decimali....

    Buon giorno a tutti i "forumisti"..
    Problemino del giorno: calcoli finanziario dove ci sono di mezzo gli euro con i..centesimi.
    Quindi le variabili in gioco possono essere SINGLE o DOUBLE. SINGLE va piu' che bene.
    Eseguo i calcoli di valori con al massimo due decimali dopo la virgola. La somma finale di tutti questi valori invece mi risulta con...piu' di due decimali!
    Nel file in allegato c'e' la tabella che e' il risultato di una estrazione dei dati dalla tabella madre, raggruppamento delle fatture per cliente, somma parziale per ogni cliente e SOMMA TOTALE che guarda caso mi da un risultato giusto ma con un po' di decimali di troppo!
    Sembrerebbe che nel fare la somma con variabili SINGLE....aggiunga qualche numero di troppo.
    Ho provato con NUBERFORMAT sul risultato e funziona.
    Ma vorrei sapere se gia' durante la somma dei valori e' possibile "forzare" il risultato con soli due decimali.

    Grazie in advance!

    Codice: 
    Sub Sumaxclient()
        'somma valori per ogni singolo cliente
    Dim Ur As Integer
    Dim sh2 As Worksheet
    Dim a As Single, b As Single, c As Single
    Dim Riga As Integer, Rigai As Integer
    Dim x As Integer, Y As Integer, Z As Integer
    Dim CL1 As String
    Set sh2 = Worksheets("FNP")
    
    Ur = sh2.Range("B" & Rows.Count).End(xlUp).Row 'determino lunghezza tabella
    Riga = 4
    CL1 = sh2.Cells(Riga, 3) ' nome cliente da confrontare.
    a = sh2.Cells(Riga, 5)  ' carico primo valore TOT LORDO
    b = sh2.Cells(Riga, 7)  ' carico primo valore CREDIT EUR
    c = 0 ' resetto valore totale
    Z = 1   'segnale per grigiare i dati, un cliente grigito il successivo no.
    Rigai = Riga    'settaggio riga inizio per grigiatura
    For x = 1 To Ur - 3 '-3 perche le prime tre righe non sono dati
     For Y = 1 To 999
        If sh2.Cells(Riga + 1, 3) = CL1 Then 'confronto con successivo.
        a = a + sh2.Cells(Riga + 1, 5)
        b = b + sh2.Cells(Riga + 1, 7)
        Riga = Riga + 1
        x = x + 1 'forzo il loop +1 in quanto cliente con piu' di una linea
        Else
        Y = 999 ' forzo chiusura ciclo : nuovo cliente
           End If
     Next Y
        'scrittura risultato in tabella risultato
        
        sh2.Cells(Riga, 8) = a - b
        sh2.Cells(Riga, 8).NumberFormat = "0.00"
        ' CALCOLO VALORE TOTALE
        c = c + a - b
        'controllo grigiatura dati
        If Z = 1 Then 'se z=1 grigiamo i dati del cliente appena trattato
        'Range(Rigai & 2, Riga & 12).Select
        Range(Cells(Rigai, 2), Cells(Riga, 8)).Select
        'rigagrigia ' macro grigiatura dati
        Z = 0 'il prossimo cliente non sara'grigiato
        Else
        Z = 1 ' il prossimo cliente sara grigiato
        End If
        
        ' Setup per la prossima comparazione
        Riga = Riga + 1
        Rigai = Riga
        a = sh2.Cells(Riga, 5)  ' carico primo valore VAL1 da sommare nuovo cliente
        b = sh2.Cells(Riga, 7)  ' carico primo valore VAL2 da sommare nuovo cliente
        'c = sh2.Cells(Riga, 10)  ' carico primo valore VAL2 da sommare nuovo cliente
        CL1 = sh2.Cells(Riga, 3) 'set successivo cliente da controllare
        
    Next x
    ' Il totale e lo scrivo nell
    ' due righe dopo la tabella in basso.
        'sh2.Cells(Riga + 2, 7) = " TOTAL  " & c
         sh2.Cells(Riga + 2, 7) = c
         sh2.Cells(Riga + 2, 7).NumberFormat = "0.00"
        Range(Cells(Riga + 2, 2), Cells(Riga + 2, 8)).Select
        'GIALLO 'pasek ziólt plus bold text
    'Riga + 2
    
    End Sub
    File Allegati File Allegati

  2. #2

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Cosenza
    Età
    45
    Messaggi
    2801
    Versione Office
    Excel 2013
    Likes ricevuti
    1019
    Likes dati
    977

    Re: Variabile SINGLE: risulato con soli due decimali....

    Dichiara le variabili come Currency anzichè Single

  3. I seguenti utenti hanno dato un "Like"


  4. #3
    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: Variabile SINGLE: risulato con soli due decimali....

    ...c'e' sempre da imparare !!
    GRAZIE.

  5. #4

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Cosenza
    Età
    45
    Messaggi
    2801
    Versione Office
    Excel 2013
    Likes ricevuti
    1019
    Likes dati
    977

    Re: Variabile SINGLE: risulato con soli due decimali....

    Piccola tabella riassuntiva delle variabili:
    A
    B
    C
    1
    Tipi di dati
    Descrizione
    Dati rappresentati
    2
    Boolean Memorizza valori dell'Algebra di Boole True oppure False
    3
    Byte Memorizza valori naturali intervallo di valori compresi tra 0 e 255
    4
    Currency Memorizza valori monetari compresi 4 cifre decimali Intervallo compreso tra -922... a +922...
    5
    Date Memorizza informazioni circa data e orario compreso Dal 1 gennaio 100 al 31 dicembre 9999
    6
    Double Memorizza valori decimali a precisione doppia Intervallo numeri negativi da -1,797679E308 a -4,94065E-324 Intervallo numeri positivi da da 4,04065E-324 A 1,79679E308
    7
    Integer Valori naturali con segno Intervallo -32.768 a + 32.767
    8
    Long Valori naturali con segno Intervallo -2.147.... a + 2.147....
    9
    Object Memorizza un riferimento all'oggetto Dipende dalla natura dell'oggetto
    10
    Single Valori decimali a singola precisione Intervallo numeri negativi:da -3,4028... a -1,4012…
    Intervallo numeri positivi da 1,4012... a 3,4028…
    11
    String Memorizza stringhe alfnumeriche Memorizza qualsiasi stringa di caratteri
    12
    Variant (*) Memorizza qualsiasi tipo Il dato rappresentato dipende dal tipo rappresentato.

  6. I seguenti utenti hanno dato un "Like"


  7. #5

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Cosenza
    Età
    45
    Messaggi
    2801
    Versione Office
    Excel 2013
    Likes ricevuti
    1019
    Likes dati
    977

    Re: Variabile SINGLE: risulato con soli due decimali....

    P.S. Questo ciclo non è molto corretto:
    Codice: 
        For Y = 1 To 999
            If sh2.Cells(Riga + 1, 3) = CL1 Then 'confronto con successivo.
                a = a + sh2.Cells(Riga + 1, 5)
                b = b + sh2.Cells(Riga + 1, 7)
                Riga = Riga + 1
                x = x + 1 'forzo il loop +1 in quanto cliente con piu' di una linea
            Else
                Y = 999 ' forzo chiusura ciclo : nuovo cliente
            End If
        Next Y
    meglio questo:
    Codice: 
        Do While sh2.Cells(Riga + 1, 3) = CL1
                a = a + sh2.Cells(Riga + 1, 5)
                b = b + sh2.Cells(Riga + 1, 7)
                Riga = Riga + 1
                x = x + 1
        Loop

  8. I seguenti utenti hanno dato un "Like"


  9. #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: Variabile SINGLE: risulato con soli due decimali....

    Tabella riassuntiva stampata e appesa davanti a me!

    Per quanto riguarda il ciclo..beh il tuo e' molto piu'...elegante. Il mio era un accrocchio delle misere conoscenze che ho.
    Grazie ancora.

  10. #7
    L'avatar di Raffaele_53
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Binasco
    Età
    64
    Messaggi
    506
    Versione Office
    2007
    Likes ricevuti
    85
    Likes dati
    7

    Re: Variabile SINGLE: risulato con soli due decimali....

    Ciao a tutti
    Faccio notare che in cella C4 c'è spazio1R
    Siccome non mi piace "quel For Y = 1 To 999"
    Allego il codice che toglie il colore, ordina la tabella,fà i totali per ogni cliente e colora le righe.

    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
        sh2.Range(sh2.Cells(4, 2), sh2.Cells(Ur, 8)).Interior.ColorIndex = xlNone
        With sh2.Range("B4:H" & Ur).Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With sh2.Range("B4:H" & Ur).Borders(xlEdgeTop)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With sh2.Range("B4:H" & Ur).Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With sh2.Range("B4:H" & Ur).Borders(xlEdgeRight)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With sh2.Range("B4:H" & Ur).Borders(xlInsideVertical)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With sh2.Range("B4:H" & Ur).Borders(xlInsideHorizontal)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        sh2.Range("H4:H" & Ur).ClearContents
        sh2.Rows(Ur + 1 & ":" & Ur + 10).Delete
        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
        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)
                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
                    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
        sh2.Cells(Ur + 2, 5) = "TOTAL  " & Tot2
        sh2.Cells(Ur + 2, 7) = "Accont  " & Sc2
        sh2.Range(sh2.Cells(Ur + 2, 2), sh2.Cells(Ur + 2, 8)).Interior.ColorIndex = 6
    Set sh2 = Nothing
    Application.ScreenUpdating = True
    MsgBox "fatto"
    End Sub

  11. I seguenti utenti hanno dato un "Like"


  12. #8
    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: Variabile SINGLE: risulato con soli due decimali....

    Raffaele_53...se spari queste "bordate" alla sera...non mi fai dormire!
    Domattina me la studio e guardo l'effetto che genera.

    La macro che ho inserito e' solo un pezzo di tutto il programma. Infatti prima vengono estratti dalla tabella "madre" i dati richiesti, poi vengono ordinati per nome cliente, quindi vengono calcolati i totali per ogni singolo cliente e alla fine coloro di grigio un cliente si e uno no.

    Prometto pero' che domani controllo il tuo lavoro e ti faccio sapere.
    Buona notte.

  13. #9
    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: Variabile SINGLE: risulato con soli due decimali....

    Ok, me lo sono studiato pezzo per pezzo. Non dico di aver capito tutto ma..molto.
    Io avevo suddiviso il tutto con singole MACRO (scritte secondo le attuali mie conoscenza....).
    Lo implemento nel file originale e..voila', passo al prossimo progetto.
    Grazie per gli le istruzioni, mi serviranno anche in futuro e non vi rompero' molto le scatole.

    Alla prossima.

  14. #10
    L'avatar di Raffaele_53
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Binasco
    Età
    64
    Messaggi
    506
    Versione Office
    2007
    Likes ricevuti
    85
    Likes dati
    7

    Re: Variabile SINGLE: risulato con soli due decimali....

    In teoria, per far eseguire il for y = 1 to 999
    Avevo bisogno che il DB fosse ordinato, il codice che avrei dovuto solo scrivere inizia da For X = 4 To Ur (ultimo post)
    Ps

Discussioni Simili

  1. Ristringere una tabella ai soli dati utili
    Di Alessandro nel forum Domande su Excel in generale
    Risposte: 1
    Ultimo Messaggio: 05/12/16, 15:41
  2. Formato variabile CURRENCY con .. 3 decimali
    Di GioPL nel forum Domande su Excel VBA e MACRO
    Risposte: 6
    Ultimo Messaggio: 28/09/16, 10:14
  3. Prodotto con decimali
    Di Sergio nel forum Domande su Excel in generale
    Risposte: 3
    Ultimo Messaggio: 16/08/16, 22:12
  4. Data progressiva per soli giorni feriali
    Di maverick69net nel forum Domande su Excel in generale
    Risposte: 2
    Ultimo Messaggio: 11/07/16, 11:15
  5. Selezione celle con soli valori.....a volte !
    Di GioPL nel forum Domande su Excel VBA e MACRO
    Risposte: 9
    Ultimo Messaggio: 18/06/16, 14:16

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
  •