Somma automatica variabile da colonne con filtri

Anonimo
2018-01-04T10:54:34+00:00

Buongiorno a tutti,

Vediamo se qualcuno riesce a darmi una mano e se riesco in qualche modo a farvi capire cosa vorrei ottenere.

Vi allego un file così capite meglio.

File

Nel file (che ha due fogli Sheet 1 e Sheet 2) ho tre colonne A, B, C che hanno dei valori numerici e su cui ho attivato la funzione filtro su ognuna.

Poi ho la colonna E in cui ci sono dei valori numerici che possono essere negativi (-1) e positivi (di diverso valore).

Ho infine una cella in G3 che mi da la somma di tutta la colonna E.

Il risultato finale a cui vorrei arrivare sarebbe conoscere in automatico la somma positiva maggiore possibile che si ha fra tutte le varie combinazioni dei filtri nelle tre colonne A, B e C.

Quello che fino adesso ho fatto manualmente, per arrivare al risultato voluto, è:

Ad esempio parto dalla colonna A, clicco sul filtro e mi esce la mascherina in cui posso deselezionare a piacimento uno dei tanti valori numerici.

Deseleziono il primo valore e clicco okay, vedo se la somma in G3 è aumentata o diminuita.

Se è aumentata lascio il primo valore deselezionato, se è diminuita seleziono nuovamente il primo valore e passo a deselezionare il secondo e così via con gli altri.

Faccio lo stesso con le colonne B e C.

Capite che farlo manualmente c'è da diventare matti, anche perché questo è solo un esempio per farvi capire a quale risultato voglio arrivare.

Ho poi un altro foglio molto più complesso dove ci sono molte altre colonne da confrontare.

Un utente mi ha indicato questo codice VBA

Public Sub FiltraMax()
Dim Rw As Long, C As Long, I As Long, X As Long
Dim Somma As Double
Dim vColl As Collection
Dim sCriteria As String
    Application.ScreenUpdating = False
    With Sheets("Sheet1")
        Rw = .Cells(Rows.Count, 1).End(xlUp).Row
        For X = 1 To 3 'ripeti il filtraggio per tre volte
            For I = 1 To 3 'ripeti per le 3 colonne A B C
                Somma = .Range("G3")
                sCriteria = "" 'viene usata per ripristinare il filtro
                Set vColl = New Collection
                On Error Resume Next
                For C = 2 To Rw
                    If .Rows(C).Hidden = False Then
                        vColl.Add CStr(.Cells(C, I)), CStr(.Cells(C, I)) 'crea elenco valori univoci
                        If Err.Number = 0 Then sCriteria = sCriteria & "#" & CStr(.Cells(C, I)) & "#,"
                    End If
                    Err.Clear
                Next C
                On Error GoTo 0
                For C = 1 To vColl.Count
                    .Range("A1").AutoFilter Field:=I, Criteria1:="<>" & vColl(C), _
                                                                Operator:=xlFilterValues
                    If .Range("G3") < Somma Then 'se la somma è diminuita ripristina filtro precedente
                        .Range("A1").AutoFilter Field:=I, Criteria1:=Split(Left(Replace(sCriteria, "#", ""), _
                                                Len(sCriteria) - 1), ","), Operator:=xlFilterValues
                    Else 'altrimenti elimina elemento e aggiorna somma
                        sCriteria = Replace(sCriteria, "#" & vColl(C) & "#,", "")
                        Somma = .Range("G3")
                    End If
                Next C
                Set vColl = Nothing
            Next I
        Next X
    End With
    Application.ScreenUpdating = True
End Sub

Ho implementato il codice e se nelle tre colonne ci sono solo numeri interi funziona (Sheet1).

Se invece nelle colonne cominciano ad esserci numeri con virgola oppure percentuali il codice non fa il suo lavoro (Sheet2).

So che filtrando direttamente la colonna E eliminando i -1 si arriverebbe a conoscere subito la massima somma possibile, ma a me serve partire dai filtri in A B C e non il contrario.

Qualcuno saprebbe indicarmi il motivo oppure indicarmi una soluzione diversa per risolverlo?

Grazie in anticipo.

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

2 risposte

Ordina per: Più utili
  1. Anonimo
    2018-01-04T15:44:35+00:00

    Ciao Paoloard, grazie per il tuo intervento.

    Non è proprio ciò di cui avevo bisogno.

    Ho bisogno che alla fine dell'ipotetica operazione le colonne A B C siano con i filtri attivati in modo da poter salvare il tutto come visualizzazione personalizzata e poterla applicare in seguito con un click.

    Con la formula da te suggerita conosco solo il risultato finale, peraltro un po' diverso dal risultato che ottengo filtrando manualmente le tre colonne.

    Questo perché con la tua formula vengono eliminati tutti i -1 in colonna E mentre manualmente no.

    Non so se sono riuscito a spiegarmi meglio.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2018-01-04T15:11:39+00:00

    Se non ho capito male basterebbe questa formula posta in H1:

    =MATR.SOMMA.PRODOTTO((E$2:E$100>0)*SUBTOTALE(109;SCARTO($E$2:$E$100;RIF.RIGA($E$2:$E$100)-MIN(RIF.RIGA($E$2:$E$100));;1)))

    Fai sapere.

    La risposta è stata utile?

    0 commenti Nessun commento