› Excel e gli applicativi Microsoft Office › Sommare solo valori che rientrano in un intervallo di tempo
-
AutoreArticoli
-
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.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 `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:F9G10 =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 (-)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.
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)

Spiegati meglio che non capisco, fai un0esemkpio pratico.
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.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 ???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.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/2031Ps. Sto provando mà sembra tosto, vedo se riesco combinare qualcosa domani.
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 `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"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.non riesco scrivere
Allegati:
You must be logged in to view attached files.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.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. -
AutoreArticoli
