Visualizza Versione Completa : Calcolo ripetizioni massime - Excel
Ho un foglio con colonna A una serie di nomi in frequenza del tipo:
Pippo, Pluto, Gianni, Pippo, Pippo, Pippo, Gianni, Pluto
Mi serve da calcolare la ripetizione massima di Pippo (in questo caso 3). L'ho fatto in maniera indiretta: nella colonna B mi mette 1 se cella affianco è Pippo + somma di quella superiore e così, altrimenti 0 e riparte il calcolo quando ritrova Pippo, poi valore massimo.
Mi chiedevo c'è un modo meno grezzo di farlo?
Inoltre un foglio Excel risulta meno pesante se progettato nel modo:
>A2=F(A1)
>A3=F(A2)
oppure
>A3=F(F(A1))
dove A1 è la cella e F la funzione
ovvero è più leggero se metto una singola funzione in una cella e poi il rimando ad un altra e così via oppure se le metto tutte direttamente sulla stessa cella?
Sì, c'è un modo più rapido.
Sì, c'è un modo più rapido.
ed è anche meno "grezzo" :sisi:
Se c'è è probabilmente una funzione che "di nascosto" fa sostanzialmente quel che ho fatto Io dandoti esplicitamente il risultato
Senti, come già detto io risolvo tutto con il VB... se vuoi ti faccio il foglio excel con la funzione o te la copio qui.
Cosa vuoi che faccia? Metto su una funzione che deve fare cosa in base a che parametri?
Tipo :
Stefansen(RangeCelle;stringa)
quindi nel tuo caso per sapere la ripetizione max di "Pippo" nella colonna B dovresti inserire in una cella :
=Stefansen(B1:B999;"Pippo")
Function Stefansen(ByVal sCol As String, ByVal iInizio As Integer, ByVal iFine As Integer, _
ByVal sTesto As String) As Integer
' Cerca nella colonna sCol il massimo di ripetizioni
Dim iRow As Integer, iMax As Integer, iConteggio As Integer
Dim bCheck As Boolean
Dim sCella As String
iRow = iInizio
Do
sCella = Trim(Range(sCol & Trim(iRow)))
If sCella = "" Then
Exit Do
End If
If sCella = sTesto Then
If bCheck = False Then
bCheck = True
iMax = 1
Else
iMax = iMax + 1
End If
Else
If bCheck = True Then
bCheck = False
If iMax > iConteggio Then
iConteggio = iMax
End If
End If
End If
iRow = iRow + 1
If iRow > iFine Then
Exit Do
End If
Loop
Stefansen = iConteggio
End Function
La ripetizione di pippo è pippe
Function Stefansen(ByVal sCol As String, ByVal iInizio As Integer, ByVal iFine As Integer, _
ByVal sTesto As String) As Integer
' Cerca nella colonna sCol il massimo di ripetizioni
Dim iRow As Integer, iMax As Integer, iConteggio As Integer
Dim bCheck As Boolean
Dim sCella As String
iRow = iInizio
Do
sCella = Trim(Range(sCol & Trim(iRow)))
If sCella = "" Then
Exit Do
End If
If sCella = sTesto Then
If bCheck = False Then
bCheck = True
iMax = 1
Else
iMax = iMax + 1
End If
Else
If bCheck = True Then
bCheck = False
If iMax > iConteggio Then
iConteggio = iMax
End If
End If
End If
iRow = iRow + 1
If iRow > iFine Then
Exit Do
End If
Loop
Stefansen = iConteggio
End Function
Grazie, proverò a vederci qualcosa anche se in genere preferisco non usare il VBA
Mi serve da calcolare la ripetizione massima di Pippo (in questo caso 3). L'ho fatto in maniera indiretta: nella colonna B mi mette 1 se cella affianco è Pippo + somma di quella superiore e così, altrimenti 0 e riparte il calcolo quando ritrova Pippo, poi valore massimo.
Mi chiedevo c'è un modo meno grezzo di farlo?
Dipende, se sei uno studente universitario e hai tempo da perdere sicuramente c'è un modo meno grezzo e sicuramente più corretto.
Se usi excel come aiuto per il lavoro che fai, e vuoi risolvere la cosa senza perdere tempo in minchiate, il metodo da te usato è quello giusto.
Grazie, proverò a vederci qualcosa anche se in genere preferisco non usare il VBA
L'ho scritta in due secondi, senza troppi controlli. Ad esempio bisognerebbe controllare che iInizio sia minore di iFine...
Io ho riempito la colonna A (da A1 ad A30) di nomi, poi nella cella B1 ho inserito :
=Stefansen("A";1;30;"Pippo")
e mi è uscito nella cella il valore 3 che effettivamente era il massimo di ripetizioni...
Ho un foglio con colonna A una serie di nomi in frequenza del tipo:
Pippo, Pluto, Gianni, Pippo, Pippo, Pippo, Gianni, Pluto
Mi serve da calcolare la ripetizione massima di Pippo (in questo caso 3). L'ho fatto in maniera indiretta: nella colonna B mi mette 1 se cella affianco è Pippo + somma di quella superiore e così, altrimenti 0 e riparte il calcolo quando ritrova Pippo, poi valore massimo.
Mi chiedevo c'è un modo meno grezzo di farlo?
Inoltre un foglio Excel risulta meno pesante se progettato nel modo:
>A2=F(A1)
>A3=F(A2)
oppure
>A3=F(F(A1))
dove A1 è la cella e F la funzione
ovvero è più leggero se metto una singola funzione in una cella e poi il rimando ad un altra e così via oppure se le metto tutte direttamente sulla stessa cella?
togli tutto il puttanaio e metti
=CONTA.SE(intervallo; "pippo")
La ripetizione di pippo è pippe
ma minni ha le minne?
togli tutto il puttanaio e metti
=CONTA.SE(intervallo; "pippo")
Eh?
Conta.se mi conta il numero dei "Pippo" presenti nell'intervallo non il numero massimo di Pippo successivi
togli tutto il puttanaio e metti
=CONTA.SE(intervallo; "pippo")
Dimostri di non aver capito una sega.
Non vuole il conteggio, ma il numero massimo di ripetizioni di una stringa in una colonna
A
B
B
A
C
A
B
B
A
B
B
B
C
C
B
Per B vale 3
Comunque ho usato questa formula, dove sulla colonna A ho la lista di nomi:
Bi=se(e(Ai="Pippo",Bi-1<>0),1+Bi-1,se(e(Ai="Pippo",Bi-1=0),1,0)
e sembra funzionare
Bi-1 è la cella sopra a quella riferita per la formula
Poi trovo il valore max nella colonna B che corrisponde alla ripetizione massima di Pippo
continuo a non capire. stefansen spiegami. tu hai l'elenco. conta i pippo. la tua formula che segna 1 e somma al valore precedente è una conta.
cosa deve fare tutto sto ambaradan se arriva a tre pippo? e cosa deve fare se non arriva a tre pippo?
Bi=se(e(Ai="Pippo",Bi-1<>0),1+Bi-1,se(e(Ai="Pippo",Bi-1=0),1,0)
sta roba fa...
"se la cella a fianco è pippo e la cella sopra è diversa da zero, prendi il valore della cella sopra e sommaci 1,
altrimenti, se a fianco abbiamo pippo ma sopra abbiamo zero, restituisci 1.
se nessuno dei due casi, restituisci zero".
e quindi poi la formula che lavora con le celle di b cosa fa? per capire cosa ti serve
continuo a non capire. stefansen spiegami. tu hai l'elenco. conta i pippo. la tua formula che segna 1 e somma al valore precedente è una conta.
cosa deve fare tutto sto ambaradan se arriva a tre pippo? e cosa deve fare se non arriva a tre pippo?
Se cella A5=Pippo >>> B5=Pippo+valore(B4) se B4 diverso da 0 (ovvero A4=Pippo) altrimenti B5=1 (ricomincia l'iter)
Quindi hai
Pluto 0
Pippo 1
Pippo 2
Pippo 3
Pluto 0
Pippo 1
ti calcoli il valore massimo della colonna B è hai la sequenza più lunga di Pippo registrata
ahhhh la sequenza più lunga. ok. ci penso e ti dico
una veloce googlata: https://stackoverflow.com/questions/30633434/how-to-find-largest-sequence-of-a-given-number-in-excel
assomiglia molto alla tua idea, ma il secondo messaggio sotto propone anche una versione con due sole formule senza una colonna di supporto.
visto che con il VB è tutto più veloce? 5 minuti...
Voialtri sarà che la soluzione è più "elegante", ma state ancora analizzando il problema. io -TAC- soluzione. Peraltro parametrica e riciclabile anche in altre funzioni/fogli
visto che con il VB è tutto più veloce? 5 minuti...
Voialtri sarà che la soluzione è più "elegante", ma state ancora analizzando il problema. io -TAC- soluzione. Peraltro parametrica e riciclabile anche in altre funzioni/fogliMa non è vero, la soluzione migliore è quella del primo post. Zero sbatti, due formule in dieci secondi.
Quella di VB sicuro è più elegante e immagino che faccia più colpo ai party, ma quando lavori "basta che funzioni" :asd:
Powered by vBulletin® Version 4.2.5 Copyright © 2024 vBulletin Solutions Inc. All rights reserved.