Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

somma valori corrispondenti alla massima frequenza di parametro, in base a intervallo di date

Ultimo Aggiornamento: 26/03/2023 15:59
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...
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 14:58. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com