Risultati da 1 a 13 di 13

Discussione: Excel 2003: conteggio celle contigue valorizzate

  1. #1
    New Member
    Data Registrazione
    08-04-2011
    Messaggi
    8

    Excel 2003: conteggio celle contigue valorizzate

    Ciao a tutti, avrei bisogno di risolvere il seguente problema (che non sono sicurissimo di riuscire a spiegare per bene...):
    in una colonna di celle A1:A10 alcune celle sono a valore zero, altre sono valorizzate ed isolate, altre ancora sono valorizzate e contigue come da esempio seguente:
    0
    1
    0
    3
    4
    1
    0
    1
    1
    0
    La mia necessità è quella di trovare una formula che mi restituisca il valore più elevato relativo conteggio delle celle contigue, che nell'esempio di cui sopra è costituito dalle righe dalla 4 alla 6 (valori 3,4,1). Il valore che dovrei avere in questo caso è 3 (che è appunto il massimo di celle contigue).
    Non so se sono riuscito a spiegarmi
    Grazie a chiunque vorrà darmi una mano

  2. #2
    Senior Member L'avatar di LS66
    Data Registrazione
    23-01-2007
    Messaggi
    438
    Guarda il foglio allegato.
    In pratica: in una colonna (nell'esempio la B) conti se la corrispondente cella A è diversa da 0; se invece è zero,azzeri la cella B.
    Per esempio in B2 scrivi:
    =SE(A2<>0;B1+1;0)
    e quindi trovi 0 se la cella A2 è 0, incrementi di uno il conteggio che invece conta le celle diverse da zero.
    Nella prima cella della colonna B, invece scriverai:
    =SE(A1<>0;1;0)
    per inizializzare il conteggio.

    Alla fine il valore massimo conteggiato nella colonna B è il numero di celle contigue diverse da 0.

    La colonna B anche puoi nasconderla.

    Spero d'essermi spiegato chiaramente, Ciao.

  3. #3
    New Member
    Data Registrazione
    08-04-2011
    Messaggi
    8
    Grazieeeeeeeeeeeeeeeeeeeeeeeeeeeeeee!!!!!!!!!!!!!! !!!!!!!!!!!!
    Proprio quello che mi serviva!
    Poi con la funzione =GRANDE(B1:B10;1) rilevo il numero più grande ed ho il totale massimo delle celle contigue.
    Ancora grazie!!

  4. #4
    Senior Member L'avatar di LS66
    Data Registrazione
    23-01-2007
    Messaggi
    438
    Di nulla.
    Io ho usato la funzione MAX, però vedi tu.

    Ciao.

  5. #5
    New Member
    Data Registrazione
    08-04-2011
    Messaggi
    8
    Non vorrei dire una stupidata, ma non ho usato la funzione MAX perché i dati in tabella sono dinamici, ovvero soggetti a variazione e quindi la funzione GRANDE va fariare il dato relativo mentre la funzione MAX no... Vero?

  6. #6
    Senior Member L'avatar di LS66
    Data Registrazione
    23-01-2007
    Messaggi
    438
    Cosa intendi per "variare il dato"?
    Se modifichi la sequenza di valori in A, cambia il conteggio in B e quindi cambia il risultato della funzione Max.
    Dovrebbero essere equivalenti le due funzioni per l'uso che ne vuoi fare tu.

  7. #7
    New Member
    Data Registrazione
    08-04-2011
    Messaggi
    8
    Sarà Excel 2003?? A me la formula MAX restituisce un dato tipo "=MAX (1/0/7/2/0/2/3/4/5/0/0/)" e cambiando i valori della matrice la formula rimane "statica" mantenendo il valore restituito precedente, cosa che non succede con la formula "GRANDE".. Non saprei dirti LS66.. Ci ho provato...

  8. #8
    Senior Member L'avatar di LS66
    Data Registrazione
    23-01-2007
    Messaggi
    438
    Non capisco cosa intendi con A me la formula MAX restituisce un dato tipo "=MAX (1/0/7/2/0/2/3/4/5/0/0/)" e cambiando i valori della matrice la formula rimane "statica" mantenendo il valore restituito precedente.
    Io scrivo =Max(A1:A10) e ottengo il valore maggiore cercato,come puoi vedere dal foglio che ho allegato nella prima risposta.
    Puoi chiarirmi?

  9. #9
    New Member
    Data Registrazione
    08-04-2011
    Messaggi
    8
    Si, hai ragione, ho provato sul file di esempio che mi hai mandato e funziona correttamente. Variando i parametri il valore massimo esposto e generato dalla formula MAX varia anch'esso. Eppure nel file che sto utilizzando e per il quale necessitavo di questa formula ti assicuro che non funzione ed all'interno delle parentesi anziché mostrarmi l'intervallo di celle -ad es. (A1:A10)- mi mostra i numeri contenuti all'interno dell'intervallo selezionato separati da /
    Non so perché succede questa cosa.. La versione di Excel è uguale..

  10. #10
    Senior Member L'avatar di LS66
    Data Registrazione
    23-01-2007
    Messaggi
    438
    Mi incuriosisce.
    Non è che puoi allegarmi il foglio (ovviamente pulito e con solo la formula in questione)?

  11. #11
    New Member
    Data Registrazione
    08-04-2011
    Messaggi
    8
    Ho provato a rimettere la formula MAX sul foglio sul quale prima non funzionava per inviartela e adesso funziona correttamente
    Non saprei dirti perché, ma l'altro giorno mi ha fatto impazzire ed ho dovuto trovare l'alternativa (appunto la formula GRANDE). Ti assicuro che mi restituiva quel valore descritto nei precedenti post. Misteri di Excel...

    Scusami LS66, visto che sei così gentile.. Ho questo codice VBA (che riporto di seguito) preso da un foglio similare che vorrei applicare al file che ho realizzato e che allego. Ci sto provando da due giorni ad adattarlo ma non ci riesco proprio.... Potresti darmi una mano in questo?

    Il codice è:

    Private Sub CommandButton1_Click()

    Set Range_Dati = Range("J17:R47, AD17:AL47, AX17:BF47, BR17:BZ47, CL17:CT47")
    Conflitti = False

    For Each Variata In Range_Dati

    Variata.Interior.ColorIndex = xlColorIndexNone

    If Variata.Value <> "" And _
    Variata.Interior.Color <> RGB(128, 128, 128) Then

    For Each Casella In Union(Range(Cells(Variata.Row, 10), Cells(Variata.Row, 18)), Range(Cells(Variata.Row, 30), Cells(Variata.Row, 38)), Range(Cells(Variata.Row, 50), Cells(Variata.Row, 58)), Range(Cells(Variata.Row, 70), Cells(Variata.Row, 78)), Range(Cells(Variata.Row, 90), Cells(Variata.Row, 98)))
    If conflitto(Casella, Variata) Then
    Variata.Interior.ColorIndex = 6
    Conflitti = True
    End If
    Next

    End If

    Next

    If Conflitti Then
    MsgBox ("Sono presenti sovrapposizioni di turni")
    Else
    MsgBox ("Nessuna sovrapposizione rilevata")
    End If


    End Sub

    Private Sub Worksheet_Change(ByVal Variata As Range)


    ' dare i nomi ai range

    If Worksheets("Impostazioni").[d136] = "S" Then
    Set Range_Dati = Range("J17:R47, AD17:AL47, AX17:BF47, BR17:BZ47, CL17:CT47")
    Lista = ""

    If Variata.Cells.Count = 1 Then
    If Not Intersect(Variata, Range_Dati) Is Nothing And _
    Variata.Value <> "" And _
    Variata.Interior.Color <> RGB(128, 128, 128) Then

    For Each Casella In Union(Range(Cells(Variata.Row, 10), Cells(Variata.Row, 18)), Range(Cells(Variata.Row, 30), Cells(Variata.Row, 38)), Range(Cells(Variata.Row, 50), Cells(Variata.Row, 58)), Range(Cells(Variata.Row, 70), Cells(Variata.Row, 78)), Range(Cells(Variata.Row, 90), Cells(Variata.Row, 98)))
    If conflitto(Casella, Variata) Then
    Lista = Lista & " - " & Casella.Address(RowAbsolute:=False, ColumnAbsolute:=False)
    Select Case Casella.Column
    Case 10 To 18
    Lista = Lista & " (Zaccarelli)"
    Case 30 To 38
    Lista = Lista & " (Gomito)"
    Case 50 To 58
    Lista = Lista & " (Mense)"
    Case 70 To 78
    Lista = Lista & " (Cabrini)"
    Case 90 To 98
    Lista = Lista & " (Milliario)"
    End Select
    Lista = Lista & Chr(10) & Chr(13)
    End If
    Next

    End If
    End If

    If Lista <> "" Then
    MsgBox "Conflitto con: " & Chr(10) & Chr(13) & Lista
    End If

    End If

    End Sub

    Private Function conflitto(Casella, Variata)

    If Casella.Value = Variata.Value And _
    Casella.Column <> Variata.Column And _
    Casella.Interior.Color <> RGB(128, 128, 128) And _
    Cells(13, Casella.Column) > Cells(11, Variata.Column) And _
    Cells(11, Casella.Column) < Cells(13, Variata.Column) Then
    conflitto = True
    End If

    End Function
    Ultima modifica di xtremeflier; 01-03-2012 alle 15.49.45

  12. #12
    Senior Member L'avatar di LS66
    Data Registrazione
    23-01-2007
    Messaggi
    438
    La macro mi risulta un poco oscura; puoi indicare cosa dovrebe fare?

  13. #13
    New Member
    Data Registrazione
    08-04-2011
    Messaggi
    8
    In pratica dovrebbe verificare ed evidenziare eventuali sovrapposizioni di turni nei due primi due fogli e all'interno delle tabelle dove vengono inseriti i nomi degli operatori. Sul file dal quale ho preso il codice c'é' una doppia modalita' di verifica, la prima in tempo reale (quando cambia qualcosa nelle caselle) la seconda che viene attivata da un pulsante che evidenzia le sovrapposizioni di orario compiute da un operatore. Non so se sono stato abbastanza chiaro.. Ma se mi dai una mail magari ti giro il file originario della macro

Segnalibri

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •