Stellar Blade Un'esclusiva PS5 che sta facendo discutere per l'eccessiva bellezza della protagonista. Vieni a parlarne su Award & Oscar!

Excel Forum Per condividere esperienze su Microsoft Excel

VBA - Trovare riga con funzione Match con più criteri

  • Messaggi
  • OFFLINE
    LucaT.
    Post: 22
    Registrato il: 22/04/2017
    Città: UDINE
    Età: 58
    Utente Junior
    Excel 2016
    00 23/01/2021 15:47
    VBA - Trovare numero riga con funzione MATCH con più criteri di ricerca - RISOLTO
    Sto sviluppando un foglio di lavoro molto più complesso di quello che qui allego, in una tabella devo trovare il numero di riga cercandola con più criteri contenuti nella medesima riga solo in colonne differenti. Esempio:
    ColonnaA      ColonaB            ColonnaC
    Controllo       Dal                     AL                (<----Intestazioni di colonna)
    4000             01/01/2021        15/01/2021
    4001             10/02/2021        16/02/2021
    4002             10/02/2021        28/02/2021
    4003             15/01/2021        31/01/2021

    Quindi se i criteri sono "4002 10/02/2021 28/02/2021" dovrebbe restituirmi il valore della riga n. 4 in una variabile per poi poterla poter utilizzare nelle successive righe di programma.

    Nel foglio che allego ho elaborato in un Modulo due "Prove" di esempio una la "Prova1" che funziona utilizzando direttamente i riferimenti delle celle del foglio, un'altra la "Prova2" che non mi funziona ed è quella che mi serve utilizza le variabili.

    Cortesemente riuscireste a farmi funzionare la Prova2 del mio foglio?

    In anticipo ringrazio. Di seguito il codice VBA:

    CODICE VBA PROVA 1 - FUNZIONANTE

    Sub Prova1()
    Riga = Evaluate("=IfError(MATCH(E2&F2&G2,A1:A11&B1:B11&C1:C11,0),"""")")

    Range("I2") = Val(Riga)

    MsgBox ("Crit1 " & Range("E2") & vbNewLine & _
    "Crit2 " & Range("F2") & vbNewLine & _
    "Crit3 " & Range("G2") & vbNewLine & _
    "Riga " & Riga)
    End Sub


    CODICE VBA PROVA 2 - NON FUNZIONANTE

    Sub Prova2()
    Dim Crit1 As Double
    Dim Crit2, Crit3 As Date
    Dim urR, Riga As Long
    Dim Rng1, Rng2, Rng3 As String

    Crit1 = Range("E2").Value
    Crit2 = Range("F2").Value
    Crit3 = Range("G2").Value

    urR = Range("A" & Rows.Count).End(xlUp).Row - 1
    Rng1 = "A2:A" & urR
    Rng2 = "B2:S" & urR
    Rng3 = "C2:T" & urR

    Riga = Val(Evaluate("=IfError(MATCH(Crit1&Crit2&Crit3,Rng1&Rng2&Rng3,0),"""")"))

    Range("I2") = Riga

    MsgBox ("Crit1 " & Crit1 & vbNewLine & _
    "Crit2 " & Crit2 & vbNewLine & _
    "Crit3 " & Crit3 & vbNewLine & _
    "Riga " & Riga)
    End Sub
    [Modificato da LucaT. 23/01/2021 17:31]
  • OFFLINE
    locatevaresino
    Post: 2.361
    Registrato il: 21/03/2008
    Città: LOCATE VARESINO
    Età: 76
    Utente Veteran
    2007 / 13
    00 23/01/2021 16:33
    ciao


    Sub Prova2()
    Dim i As Long
    Dim cella As Variant
    For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
    cella = Cells(i, 1).Value
    If cella = Range("E2") And Cells(i, 2) = Range("F2") And Cells(i, 3) = Range("G2") Then
    Range("J2") = i
    Exit For
    End If
    Next i
    MsgBox "Riga di riferimento " & i
    End Sub



    servono solo quete righe e la funzione logica And
    Ciao da locate
    excel 2007 / 13
  • OFFLINE
    LucaT.
    Post: 22
    Registrato il: 22/04/2017
    Città: UDINE
    Età: 58
    Utente Junior
    Excel 2016
    00 23/01/2021 17:24
    Ottimo locatevaresino, il tuo codice funziona alla perfezione e ho imparato qualcosa di nuovo. 😀

    Grazie,

    LucaT.