| | Post: 21 | Registrato il: 02/08/2022
| Età: 26 | Utente Junior | 2016 | | OFFLINE | |
|
25/03/2023 16:47 | |
Salve avrei bisogno di capire come calcolare la somma dei valori corrispondenti ad una massima sequenza di presentazione di un parametro in altra colonna, in base ad un intervallo di date specifico. Mi spiego un po' meglio. Nella prima colonna ho delle date. Nella seconda colonna ho questi 3 tipi di output: "XXX", "YYY" o "ZZZ". Nella terza colonna, invece, ho dei semplici valori corrispondenti. Devo lavorare sul parametro "YYY", a cui corrispondono esclusivamente numeri negativi, e devo trovare il massimo numero di volte consecutive in cui il suddetto parametro si presenta all'interno della seconda colonna, per fare la somma dei valori corrispondenti nella colonna affianco (la terza) e in più tutto ciò deve essere compreso nell'intervallo di date H2-J2. Perciò: una volta trovata la massima sequenza consecutiva di presentazione del parametro "YYY" all'interno dell'intervallo di date H2-J2, devo avere come risultato finale la somma dei valori scritti affianco (in terza colonna), considerando SOLO i valori compresi nella sequenza appena descritta ed escludendo completamente dal calcolo tutti gli altri. Faccio un esempio per chiarire esaurientemente la questione: ho colorato di rosso la prima sequenza di "YYY" che è di sole due righe ma anche se fosse di 10 righe (cioè la maggiore in assoluto) dovrebbe essere esclusa dal calcolo perché non rientra nell'intervallo delle date in input. Ho colorato in verde la sequenza di 5 "YYY" consecutivi, la cui somma totale dei valori corrispondenti affianco è: -181. E ho colorato in ocra l'ultima sequenza di "YYY" consecutivi, che è di 3 righe ed è all'interno dell'intervallo di date richiesto, però non è la sequenza massima. Quella massima è la seconda verde di 5 righe. Perciò la funziona deve praticamente dare come risultato: -181. Grazie in anticipo a chiunque mi sarà d'aiuto! |
|
| | Post: 3.412 | Registrato il: 06/04/2013
| Utente Master | 2010 | | OFFLINE |
|
25/03/2023 19:55 | |
ciao
e sempre che abbia capito...
Il risultato in F3
saluti
Sub YYY()
Dim lr As Long, dFrom As Long, dTo As Long, cFrom As String, fromC As String
Dim toC As String, toFind As String, j As Long, k As Integer, t As Integer, RngSum As String
lr = Range("B" & Rows.Count).End(xlUp).Row
dFrom = Range("H2")
dTo = Range("J2")
toFind = "YYY"
For j = 3 To lr
If CLng(Cells(j, 2)) >= dFrom And CLng(Cells(j, 2)) <= dTo Then
cFrom = Cells(j + 1, 4).Address
Do While Cells(j + 1, 2) >= dFrom And Cells(j + 1, 2) <= dTo And Cells(j + 1, 3) = toFind
k = k + 1
j = j + 1
If j + 1 > lr Then Exit Do
Loop
If k > 0 Then
If k > t Then
t = k
k = 0
fromC = cFrom
toC = Cells(j, 4).Address
End If
End If
End If
Next
RngSum = fromC & ":" & toC
Range("F3") = Application.WorksheetFunction.Sum(Range(RngSum))
End Sub
La prossima volta mi aspetto che tu sottoponga qualche tuo tentativo....
Domenico
Win 10 - Excel 2016 |
| | Post: 22 | Registrato il: 02/08/2022
| Età: 26 | Utente Junior | 2016 | | OFFLINE | |
|
26/03/2023 11:03 | |
@dodo47 ciao, hai ragione la prossima volta metto anche i miei tentativi iniziali...ma non capisco che vuol dire "il risultato in f3"? Devo scaricare in qualche modo un tuo file? Non lo vedo...e mi scuso se è sotto il mio naso... |
| | Post: 3.414 | Registrato il: 06/04/2013
| Utente Master | 2010 | | OFFLINE |
|
26/03/2023 11:12 | |
ciao
devi inserire la macro nel tuo file ed eseguirla....il risultato la macro lo metterà nella cella F3
saluti
Domenico
Win 10 - Excel 2016 |
| | Post: 24 | Registrato il: 02/08/2022
| Età: 26 | Utente Junior | 2016 | | OFFLINE | |
|
26/03/2023 11:19 | |
@dodo47 dove trovo la macro? Non è possibile scrivermi semplicemente la formula nel commento? |
| | Post: 3.417 | Registrato il: 06/04/2013
| Utente Master | 2010 | | OFFLINE |
|
26/03/2023 11:21 | |
la macro è al post #2, la devi copiare su un modulo del tuo file
saluti
[Modificato da dodo47 26/03/2023 11:34] Domenico
Win 10 - Excel 2016 |
| | Post: 3.418 | Registrato il: 06/04/2013
| Utente Master | 2010 | | OFFLINE |
|
26/03/2023 11:26 | |
clicca su Sviluppo > Visual Basic > a sinistra click di destro sul vbaProject (TuoFile) > aggiungi modulo > nella finestra che si apre a destra incolli la macro.
Premi F5 per eseguirla o legala ad un pulsante sul foglio
Il tuo file lo devi salvare come xlsm.
[Modificato da dodo47 26/03/2023 11:44] Domenico
Win 10 - Excel 2016 |
| | Post: 25 | Registrato il: 02/08/2022
| Età: 26 | Utente Junior | 2016 | | OFFLINE | |
|
26/03/2023 11:45 | |
@dodo47 ma non è macro al post #2, o meglio non ho usato macro, anche perché non posso usare macro...è possibile avere la serie di formule? |
| | Post: 3.419 | Registrato il: 06/04/2013
| Utente Master | 2010 | | OFFLINE |
|
26/03/2023 11:48 | |
ciao
se non puoi utilizzare le macro, io non posso esserti d'aiuto.
Aspetta che altri ti propongano soluzioni con le formule (ma la vedo difficile)
saluti
Domenico
Win 10 - Excel 2016 |
| | Post: 26 | Registrato il: 02/08/2022
| Età: 26 | Utente Junior | 2016 | | OFFLINE | |
|
26/03/2023 11:51 | |
@dodo47 ok ti ringrazio comunque di tutto (soprattutto della pazienza), comunque adesso ho il dubbio anche riguardo al post #2...intendevi il mio secondo post? |
| | Post: 2.899 | Registrato il: 10/10/2013
| Città: VICENZA | Età: 69 | Utente Veteran | 365 | | ONLINE |
|
26/03/2023 13:12 | |
ciao
spartano ma sembra funzioni
in E3 da tirare in basso..........colonna da nascondere
=SE(MATR.SOMMA.PRODOTTO((B3>=$H$2)*(B3<=$J$2)*(C3="YYY"))>0;MATR.SOMMA.PRODOTTO((B3>=$H$2)*(B3<=$J$2)*(C3="YYY"))+E2;0)
formula per il calcolo
=SOMMA(SCARTO(INDIRETTO(INDIRIZZO(CONFRONTA(MAX(E3:E25);E3:E25;0)+2;4));;;-MAX(E3:E25)))
il problema è che se ci sono più sequenze uguali ti calcola la prima
se non ti funzionano confermale matriciali
CTRL MAIUSCOLO INVIO [Modificato da federico460 26/03/2023 13:12] |
| | Post: 27 | Registrato il: 02/08/2022
| Età: 26 | Utente Junior | 2016 | | OFFLINE | |
|
26/03/2023 15:59 | |
@federico460 ciao, grazie mille. Sei stato veramente di enorme aiuto. Quanto al problema delle sequenze uguali mi sa che è un problema che mi rimane. Io usavo questa:
=MATR.SOMMA.PRODOTTO(INDIRETTO("D"&CONFRONTA(MAX(E3:E100);E3:E100;0)+2-(MAX(E3:E100))+1&":D"&CONFRONTA(MAX(E3:E100);E3:E100;0)+2)).
Ma il problemino della sequenza uguale rimane comunque... |
|
|