Somma celle non vuote in tre colonne

di il
22 risposte

Somma celle non vuote in tre colonne

Ciao a tutti! Torno a chiedere un vostro aiuto, sempre su una questione di conteggio, come in un altro topic di poco tempo fa...
Questa volta sto cercando di fare un conteggio più raffinato, e provo a spiegarmi: ho una tabella con un tot di record, e un tot di colonne...di queste colonne me ne interessa in particolare tre (diciamo field1, field2, field3) che quando vengono riempite possono contenere anche valore Null. Ecco, quello che vorrei fare è contare quante celle sono riempite in ciascuna di queste tre colonne (saltando quindi quelle vuote) e sommare poi i tre valori ottenuti per avere un totale delle tre colonne.
Mi sono fatto capire?

22 Risposte

  • Re: Somma celle non vuote in tre colonne

    gmaster ha scritto:


    Ciao a tutti! Torno a chiedere un vostro aiuto, sempre su una questione di conteggio, come in un altro topic di poco tempo fa...
    Questa volta sto cercando di fare un conteggio più raffinato, e provo a spiegarmi: ho una tabella con un tot di record, e un tot di colonne...di queste colonne me ne interessa in particolare tre (diciamo field1, field2, field3) che quando vengono riempite possono contenere anche valore Null. Ecco, quello che vorrei fare è contare quante celle sono riempite in ciascuna di queste tre colonne (saltando quindi quelle vuote) e sommare poi i tre valori ottenuti per avere un totale delle tre colonne.
    Mi sono fatto capire?
    Quando sento parlare di (vedo scrivere) "celle vuote" (vedo l'oggetto) mi vengono i brividi pensando di usare Access come se fosse Excel.
    Fai un SUM dei tre campi, singolarmente per tenerli separati e/o della loro somma se ti interessa il totale dei 3.
    Somma1: Somma([field1])
    Somma2: Somma([field2])
    Somma3: Somma([field3])
    SommaTutte: [field1] + [field2] + [field3]
    ognuna in una colonna diversa di una query. La presenza di valori null non dovrebbe creare problemi, con queste formule. in altre situaziono forse sì.
    Ops... e il conto delle non vuote? non l'avevo letto. Ora rimedio
    Ecco: stessa cosa di prima, invece di Sum, Count ed automaticamente ignora i null.
    Conta1: Conteggio([field1])
    Conta2: Conteggio([field2])
    Conta3: Conteggio([field3])
    Conta3colonne: [Conta1] + [Conta2] + [Conta3]
    (anche se quest'ultimo campo calcolato non è molto significativo). Il tutto in QBE (il sistema grafico di costruzione delle query) lo si ottiene attivano il pulsante "Totali" (quello con il simbolo della sommatoria, almeno in Access2007). Nelle prime 3 di ogni gruppo seleziona Somma nel primo caso e Conteggio nel secondo caso. Sull'ultima voce (SommaTutte e Conta3colonne) seleziona Espressione nella riga corrispondente a Formula. A tutti quelli che hanno letto prima delle 13:50 = ho mescolato SQL e sintassi da QBE. Chiedo scusa, correggo.
  • Re: Somma celle non vuote in tre colonne

    Ciao, prova con uno di questi due statement SQL, ovviamente apportando le opportune correzione sul nome della tabella e dei campi interessati alla somma.
    un saluto
    
    
    SELECT Sum(countI+countz+countca) AS sommaTreCampi
    FROM (SELECT t1.countI, t1.countz, t1.countCA
    
    FROM (select ( select count(CAMPO1) from TUATABELLA) as countI, (select count(CAMPO2)  from TUATABELLA) as countZ, (select count(CAMPO3)  from TUATABELLA) as countCA
    
    from TUATABELLA)  AS t1
    GROUP BY TUATABELLA.countI, TUATABELLA.countz, TUATABELLA.countCA
    )  AS DVR1
    
    
    
    
    SELECT Sum(ConteggioCAMPO1+ConteConteggioCAMPO2+ConteggioCAMPO3) AS sommaTreCampi
    
    FROM (SELECT Count(TUATABELLA.CAMPO1) AS ConteggioCAMPO1, Count(TUATABELLA.CAMPO2) AS ConteggioCAMPO2, Count(TUATABELLA.CAMPO3) AS ConConteggioCAMPO3
    FROM TUATABELLA
    
    )  AS DVR1
    
    
  • Re: Somma celle non vuote in tre colonne

    Ah perfetto grazie! Nella mia niubbaggine non sapevo che Count non contava i Null

    Stavo provando ora a fare una cosina in vba unendo la IF dell'altro post, a queste vostre proposte
    Cioè una funzione che, selezionate certe tabelle, faccia questo conto su ciascuna (hanno tutte quelle tre colonne) e poi sommi tutti i risultati....per ora ho tirato fuori questo, ma non funziona....

    Public Function TotCell()

    Dim tbf As TableDef
    Dim Name As String
    Dim CellNmb As Integer
    For Each tbf In DBEngine(0)(0).TableDefs
    If Right(tbf.Name, 3) = "_BB"
    Name = tbf.Name
    CurrentDb.Execute "SELECT Sum( Count([Name].Field_1) + Count([Name].Field_2) + Count([Name].Field_3) AS Total"

    CellNmb = CellNmb + Total
    End If
    Next
    TotCell = CellNmb
    End Function
  • Re: Somma celle non vuote in tre colonne

    Ciao,
    per quanto a :

    gmaster ha scritto:


    Cioè una funzione che, selezionate certe tabelle, faccia questo conto su ciascuna (hanno tutte quelle tre colonne) e poi sommi tutti i risultati
    ovviamente si può fare...
    Se il nome dei campi coinvolti è lo stesso è più facile rispetto al fatto che varino di tabella in tabella.
    Ciclare l'insieme tabledefs è una soluzione corretta, però devi fare in modo di costruire lo statement sql un modo che il nome della tabella venga "passata" allo statement sql che via via crei ) costruire cioè una stringa da passare a currentDB.EXECUTE
    Con currentDB execute lanci la query da cui prelevi il risultato della somma.
    Studiaci un po' su e facci sapere!
    Concettualmente il codice che mostri presenta degli errori....

    un saluto.
  • Re: Somma celle non vuote in tre colonne

    gmaster ha scritto:


    Ah perfetto grazie! Nella mia niubbaggine non sapevo che Count non contava i Null
    Io l'ho scoperto provando, non me lo ricordavo.

    gmaster ha scritto:


    Stavo provando ora a fare una cosina in vba unendo la IF dell'altro post, a queste vostre proposte
    Cioè una funzione che, selezionate certe tabelle, faccia questo conto su ciascuna (hanno tutte quelle tre colonne) e poi sommi tutti i risultati....per ora ho tirato fuori questo, ma non funziona....
    e dove va in errore? sempre codice e descrizione, nonché possibilmente la riga evidenziata.
    Punterei l'attenzione su questa

    gmaster ha scritto:


    Public Function TotCell()
    ...
            CurrentDb.Execute "SELECT Sum( Count([Name].Field_1) + Count([Name].Field_2) + Count([Name].Field_3) AS Total"
    ...
    Il metodo execute vale solo per le action queries, non per quelle di selezione
    Per eseguire una query di selezione con execute devi usare il metodo execute di una connessione ADO
    Ma soprattutto: sicuro che
    SELECT Sum( Count([Name].Field_1) + Count([Name].Field_2) + Count([Name].Field_3) AS Total
    sia una sintassi valida? cosa dovrebbe rappresentare?
    (arrivo con calma io, quando altri (Goku) hanno già scoperto tutto)
  • Re: Somma celle non vuote in tre colonne

    Ehehe bravissimo, in effetti è proprio quella la riga problematica...e no, non sono per nulla sicuro della correttezza della query, per questo chiedevo aiuto
    Scusatemi mi sono un po' piantato su sta cosa...
  • Re: Somma celle non vuote in tre colonne

    gmaster ha scritto:


    ...
    For Each tbf In DBEngine(0)(0).TableDefs
        If Right(tbf.Name, 3) = "_BB"
            Name = tbf.Name
            CurrentDb.Execute "SELECT Sum( Count([Name].Field_1) + Count([Name].Field_2) + Count([Name].Field_3) AS Total"
    
                CellNmb = CellNmb + Total    
            End If
    Next
        TotCell = CellNmb
    End Function
    Dim rs As DAO.Recodset
    Dim strSQL As String
    For Each tbf In DBEngine(0)(0).TableDefs
        If Right(tbf.Name, 3) = "_BB"
            Name = tbf.Name
    		strSQL = "Select Count([Field_1]) As Conta1, Count([Field_2]) as Conta2, Count([Field_3]) As Conta3)"
    		strSQL = strSQL & "FROM [" & Name & "]"
    		set rs = dbEngine(0)(0).openrecorset (strSQL)
    		total = total + rs(0).value + rs(1).value + rs(2).value
    		rs.close 'è necessario ad ogni giro o è sufficiente alla fine?
    	End If
    Next
    Set rs = nothing
    TotCell = Total
    End Function
    rs(0), rs(1) e rs(2) identificano rispettivamente Conta1, Conta2 e Conta3 (i campi nel recordset si possono identificare anche con un indice).
    E se non funziona poco ci manca.
  • Re: Somma celle non vuote in tre colonne

    gmaster ha scritto:


    Ehehe bravissimo, in effetti è proprio quella la riga problematica...e no, non sono per nulla sicuro della correttezza della query, per questo chiedevo aiuto
    Scusatemi mi sono un po' piantato su sta cosa...
    Prova a farla su una tabella singola, creando la query ad hoc, in SQL, mettendo il nome di una tabella vera e vedi subito se va o no. Se non va cerchi di costruire la query perché dia il risultato voluto e la trasponi con i dovuti adattamenti nel codice.
  • Re: Somma celle non vuote in tre colonne

    Philcattivocarattere ha scritto:


    gmaster ha scritto:


    ...
    For Each tbf In DBEngine(0)(0).TableDefs
        If Right(tbf.Name, 3) = "_BB"
            Name = tbf.Name
            CurrentDb.Execute "SELECT Sum( Count([Name].Field_1) + Count([Name].Field_2) + Count([Name].Field_3) AS Total"
    
                CellNmb = CellNmb + Total    
            End If
    Next
        TotCell = CellNmb
    End Function
    Dim rs As DAO.Recodset
    Dim strSQL As String
    For Each tbf In DBEngine(0)(0).TableDefs
        If Right(tbf.Name, 3) = "_BB"
            Name = tbf.Name
    		strSQL = "Select Count([Field_1]) As Conta1, Count([Field_2]) as Conta2, Count([Field_3]) As Conta3)"
    		strSQL = strSQL & "FROM [" & Name & "]"
    		set rs = dbEngine(0)(0).openrecorset (strSQL)
    		total = total + rs(0).value + rs(1).value + rs(2).value
    		rs.close 'è necessario ad ogni giro o è sufficiente alla fine?
    	End If
    Next
    rs = nothing
    TotCell = Total
    End Function
    rs(0), rs(1) e rs(2) identificano rispettivamente Conta1, Conta2 e Conta3 (i campi nel recordset si possono identificare anche con un indice).
    E se non funziona poco ci manca.
    Ehi ciao! Intanto grazie
    Poi, mi da un errore proprio all'inizio, su "rs As Recordset" dicendomi "Tipo definito dall'utente non definito"
  • Re: Somma celle non vuote in tre colonne

    gmaster ha scritto:


    Poi, mi da un errore proprio all'inizio, su "rs As Recordset" dicendomi "Tipo definito dall'utente non definito"
    Mah... se è per quello nel codice c'è
    Dim rs As DAO.Recordset
    Scrivi bene, se è diverso, e dimmi se dà ancora errore
  • Re: Somma celle non vuote in tre colonne

    Philcattivocarattere ha scritto:


    gmaster ha scritto:


    Poi, mi da un errore proprio all'inizio, su "rs As Recordset" dicendomi "Tipo definito dall'utente non definito"
    Mah... se è per quello nel codice c'è
    Dim rs As DAO.Recordset
    Scrivi bene, se è diverso, e dimmi se dà ancora errore
    Sisi, avevo scritto male nel post, ma nella query è scritto così! DAO.Recordset!
  • Re: Somma celle non vuote in tre colonne

    gmaster ha scritto:


    Philcattivocarattere ha scritto:


    gmaster ha scritto:


    Poi, mi da un errore proprio all'inizio, su "rs As Recordset" dicendomi "Tipo definito dall'utente non definito"
    Mah... se è per quello nel codice c'è
    Dim rs As DAO.Recordset
    Scrivi bene, se è diverso, e dimmi se dà ancora errore
    Sisi, avevo scritto male nel post, ma nella query è scritto così! DAO.Recordset!
    Nella query? Quel codice va scritto in vba. Non so dove tu lo voglia gestire, se come funzione "generica" o in un evento di una mashera (ad esempio) ma la dichiarazione della variabile non si fa in una query.
  • Re: Somma celle non vuote in tre colonne

    Oggesù stamattina son fuso....benedetto venerdì....
    Non so perchè ho scritto query, ma ovviamente sto lavorando in VBA....Scusami
  • Re: Somma celle non vuote in tre colonne

    gmaster ha scritto:


    Oggesù stamattina son fuso....benedetto venerdì....
    Non so perchè ho scritto query, ma ovviamente sto lavorando in VBA....Scusami
    Guarda se nei Riferimenti hai Microsoft DAO 3.6 Object Library. Se non c'è attivalo, mettendo il segno di spunta.
Devi accedere o registrarti per scrivere nel forum
22 risposte