Filtro e pivotcomportamento diverso



  • Filtro e pivot:comportamento diverso?
    di Roberto21 (utente non iscritto) data: 10/01/2014 22:55:59

    Ciao a tutti, torno a scrivere dopo una lunga pausa causa problemi personali. Ho avuto tanto aiuto nel forum nello sviluppo di una applicazione per gestire i membri di una associazione locale, ho continuato a lavorarci sopra più che altro per maintenance... ma ora mi trovo davanti a una cosa strana. Le statistiche dell'associazione derivano in larga parte da n tabelle pivot; una di queste dà risultati "sospetti". Cercherò di essere chiaro e conciso. Le "coppie" (non importa ovviamente se di fatto o no) iscritte sono caratterizzate dal fatto che i due componenti hanno, nel campo "coppia", rispettivamente il numero di iscrizione dell'altro. Per determinare il numero delle coppie, la tabella pivot presenta come etichette di riga il sesso (M/F) e come valore il conteggio di "coppia", filtrato per valori diversi da blank (il campo "coppia" è definito come testo, non numero). Il risultato sospetto è che compaiono due valori diversi per M e per F. Errore di input? No. La controprova avviene filtrando direttamente sulla tabella (filtro classico di Excel) del database su sesso (M e F) e su "coppia" (non blank). Filtrando in questo modo, ottengo lo stesso numero per M e F, ed il numero è inferiore a quelli della tabella pivot.
    L'unico modo per far quadrare le cose è confrontare le due liste, andare nl campo "coppia" di quelli presenti in più nella pivot e cancellarne il contenuto... anche se la cella appare GIA' vuota. In sostanza, accade che il campo "coppia" in alcuni casi vbenga vistom come vuoto dal filtro e come contenente "qualcosa" dalla pivot. So che a volte capita che una cella apparentemente vuota contenga imnvee qualche schifezza, ma che due meccanismi di excel la vedano in maniera diversa mi sembra veramente troppo...Qualcuno ha esperienze in proposito?
    Grazie



  • di roberto21 data: 11/01/2014 16:53:14

    Semplifico la questione. Ho preso in considerazione la colonna del database, contenente 1004 entries (alcune piene, alcune "vuote"). Se filtro escludendo le celle vuote, ottengo 374 records (che , fra l'altro, è corretto: ci sono 187 coppie, quindi 374 records DEVONO essere pieni). Se uso le formule counta e countblank sullo stesso range ottengo:
    COUNTA --> 395 record
    COUNTBLANK --> 630 records

    Questo è manifestamente assurdo: 395 + 630 fa 1025, ma i record sono 1004: sembra ci siano 21 celle contate sia come vuote che come piene. Ci capite qualcosa?



  • di patel data: 11/01/2014 17:19:11

    non credo che qualcuno ci provi a capire qualcosa se non alleghi il file





  • di roberto21 (utente non iscritto) data: 11/01/2014 17:53:28

    Spero basti la colonna incriminata, non credo di poter inviare l'intero database (privacy?) e comunque per queste prove non serve. Grazie mille per l'interessamento.



  • di Grograman (utente non iscritto) data: 13/01/2014 08:32:15

    Decisamente insufifciente la colonna incriminata.

    Direi che puoi REPLICARE l'anomalia su un file privo di dati sensibili e postarlo, altrimenti non si capisce quale sia il problema, figuriamoci come risolverlo.



  • di Grograman data: 13/01/2014 08:47:13

    Ad ogni modo sul file allegato non rilevo anomalie.
    Ma nemmeno rilevo i dati indicati!

    Sia con pivot che con formule che con filtri vedo 634 celle vuote e 377 valorizzate.



  • di roberto21 (utente non iscritto) data: 13/01/2014 10:43:23

    Vedo che cosa riesco a fare, intanto grazie per la risposta. Rimane il fatto che applicando counta(c2:c1005) viene 395, applicando countblank(c2:c1005) viene 630, la somma dei due è 1025 a fronte di 1004 records, per cui 21 records sono contati sia di qua (come NON BLANK) che di là (come BLANK); a meno che le due funzioni utilizzino criteri diversi. Hai ragione per le pivot: in questo estratto, nella lista dei valori del campo Coppie (usato come filtro, vedi secondo allegato temporaneo) appare sia (blank) che "nulla", e guarda caso i "nulla" sono proprio 21. Se provi ad applicare la funzione len ad uno di quei campi, ti viene ZERO, cioè lì non c'è niente.
    Devo peraltro confermare che usando la stessa pivot sul database intero sulla stessa colonna, "nulla" non compare, per cui essendoci solo (blank) il conteggio rimane sbagliato.



  • di Grograman (utente non iscritto) data: 13/01/2014 10:45:23

    Ripeto, non riscontro l'errore che hai indicato sul file allegato!



  • di roberto21 (utente non iscritto) data: 13/01/2014 12:48:25

    Non so che dire, sarà un problema di installazione di excel, che interpreta diversamente quel carattere. Non posso che confermare i risultati di counta e countblank sui dati dell'allegato. Grazie lo stesso, non intendo farvi perdere tempo



  • di roberto21 data: 17/01/2014 19:54:44

    OK, per chi si volesse divertire, ecco il workbook: il database è completo (1004 records), ho eliminato le colonne inutili. La tabella pivot del foglio 8 segnala 355 celle non vuote nella colonna Coniugi? della tabella del database, in quanto conta come non vuota anche la cella E515. Questa cella contiene "qualcosa", ma come dicevo:
    1) viene contata da COUNTA (vedi cella H515) quindi NON è vuota
    2) viene contata da COUNTBLANK (vedi cella I515) quindi è vuota
    3) len(E515) = 0 (quindi è vuota)

    La tabella pivot la conta come non vuota; se filtro il database per celle non vuote, ottengo 374, quindi il filtro la giudica vuota. Se provate a cancellare la cella (tasto delete sulla testiera) e rinfrescate la pivot, il conteggio torna corretto a 374.



  • di Grograman (utente non iscritto) data: 20/01/2014 08:37:04

    Ok svelato l'arcano, hai semplicemente delle delle vuote "non vuote".
    Te ne accorgi subito muovendoti per la colonna con i tasti CTRL+FRECCIA GIU'

    Arriva ad un punto in cui invece che spostarsi alla cella piena successiva si ferma su quella incriminata, apparentemente vuota.
    Ti basta entrarci con F2 e premere invio.
    Se vuoi farlo massivamente metti un filtro sulle vuote, in una colonna di appoggio metti la formula "--En" (n ovviamente è il numero della prima cella filtrata) e copi la formula fino alla fine. Poi fai un copia e incolla valori nella colonna E.

    Il problema non è così raro, sinceramente non so da dove derivi, ma è uno dei motivi di "lievitazione" delle dimensioni dei files excel. Quando pur avendo pochi dati occupano un sacco di MB, a causa delle "finte celle vuote".



  • di roberto21 data: 22/01/2014 23:27:30

    Ringrazio Grograman per l'interessamento. Il mio problema, però, non è sapere che ho delle celle NON vuote: di quello me ne ero ampiamente accorto, visto che queste celle fantasma (lunghezza zero, ma non vuote) vengono contate dalla tabella pivot che, insieme ad altre, mi serve per le statistiche, dando risultati sbagliati. Che cosa sia, nessuno lo sa; perchè ci vada a finire dentro, nemmeno. Posso solo dirvi (se siete interessati) COME ci va a finire. Il mio codice VBA gestisce il database di una associazione locale, e l'utente può (fra l'altro) aggiungere record o modificare record esistenti, tramite userform. Orbene, modificando un record esistente, i campi vengono letti dal database e popolano le entries della userform; l'utente cambia quello che deve (e può) cambiare, e i campi vengono ricopiati sul database. Se quel campo di cui stiamo parlando è vuoto in origine (e, NOTA BENE: NON viene contato dalla pivot) e non viene modificato (rimane vuoto nella userform), dopo l'operazione di riscrittura sul database assume quel valore ignoto e viene contato dalle pivot. E' un campo stringa, ma non è l'unico, ma è il solo a manifestare questo comportamento. Per ovviare all'inconveniente, non ho trovato di meglio che aggiungere al codice, appena dopo la operazione di riscrittura sul database, l'istruzione:

    if len(.cells(rowno, 24) = 0 then .cells(rowno, 24).ClearContents

    equivalente del Tasto cancella della tastiera applicato alla cella, che risolve il problema. Si tratta ovviamente di un rimedio sintomatico, che toglie il sintomo ma non cura la malattia. Altra soluzione potrebbe essere quello di forzare la cella con vbnullstring.

    Grazie e saluti



  • di isy data: 22/01/2014 23:45:26

    Ciao

    Prova con l'esempio che indico se risolve i tuoi dubbi
    Se utilizzi erroneamente il seguente codice ottieni un valore diverso da zero nella cella

    Private Sub CommandButton1_Click()
    Range("A10") = TextBox1
    End Sub
    ------------------------------------------
    Devi sempre specificare quale valore inserisci nel foglio vedi esempio in basso

    Se non risolvi allega almeno il form che stai utilizzando per inserire i dati
     
    'Codice da utilizzare
    Private Sub CommandButton1_Click()
      Range("A10") = TextBox1.Value
    End Sub