Media con contenuto variabile



  • Media con contenuto variabile
    di gerbera (utente non iscritto) data: 11/08/2016 13:07:37

    Ciao a tutti, sono alle prime armi con VBA. Vi spiego il mio problema: voglio creare una macro che esegua una serie di funzioni,andando a considerare dati inseriti in un database.
    Le operazioni saranno sempre le stesse, ma il contenuto varierà di volta in volta: tra le operazioni infatti devo inserire dei filtri, e dopodiché, calcolare per esempio la media di una colonna risultante post-filtraggio.

    Come si fa ad indicare l'intervallo di una colonna avente come limite inferiore una cella che è destinata a cambiare sempre? (cioè se ad esempio oggi fosse Z193 magari la volta che voglio usare quella macro dopo potrebbe essere Z197 e così via nel tempo).

    Spero di esser stata esaustiva.
    Ringrazio in anticipo chiunque potrà aiutarmi!!!!



  • di Vecchio Frac data: 11/08/2016 14:10:37

    Ciao gerbera (è una margheritona vero? ^_^)
    cit. "Come si fa ad indicare l'intervallo di una colonna avente come limite inferiore una cella che è destinata a cambiare sempre?"
    ---> In VBA puoi selezionare le celle visibili, risultanti dal filtro automatico, con il metodo SpecialCells dell'oggetto range: applichi il filtro poi indichi l'intero range di dati e richiedi solo le celle visibili.
    Segue esempio.
    Naturalmente puoi postare un file illustrativo della tua situazione per calare nel concreto l'informazione.
     
    'A1..C6 intera tabella, compresa intestazione
    'filtro automatico su colonna A che restituisca un subset di dati, poniamo due righe
    'voglio la media aritmetica dei dati in colonna C
    
    Sub test()
        Range("C2..C6").SpecialCells(xlCellTypeVisible).Select
        MsgBox "La media dei dati di colonna C è " & WorksheetFunction.Average(Selection)
    End Sub
    
    






  • di gerbera (utente non iscritto) data: 18/08/2016 11:27:33

    Ciao Vecchio Frac! Si è una margheritona!
    Grazie mille per l'aiuto.. purtroppo però non sono riuscita a risolvere.

    Incontro due problemi:

    innanzitutto, il mio database è il continuo aggiornamento, quindi la definizione dell'intervallo, che nel tuo caso corrispondeva a C6 non è definita ma andrebbe verificata ogni volta.
    Come faccio quindi ad inserirla dentro una macro questa considerazione? (Momentaneamente ho inserito Z900 in modo che sicuramente prendesse tutte le celle popolate sinora)

    Inoltre, mi dà questo errore:

    Errore di compilazione.:

    Prevista End Sub.
    (Modulo1 8:58)

    Insomma non mi funziona!

    Sono piuttosto in difficoltà, sai darmi una mano?
    Grazieee
     
    ' Macro4 Macro
    '
    
    '
        Rows("23:23").Select
        Selection.AutoFilter
        ActiveSheet.Range("$A$23:$AR$1007").AutoFilter Field:=15, Criteria1:="<>"
    Sub test()
    Range("Z22..Z900").SpecialCells(xlCellTypeVisible).Select
        MsgBox "La media dei dati di colonna Z è " & WorksheetFunction.Average(Selection)
    
    End Sub



  • di Luca73 data: 18/08/2016 11:37:15

    Ciao
    l'errore te lo da in quanto hai scritto delle righe prima del sub
    analizzando ciò che hai postato vedo che filtri le celle nelle righe da 23 a 1007 pertanto ti suggerirei di utilizzare lo stesso range anche nella media.
    Ciao
    Luca

    PS (cit da VF)
    Naturalmente puoi postare un file illustrativo della tua situazione per calare nel concreto l'informazione.
     
    Sub test()
        Rows("23:23").Select
        Selection.AutoFilter
        ActiveSheet.Range("$A$23:$AR$1007").AutoFilter Field:=15, Criteria1:="<>"
    
    Range("$Z$23:$Z$1007").SpecialCells(xlCellTypeVisible).Select
        MsgBox "La media dei dati di colonna Z è " & WorksheetFunction.Average(Selection)
    
    End Sub






  • di Luca73 data: 18/08/2016 11:41:51

    Ciao A prima aggiungo che senza passare da VBA lo stesso risultato lo puoi ottenere con la funzione SUBTOTALE che ti permette di selezionare quale funzione vuoi utilizzare (la 1 è la media) e la possibilità di selezionare se utilizzare solo i dati visibili oppure anche quelli nascosti.

    =SUBTOTALE(101;$Z$23:$Z$1007) ti da la media della colonna Z (tra riga 23 e riga 1007) dei soli valori visibili ovvero filtrati

    Ciao
    Luca





  • di Vecchio Frac data: 18/08/2016 13:47:56

    cit. " il mio database è il continuo aggiornamento, quindi la definizione dell'intervallo, che nel tuo caso corrispondeva a C6 non è definita ... Errore di compilazione ... Insomma non mi funziona! "
    ---> Bè sì, era solo un esempio illustrativo, da prender a spunto, capirlo e adattarlo al contesto.
    Si può costruire un range che tenga conto delle dimensioni effettive della tabella man mano che cresce...
    E non puoi incollare del codice a caso in mezzo ad altro codice :)
    Prima cerca di capire cosa fa e come funziona il mio esempio, poi quando abbiamo una base comune vediamo di risolvere il problema concreto. Sempre se non ti bastano le formule di Luca, ma hai esordito con "sono alle prime armi con VBA" quindi sono partito da lì :)