ordinare su piu fogli e piu celle



  • 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.