excel 2003/2007-un valore massimo di una colonna al cambio di un valore di un'altra colonna

Ciao a tutti,
nel foglio1 ho questa situazione :

colonnaA;colonnab;colonnaC

AAA    1    campoa
AAA    2    campob
AAA    3    campoc
BBB    1    campoc
BBB    2    vbdfhj
BBB    3    dddddd
BBB    4    rrrr
CCC    1    campocccc
CCC    2    campobbbb
CCC    3    campocxxx

nel foglio 2 la situazione dovrebbe diventare

AAA    3    campoc
BBB    4    rrrr
CCC    2    campocxxx

in pratica , il valore massimo della colonna A e il relativo valore (presente nella colonnaC)
Quali formule utilizzare , secondo voi?
grazie mille 
 

Informazioni domanda


Ultimo aggiornamento febbraio 21, 2018 Visualizzazioni 308 Si applica a:
Risposta
Ciao a tutti,
nel foglio1 ho questa situazione :

colonnaA;colonnab;colonnaC

AAA    1    campoa
AAA    2    campob
AAA    3    campoc
BBB    1    campoc
BBB    2    vbdfhj
BBB    3    dddddd
BBB    4    rrrr
CCC    1    campocccc
CCC    2    campobbbb
CCC    3    campocxxx

nel foglio 2 la situazione dovrebbe diventare

AAA    3    campoc
BBB    4    rrrr
CCC    2    campocxxx

in pratica , il valore massimo della colonna A e il relativo valore (presente nella colonnaC)
Quali formule utilizzare , secondo voi?
grazie mille 


Voilà tutto automatico...;-)

 

Public Sub m()

    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    Dim lRiga As Long
    Dim lng As Long
    Dim col As Collection
    Dim v As Variant
    Dim rng As Range
    Dim vVal As Variant
    Dim c As Range
    Dim lCont As Long
   
    With ThisWorkbook
        Set sh1 = .Worksheets("Foglio1")
        Set sh2 = .Worksheets("Foglio2")
    End With
   
    Set col = New Collection
    lCont = 1
   
    With sh1
   
        lRiga = .Range("A" & .Rows.Count).End(xlUp).Row
        On Error Resume Next
       
        For lng = 2 To lRiga
            col.Add CStr(.Cells(lng, 1).Value), _
                CStr(.Cells(lng, 1).Value)
        Next
       
        On Error GoTo 0
       
        For Each v In col
            .Range("A1").AutoFilter , field:=1, Criteria1:="=" & v
            Set rng = .Range("B1:B" & lRiga).SpecialCells(xlCellTypeVisible)
            vVal = Evaluate("=MAX(" & rng.Address & ")")
            Set c = rng.Find( _
                    What:=vVal, _
                    LookIn:=xlValues, _
                    LookAt:=xlWhole, _
                    SearchOrder:=xlRows, _
                    SearchDirection:=xlNext, _
                    MatchCase:=True)
            sh2.Range("A" & lCont).Value = c.Offset(0, -1).Value
            sh2.Range("B" & lCont).Value = c.Value
            sh2.Range("C" & lCont).Value = c.Offset(0, 1).Value
            lCont = lCont + 1
            .Range("A1").AutoFilter
        Next
       
    End With
   
    Set rng = Nothing
    Set c = Nothing
    Set col = Nothing
    Set sh2 = Nothing
    Set sh1 = Nothing
   
End Sub

NOTA. I dati in colonna A del Foglio1 possono non essere preventivamente ordinati, funziona ugualmente.

Qui il file utilizzato per l'esempio:

http://www.maurogsc.eu/esempiforum12/maxdiognidato.zip

 

--
Mauro Gamberini
Microsoft© MVP (Excel)
http://www.maurogsc.eu

Il problema è stato risolto?

Siamo spiacenti che questo non sia stato d'aiuto.

Fantastico! Grazie per aver scelto questa risposta.

Sei soddisfatto di questa risposta?

Grazie per il tuo commento, ci aiuta a migliorare il sito.

Sei soddisfatto di questa risposta?

Grazie per il tuo commento.