ordinare su piu fogli e piu celle
Hai un problema con Excel? 
ordinare su piu fogli e piu celle
di sabotto (utente non iscritto) data: 13/12/2013 17:20:36
Ho 5 fogli:
dovrei confrontare la cella C5 di ognino di essi e scegliere la maggiore. In caso di parità tra due o piu fogli, confrontare la cella j5 e in caso di uletriore parità tra due o piu fogli la cella h5.
All fine ottenere la cella A5 del foglio che prevale
ESempio:
Foglio A5 C5 H5 J5
--------------------------------------------------------------------------------------
F1 PIPPO 7 4 2
F2 PLUTO 5 6 7
F3 PEPPE 8 3 5
F4 PINO 4 5 15
F5 POPO 8 14 5
La macro dovrebbe restituire POPO
Con questa macro confronto solo una cella, ma non riesco ad ampliarla per ottenere cio che voglio
Function MiglioreTerza(Quale As Integer, NomeFoglio As String, FIniz, FFin)
'Esamina tutti i punti di tutte le squadre terze classificate dei fogli indicati
'e prende la prima o la seconda o la terza, ecc in base al parametro Quale
'Quale si riferisce a quale valore piu grande si vuole
'1 = il primo
'2 = il secondo
'ecc
Dim i As Integer
Application.Volatile
rangemax = "'" & NomeFoglio & FIniz & ":" & NomeFoglio & FFin & "'!C25"
Ma = Evaluate("Large(" & rangemax & "," & Quale & ")")
For i = FIniz To FFin
If Worksheets(NomeFoglio & i).Range("C25").Value = Ma Then
MiglioreTerza = Worksheets(NomeFoglio & i).Range("A25")
End If
Next i
End Function |
di gaetanopr data: 13/12/2013 19:02:48
Ciao nella richiesta parli di C5-J5-H5 ma nella macro è indicata la C25, comunque prova questa che ti allego sarebbe,se va bene, da completare con la dichiarazione delle variabili ect ect.
La macro è sviluppata in modo tale che almeno una delle tre celle deve dare un risultato maggiore univoco, altrimenti va in errore, se questo è garantito(cioè un risultato univoco maggiore) va bene altrimenti si dovrebbe gestire anche la possibilità di non avere tra le tre celle un risultato valido.
Function MiglioreTerza(Quale As Integer, NomeFoglio As String, FIniz, FFin)
'Esamina tutti i punti di tutte le squadre terze classificate dei fogli indicati
'e prende la prima o la seconda o la terza, ecc in base al parametro Quale
'Quale si riferisce a quale valore piu grande si vuole
'1 = il primo
'2 = il secondo
'ecc
Dim i As Integer
Application.Volatile
Controllo = 0
Cella = Array("C5", "J5", "H5")
ricalcolo:
rangemax = "'" & NomeFoglio & FIniz & ":" & NomeFoglio & FFin & "'!" & Cella(Controllo)
Ma = Evaluate("Large(" & rangemax & "," & Quale & ")")
For i = FIniz To FFin
If Worksheets(NomeFoglio & i).Range(Cella(Controllo)).Value = Ma Then
M = M + 1
NFoglio = i
End If
Next i
If M = 1 Then
MiglioreTerza = Worksheets(NomeFoglio & NFoglio).Range("A25")
ElseIf M > 1 Then
Controllo = Controllo + 1
M = 0
GoTo ricalcolo
End If
End Function |
di gaetanopr data: 13/12/2013 19:11:17
Naturalmente se la cella da restituire è l'A5, questa parte và modificata
MiglioreTerza = Worksheets(NomeFoglio & NFoglio).Range("A25") |
di sabotto (utente non iscritto) data: 13/12/2013 19:44:27
CON qUALE = 1 (cioè la migliore) funziona.
Con Quale = 2 (la seconda migliore) no
E comunque, si: puo succedere che tutte le celle abbiano sia C25 che J25 che H25 uguali
Come dovrei gestirli?
Allego tuo esempio modificato per adattarlo alla mia realtà. In particolare i fogli da esaminare si chiamano G9 fino a G13
e quindi non li passo come parametro ma li metto direttamente nella macro.
Grazie come sempre
Function MiglioreTerza9_13(Quale As Integer)
'Esamina tutti i punti di tutte le squadre terze classificate dei fogli indicati
'e prende la prima o la seconda o la terza, ecc in base al parametro Quale
'Quale si riferisce a quale valore piu grande si vuole
'1 = il primo
'2 = il secondo
'ecc
Dim i As Integer
Application.Volatile
Controllo = 0
Cella = Array("C25", "J25", "H25")
ricalcolo:
rangemax = "'G9:G13'!" & Cella(Controllo)
Ma = Evaluate("Large(" & rangemax & "," & Quale & ")")
For i = 9 To 13
If Worksheets("G" & i).Range(Cella(Controllo)).Value = Ma Then
M = M + 1
NFoglio = i
End If
Next i
If M = 1 Then
MiglioreTerza9_13 = Worksheets("G" & NFoglio).Range("A25")
ElseIf M > 1 Then
Controllo = Controllo + 1
M = 0
GoTo ricalcolo
End If
End Functionl |
di gaetanopr data: 13/12/2013 19:47:54
cit>>Come dovrei gestirli?
questo devi dirmelo tu cioè in questo caso la funzione che risultato dovrà restituire???
di sabotto (utente non iscritto) data: 13/12/2013 19:49:13
aggiungo che la seconda migliore non funge proprio perchè si verifica che tutte e tre le celle dei due fogli (secondi in classifica) hanno gli stessi valori. In tal caso Mi basterebbe che mi restituisse un testo tipo "da sorteggiare tra" nomifogli interessati
di sabotto (utente non iscritto) data: 13/12/2013 20:09:54
Al monento ho risolto cosi (vedi terzultima riga)
Function MiglioreTerza9_13(Quale As Integer)
'Esamina tutti i punti di tutte le squadre terze classificate dei fogli indicati
'e prende la prima o la seconda o la terza, ecc in base al parametro Quale
'Quale si riferisce a quale valore piu grande si vuole
'1 = il primo
'2 = il secondo
'ecc
Dim i As Integer
Dim Controllo As Integer
Dim NFoglio As Integer
Application.Volatile
Controllo = 0
Cella = Array("C25", "J25", "H25")
ricalcolo:
rangemax = "'G9:G13'!" & Cella(Controllo)
Ma = Evaluate("Large(" & rangemax & "," & Quale & ")")
For i = 9 To 13
If Worksheets("G" & i).Range(Cella(Controllo)).Value = Ma Then
M = M + 1
NFoglio = i
End If
Next i
If M = 1 Then
MiglioreTerza9_13 = Worksheets("G" & NFoglio).Range("A25")
ElseIf M > 1 Then
Controllo = Controllo + 1
If Controllo < 2 Then
M = 0
GoTo ricalcolo
Else
MiglioreTerza9_13 = "Da Sorteggiare"
End If
End If
End Function |
di gaetanopr data: 13/12/2013 20:46:18
Perchè al momento non va bene?
di sabotto (utente non iscritto) data: 13/12/2013 21:38:19
si, intendevo che non ho implementato di farmi dare i fogli nei quali ci sono le celle eventyalmente uguali.
Ma va benissimo cosi.
Grazie ancora, sei stato molto utile e veloce.
Vuoi Approfondire?