Excel e gli applicativi Microsoft Office Sommare solo valori che rientrano in un intervallo di tempo

Login Registrati
Stai vedendo 16 articoli - dal 1 a 16 (di 16 totali)
  • Autore
    Articoli
  • #54314 Score: 0 | Risposta

    gianca53
    Partecipante

      Ciao, ennesimo problema . Devo sommare i dati che sono in due colonne  MA non posso farlo algebricamente in quanto devo considerare anche il fattore tempo. Ovvero trattandosi di minusvalenze acquisite dalla vendita di azioni /obbligazioni le stesse possono essere compensate solo da plusvalenze acquisite entro i 4 anni . Ho tentato con questa macro che però non funziona  bene oppure fa  casino con il segno negativo .   allego il file e immagine concettuale esemplificativa 

      `Option Explicit
      Sub CalculateProjectDuration()
      
          Dim startDate As Date
          Dim endDate As Date
          Dim Sh1 As Worksheet
          Dim Sh2 As Worksheet
      
      
          Set Sh1 = Sheets("Portafoglio_Titoli")
          Set Sh2 = Sheets("Resoconto")
      
          startDate = Sh2.Range("H2")
          endDate = startDate + (4 * 365)
          Debug.Print endDate
      
          Sh2.Activate
      
          Dim dati As Variant
          Dim elemento As Variant
          Dim totale As Double
      
          dati = Sh2.Range("E5:F9").Value
          totale = 0
          
      ' l'idea è di sommare in un array i soli dati che rientrano dei 4 anni considerata la data di scadenza o vendita minore .
          For Each elemento In dati
              If IsDate(elemento) < endDate Then
                  totale = totale + elemento
              End If
          Next elemento
      
          MsgBox "Il totale calcolato tramite ciclo è: " & totale
      End Sub
      
      
      `
      Allegati:
      You must be logged in to view attached files.
      #54319 Score: 0 | Risposta

      gianca53
      Partecipante

        Provato anche con le formule , però la formula funziona se l'intervallo di ricerca è una solo colonna , se metto un range tipo : E5:F9 mi da' errore .

        =SOMMA.PIÙ.SE(F5:F9;D5:D9;">=" & VALORE(H2);D5:D9;"<=" & VALORE(I2)) 

         questa funziona correttamente . 

        idem la macro sotto.  Quindi, in mancanza di altre soluzioni , dovrò modificare il foglio con rendiconto in colonna unica. 

        `Sub SommaIntervalloTempo()
            Dim Sh1 As Worksheet
            Dim Sh2 As Worksheet
            Dim dataInizio As Date
            Dim dataFine As Date
            Dim intervalloDate As Range
            Dim intervalloValori As Range
        
            ' Set Sh1 = Sheets("Portafoglio_Titoli")
            Set Sh2 = Sheets("Resoconto")
        
            Set intervalloDate = Sh2.Range("d5:d9")    ' Colonna delle Date
            Set intervalloValori = Sh2.Range("F5:F9")    ' Colonne dei Valori da sommare, se data OK
        
            dataInizio = Sh2.Range("H2")
            dataFine = Sh2.Range("i2")
        
            ' Calcolo somma condizionale (>= inizio E <= fine)
            Dim totale As Double
            
            totale = Application.WorksheetFunction.SumIfs(intervalloValori, _
                                                          intervalloDate, ">=" & CDbl(dataInizio), _
                                                          intervalloDate, "<=" & CDbl(dataFine))
        
            MsgBox "Il totale è: " & totale
        End Sub
        
        `

         

        #54320 Score: 0 | Risposta

        Raffaele53
        Partecipante
          23 pts

          1) Il SOMMA.PIÙ.SE, sul fatto che i dati siano su più colonne non produce errore

          2) Faccio fatica a capire dove mettere l'eventuale formula e quale risultato desideri
          Solo se ho interpretato bene la Tua richiesta, in base al "Plus-se rientra in certe date", desideri togliere il "Minus-sempre che rientri in certe date". In teoria sommi E5:E9 e togli F5:F9

          G10 =SOMMA.PIÙ.SE(E5:E9;D5:D9;">=" & VALORE(H2);D5:D9;"<=" & VALORE(I2))+SOMMA.PIÙ.SE(F5:F9;D5:D9;">=" & VALORE(H2);D5:D9;"<=" & VALORE(I2))

          Se questo è quello che desideravi, posso rivedere il codice
          PS Nel caso che in F5:F9 metterai solo numeri positivi devi cambiare il (+) in (-)

          #54321 Score: 0 | Risposta

          gianca53
          Partecipante

            ciao @raffaele53, si la tua interpretazione e la formula è corretta, ho visto che hai applicato il somma.se  su due colonne . 

            PS Nel caso che in F5:F9 metterai solo numeri positivi devi cambiare il (+) in (-)

             no, in F5:F9 c'e la colonna delle Minus , quindi sempre negative. 

            #54322 Score: 0 | Risposta

            gianca53
            Partecipante

              Altra complicazione : il calcolo di compensazione , riferito al tempo,  deve essere sempre eseguito sui plus SUCCESSIVI , se antecedenti non devono essere calcolati .

              Altra cosa che ho rilevato errata sono le date di StartDate e Enddate  a loro volta da associare al primo titolo con minusvalenza.  P.s Queste le ho corrette  semplicemente con la seguente formuletta : 

              =SE($X4<0;$P4;"")

               ovvero riporta la data solo se il valore di imponibile è negativo (minusvalenza)

              #54323 Score: 0 | Risposta

              Raffaele53
              Partecipante
                23 pts

                Spiegati meglio che non capisco, fai un0esemkpio pratico.

                #54324 Score: 0 | Risposta

                gianca53
                Partecipante

                  Ciao Raffaele , ti dico subito che è cosa assai complicata, ho provato a fare la sintesi qui, ma sono sicuro che ho dimenticato di chiarire qualcosa : 

                  Nota : il modello  a cui sto lavorando è limitato a soli 5 titoli ma richiede, per tutti i titoli immessi,  la data di scadenza o di vendita . E’ una sorta di modello previsionale di quello che sarà l’andamento complessivo nella detenzione di quel particolare PTF .

                  Logica della macro di controllo

                  Controllo preliminare

                  1)     Verificare se  esista Minusvalenza pregressa  -xxxx

                  2)     Alla prima vendita/scadenza  verifica se RIENTRA  (sia inferiore) alla data di validità di una minus preesistente o imposta inizialmente  

                    Poi per movimenti in Gain

                  1)     Se entro la data compensa con le minus

                  2)     Se minus esaurite o insufficienti il delta residuo della plusvalenza viene conteggiato ( x0,26%) per l’addebito  del capital gain;  aggiornare cella che riporta le minusvalenze residue  .

                  3)     Al di fuori della data di validità  si ha calcolo immediato  (x0,26) e addebito capital gain 

                   Per movimenti in Minus

                  Aggiornare cella di riepilogo delle minus e calcolare la data di validità della scadenza/vendita che l’ha generata

                   allego file sul quale ho lavorato tutto il giorno e non ho ancora provato a fondo . Se noti errori o stranezze fai sapere. Grazie 

                  Allegati:
                  You must be logged in to view attached files.
                  #54333 Score: 0 | Risposta

                  Raffaele53
                  Partecipante
                    23 pts

                    Non ci siamo, devi farmi un esempio pratico
                    Desideri calcolare la cella E10 (totale Plus), prendendo per esempio i numeri in E5:F9 ?
                    Vorresti che i "Plus 2777+299,33" siano dati reali-certi.
                    Il 03/12/2029 ti succede un "Minus -59" e pertanto vuoi detrare sui successivi "Plus - ENTRO 4 ANNI" ???
                    Ex il successivo "Plus 1032,69" dovrebbe essere calcolato 973,69 ???

                    #54339 Score: 0 | Risposta

                    gianca53
                    Partecipante

                      Ciao, più che un esempio pratico ti ho scritto come  e perchè fare una determinata operazione,  e la logica che c'è dietro . Ti allego anche mia ultima versione 11B 

                       

                      Allegati:
                      You must be logged in to view attached files.
                      #54347 Score: 0 | Risposta

                      Raffaele53
                      Partecipante
                        23 pts

                        Premesso che in P4 è scritto 15/01/2027

                        >>> intervallo di validità al 14/0!/2031 - add essere precisi srebbe al 31/12/2031
                        A parte (!), non capisco il 31/12/2031
                        Intendi,fine mese precedente di 4 anni dopo =31/12/2030
                        Oppure fine anno di 4 anni dopo (in questo caso sono quasi 5 anni) =31/12/2031

                        Ps. Sto provando mà sembra tosto, vedo se riesco combinare qualcosa domani.

                        #54349 Score: 0 | Risposta

                        gianca53
                        Partecipante

                          Ciao Raffaele, confermo che è un buon esercizio di logica , soprattutto per trovare il metodo di calcolo più corretto . 

                          Le minusvalenze possono essere recuperate nell’anno in cui si verificano e nei quattro anni successivi. Le minusvalenze scadono alla fine di ogni anno solare; pertanto il 31 Dicembre 2024 scadranno le minusvalenze maturate nel 2020. 

                           

                           Se può essere di aiuto  vedi qui da Borsa italiana :

                          https://www.borsaitaliana.it/notizie/sotto-la-lente/capitalgain.htm

                          P.s se può essere utile ( un problema in meno ): 

                          `Private Sub fineAnno()   ' da data esistente intermedia
                              Dim dataOriginale As Date
                              Dim fineAnno As Date
                              Sheets("Portafoglio_Titoli").Activate
                              dataOriginale = Range("z8").Value
                              fineAnno = DateSerial(Year(dataOriginale), 12, 31)
                          
                              ' Scrive il risultato in
                              Range("aa8").Value = fineAnno
                          End Sub
                          `
                          #54359 Score: 0 | Risposta

                          Raffaele53
                          Partecipante
                            23 pts

                            Tosto, tosto, tosto
                            Fatto e trovo un'errore
                            Rifatto e ritrovo altro errore
                            Adesso mi sembra d'essere sulla strada giusta ma ci vuole ancora tempo (errori a parte). Intanto allega un files con più record presenti, mi serve solo il foglio "Portafoglio_Titoli" con l'ultimo record della lista che sia un "Plus"

                            #54366 Score: 0 | Risposta

                            gianca53
                            Partecipante

                              Ciao, Giusto per semplificare le cose ho costruito quella che dovrebbe essere la logica corretta . 

                               Ti allego anche mia ultima versione nella quale spulciando tra i moduli trovi anche il calcolo del dataEnd a partire dalla data di scadenza o vendita . Lo trovi in fondo al modulo calcoloRC   , vedi  CalcolaDifferenzaTempo. Sulla base di quest'ultimo dovrò rivedere tutto il resto. Ps. vedi immagine aggiornata. 

                              Allegati:
                              You must be logged in to view attached files.
                              #54373 Score: 0 | Risposta

                              Raffaele53
                              Partecipante
                                23 pts

                                non riesco scrivere

                                Allegati:
                                You must be logged in to view attached files.
                                #54377 Score: 0 | Risposta

                                gianca53
                                Partecipante

                                  Ciao Raffaele. 

                                  Ho visto che ti è riuscito di semplificare molto la macro di calcolo. Ora lo provo a fondo e poi ti so dire  .

                                  Grazie 

                                   

                                  P.s  L'interpretazione più usata sembra essere : anno solare in cui si determina la Minus + 4  , per es 2020 >2024  sono 4 ma anche 5 contando l'anno solare in corso.    Sembra una barzelletta ma ... è vera.

                                  #54470 Score: 0 | Risposta

                                  gianca53
                                  Partecipante

                                    Ciao  Raffaele , chiedo a te quale realizzatore della macro principale alla quale, per completezza,  ho aggiunto un'altra pezzo che interviene prima del tuo calcolo. 

                                    Visto che ormai sei un "guru"  anche finanziario,  ti sottopongo il mio tentativo finale, per tuo commento/test. Se vuoi e se hai tempo.

                                    Grazie . gianca 

                                    Allegati:
                                    You must be logged in to view attached files.
                                  Login Registrati
                                  Stai vedendo 16 articoli - dal 1 a 16 (di 16 totali)
                                  Rispondi a: Sommare solo valori che rientrano in un intervallo di tempo
                                  Gli allegati sono permessi solo ad utenti REGISTRATI
                                  Le tue informazioni: