-
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
-
Senior Member
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.
-
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!!
-
Senior Member
Di nulla.
Io ho usato la funzione MAX, però vedi tu.
Ciao.
-
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?
-
Senior Member
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.
-
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...
-
Senior Member
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?
-
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..
-
Senior Member
Mi incuriosisce.
Non è che puoi allegarmi il foglio (ovviamente pulito e con solo la formula in questione)?
-
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
-
Senior Member
La macro mi risulta un poco oscura; puoi indicare cosa dovrebe fare?
-
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
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
-
Regole del Forum
Segnalibri