Conta celle vuote



  • Conta celle vuote
    di Giacalfe_1 (utente non iscritto) data: 22/09/2010

    Condizione
    analisi di una tabella del tipo orario scolastico

    problema
    contare le ore buche (escluso quelle di entrata in ore successive alla prima o uscita prima dell’ultima ora) e inserire il risultato in una cella x.

    ho trovato una macro che riporto di seguito (io riesco a definire macro semplici) che non sono riuscito ad utilizzare anche se ho cercato di modificarla.
    inoltre: la macro deve essere attivata da un pulsante? e come inserire il risultato nella cella x?
    macro trovata in internet
    sub contavuoti()
    range("c1:c65000") = ""
    valore_celle = range("b" & rows.count).end(xlup).value
    contatore = -1
    for i = range("b" & rows.count).end(xlup).row to 1 step -1
    val_cella = cells(i, 2).value
    if val_cella = valore_celle then
    contatore = contatore + 1
    else
    if contatore > 0 then
    cells(i + 1, 3) = contatore
    end if
    contatore = 0
    end if
    valore_celle = cells(i, 1).value
    next i
    if contatore > 1 then
    cells(i + 1, 3) = contatore
    end if
    end sub



  • di Enzo (utente non iscritto) data: 22/09/2010

    Prima di tutto benvenuto nel forum
    dovresti essere un po' piu' chiaro ossia
    cosa vuoi fare esattamente indipendentemente da quello che fa quella macro
    se posti un file di esempio con una spiegazione ti si puo' aiutare



  • di Albatros54 (utente non iscritto) data: 22/09/2010

    La macro la puoi associare a un pulsante o ad una combinazione di tasti.
    vai nell'editor vba combinazione tasti alt+ f11
    menu sviluppo- visual basic
    sei nell'editor di vba
    menu inserisci -modulo ed incolli il codice postato.
    chiudi l'editor vba
    nel menu sviluppo -macro ed evidenzi la tua macro(nel tuo caso contavuoti)-opzioni ed inserisci un tasto di scelta rapido.esci, a questo punto se pressi il tasto ctrl+il tuo tasto scelto lanci la tua macro
    per quanto riguarda il valore da inserire nella cella guarda il codice che ti ho postato.
    ciao
    albatros54
     
    Sub contavuoti()
    Range("c1:c65000") = ""
    valore_celle = Range("b" & Rows.Count).End(xlUp).Value
    contatore = -1
    For i = Range("b" & Rows.Count).End(xlUp).Row To 1 Step -1
    val_cella = Cells(i, 2).Value
    If val_cella = valore_celle Then
    contatore = contatore + 1
    Else
    If contatore > 0 Then
    Cells(i + 1, 3) = contatore
    End If
    contatore = 0
    End If
    valore_celle = Cells(i, 1).Value
    Next i
    If contatore > 1 Then
    Cells(i + 1, 3) = contatore
    End If
    Range("d1").Formula = "=Sum(C1:C65000)" '<< mette il totale delle celle vuote in d1
    
    End Sub


  • Conta celle vuote
    di Giacalfe_1 (utente non iscritto) data: 22/09/2010

    Non so se replico
    ciao e grazie per il benvenuto
    per enzo: voglio contare le celle vuote tra celle piene escludendo le ore di ingresso dopo la prima e le ore di uscita prima della 5^ ora.
    per albatros54: ho provato il tuo post come modificato per la mia esigenza (contare per righe.
    risultato: tutte le celle dell'intervallo j9:am9 diventano nere.
    e per me è ancora più buio.
    ciao e grazie
     
    Sub contavuoti()
    Range("j9:am9") = ""
    valore_celle = Range("b" & Rows.Count).End(xlUp).Value
    contatore = -1
    For i = Range("b" & Rows.Count).End(xlUp).Row To 1 Step -1
    val_cella = Cells(i, 2).Value
    If val_cella = valore_celle Then
    contatore = contatore + 1
    Else
    If contatore > 0 Then
    Cells(i + 1, 3) = contatore
    End If
    contatore = 0
    End If
    valore_celle = Cells(i, 1).Value
    Next i
    If contatore > 1 Then
    Cells(i + 1, 3) = contatore
    End If
    Range("ar9").Formula = "=Sum(j9:am9)" '<< mette il totale delle celle vuote in ar9
    
    End Sub



  • di Albatros54 (utente non iscritto) data: 22/09/2010

    Per apportare le modifiche , prima bisogna capire cosa fa il listato.
    il listato che ti ho postato ,conta le celle vuote contenute nella colonna che va range("b" & rows.count).end(xlup).value cioe dall'ultima cella della colonna b che contiene un valore fina alla cella b1, quindi prova a mettere dei valori nella colonna b con delle celle vuote e lancia la macro e cerca di capire cosa fa.
    ciao
    albatros54



  • di Locate (utente non iscritto) data: 22/09/2010

    Ciao a tutti
    rispondendo alla richiesta di gialcalfe_1 la macro e' stata creata per contare quante celle vuote ci fossero in colonna b:b prima di un valore inserito sia esso data stringa o qualsiasi, e riportare il suddetto conto all'inizio di oghi settore vuoto in colonna c:c quate erano le celle vuote che si trovavano fra un valore ed un altro non dando nessun conteggio di quante celle vuote si trovano in b:b quindi penso che questa macro non dia il risultato di cui ai bisogno per il tuo conto, ma da come la vedo per il tuo problema bisognerebbe avere un tuo file e in base alle tue indicazioni creare una macro o solo un insieme di funzioni che soddisfino la tua richiesta.
    ciao da locate
    ps allego il file di prova che avevo creato con la macro in questione


  • Giacalfe_1
    di Conta celle vuote (utente non iscritto) data: 22/09/2010

    Ciao a tutti
    per locate ed altri
    ribadisco qual è il problema che mi sono posto:
    calcolare il n° di celle vuote in una riga formata come in esempio allegato, ed inserire il valore trovato nella iesima cella.
    ho anticipato nella mia prima richiesta di aiuto di non sapermela cavare con vba se non per situazioni abbastanza semplici. il problema io l’ho risolto con la funzione:
    =conta.se(intervallo dati;”x”) ed imponendo la formattazione condizionale per cui la cella iesima che contiene il dato x ha carattere bianco.
    questo però impone l’inserimento della x nella cella relativa.
    mi ponevo, quindi, il problema di contare le celle vuote (quindi senza inserire la x) senza inserire alcun dato.
    una macro dovrebbe considerare, quindi, che non corrisponde ad un’ora buco l'inizio di una lezione piuttosto che di un turno se la casella è vuota ad inizio o fine giornata. mentre quelle segnate in rosso sono interruzioni del servizio (lo schema è quello di un orario scolastico)
    spero di essere stato chiaro nella illustrazione del problema.
    ciao e grazie
    p.s.: ho allegato ile excell di esempio



  • di Locate (utente non iscritto) data: 22/09/2010

    Ciao
    visto il tuo problema ti propongo una mia soluzione, la quale non a bisogno di scrivere niente nei vari quadrattini ma inserisci in automatico con un doppio clik del mause il si la x e il nullo, questo perche' visto da come stai strutturando il file costuire una macro ad ok per questi bisogna avere il file completo per far riconoscere i dati,da come ho visto non penso che questi si fermi ai giorni della settimana ma bensi a mesi ed a anno scolastico
    ciao da locate
    riallego il tuo file modificato di esempio

    ps per mio conto da come vedo io imposterei tutto in verticale con 1 mese per foglio in colonna a:a metterei data con giorni settimana in colonna b,c,d,e,f le ore,oppure tutto su un foglio sempre incolonnato, vedi foglio2