Condividi tramite

somma stessa cella tra più fogli - nome fogli dinamico

Anonimo
2022-11-03T16:10:25+00:00

Buongiorno a tutti,

non riesco a venire a capo di un problema: devo fare,m all'interno di un foglio che chiamerò "Rielilogo", una somma della stessa cella tra più fogli, con la classica formula:

=SUM('FoglioX:FoglioY'!A1)

il problema nasce dal fatto che voglio rendere dinamici i fogli indicati nella formula sopra mensionata, inserendo i nomi di FoglioX e FoglioY in determinate celle del foglio "Riepilogo" (supponiamo, in B1 e C1).

Ho provato in vari modi e forme a ricavare la sintassi sopra citata ma senza successo.

Qualcuno sa aiutarmi?

Grazie

Microsoft 365 e Office | Excel | Per il lavoro | 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

Risposta accettata dall'autore della domanda

Eleuterio Tedeschi 18,590 Punti di reputazione Moderatore volontario
2022-11-04T14:51:48+00:00

Grande Macro! Grazie, hai risolto nel modo più elegante il mio problema!

Grazie del riscontro, sono contento che sia quanto ti occorre.

Considera che è custom, pertanto non ci sono tutte le gestioni errori che la renderebbero universale, mi raccomando tienine conto.

Aggiungi solo una istruzione che la aggiorni al variare dei dati nei fogli per evitare di dover premere il ricalcola:

Option Explicit 

Function Somma3D(ByVal Foglio_1 As String, ByVal Foglio_2 As String, ByVal Cella As Range) 

Dim wksT As Worksheet, strCell As String, varSum, blnSum As Boolean 

    Application.Volatile 

    strCell = Cella.Address(0, 0) 

    For Each wksT In Worksheets 

        If wksT.Name = Foglio_1 Then 

            blnSum = True 

        End If 

        If blnSum And IsNumeric(wksT.Range(strCell).Value) Then 

            varSum = varSum + wksT.Range(strCell).Value 

        End If 

        If wksT.Name = Foglio_2 Then 

            blnSum = False 

            Exit For 

        End If 

    Next wksT 

    Somma3D = varSum 

End Function

Ciao.

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Eleuterio Tedeschi 18,590 Punti di reputazione Moderatore volontario
2022-11-04T13:07:37+00:00

Ciao,

se non disdegni una nuova funzione creata con il VBA ti propongo questa:

Option Explicit 

Function Somma3D(ByVal Foglio_1 As String, ByVal Foglio_2 As String, ByVal Cella As Range) 

Dim wksT As Worksheet, strCell As String, varSum, blnSum As Boolean 

    strCell = Cella.Address(0, 0) 

    For Each wksT In Worksheets 

        If wksT.Name = Foglio_1 Then 

            blnSum = True 

        End If 

        If blnSum And IsNumeric(wksT.Range(strCell).Value) Then 

            varSum = varSum + wksT.Range(strCell).Value 

        End If 

        If wksT.Name = Foglio_2 Then 

            blnSum = False 

            Exit For 

        End If 

    Next wksT 

    Somma3D = varSum 

End Function 

Si usa in un normale foglio:

=Somma3D(B1;B2;A1)

dove in B1 metti il nome del primo foglio, in B2 il nome dell'ultimo foglio ed il terzo parametro è semplicemente la cella di cui vuoi la copia.

Il ciclo all'interno scorre tutti i fogli e quando incontra il primo comincia a sommare la cella selezionata fino a quando non raggiunge il nome nel secondo parametro. Riepilogando ci sono due stringhe ed un riferimento ad una cella.

Spero sia chiaro e, soprattutto, utile,

ciao.

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

8 risposte aggiuntive

Ordina per: Più utili
  1. Gianfranco55 25,190 Punti di reputazione Moderatore volontario
    2022-11-04T13:05:38+00:00

    ciao ti allego il file esempio

    https://www.dropbox.com/s/y0a4s6opau0kam8/matrice%20somma%20prodotto%20da%20piu%20fogli1.xlsx?dl=0

    la formula somma la cella A1

    dei fogli scritti in colonna C

    ho messo in A1 di ogni foglio il numero mese

    gennaio=1

    dicembre=12

    fai delle prove

    scrivendo in colonna C

    dei nomi e vedi che somma solo quello

    esempio

    GENNAIO

    MAGGIO

    ti renderà 6

    FEBBRAIO

    OTTOBRE

    DICEMBRE

    ti renderà 24

    in pratica hai la flessibilità massima

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2022-11-04T12:46:37+00:00

    Grazie innanzitutto per la risposta. Prima di scrivere ho cercato di capire la logica della formula da te suggerita però non sono riuscito ad adattarla ai miei scopi. Sicuramente mi sarò spiegato male, provo nuovamente a esporre il problema, in sequenza.

    1. produco 4 fogli, chiamati: Foglio1, Foglio2, Foglio 3, Foglio4.
    2. in ognuno di questi fogli vi è un valore numerico nella casella A1
    3. Realizzo un quinto foglio chiamato: Riepilogo
    4. inserendo nel foglio "Riepilogo" la formula: =SOMMA('Foglio1:Foglio4'!A1) riesco a sommare tutti i valori numerici di tutti e quattro i fogli citati al punto 1. - verranno sommate tutti valori posti in A1, foglio inizio somma: Foglio1; Foglio fine somma: Foglio4;
    5. Ho necessità adesso di variare l'intervallo di fogli in cui agisce la somma (ad esempio, tra Foglio2 e Foglio3), voglio cioè avere la possibilità di rendere dinamico nome dei due fogli di inizio e di fine. A tal scopo, sul foglio Riepilogo, in B1 inserirò il nome del foglio di inizio somma, in B2 il nome del foglio di fine somma

    Come detto sopra, ho provato ad applicare la tua formula ma ottengo il valore di errore dato dal SE.ERRORE.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Gianfranco55 25,190 Punti di reputazione Moderatore volontario
    2022-11-03T18:04:44+00:00

    ciao

    metti i nomi dei fogli in colonna D

    io ho usato i mesi

    la formula

    =MATR.SOMMA.PRODOTTO(SE.ERRORE(SOMMA.PIÙ.SE(INDIRETTO("'"&$C$2:$C$13&"'!B2");INDIRETTO("'"&$C$2:$C$13&"'!B2");">0");0))

    6 Gennaio
    Febbraio

    La risposta è stata utile?

    0 commenti Nessun commento