Comment trouver une ligne correspondante dans Excel?

Donné

Une clé de recherche

---------------------------
|   |  A  | B | C |   D   |
---------------------------
| 1 | 01  | 2 | 4 | TextA |
---------------------------

Une feuille Excel

------------------------------
|   |  A | B | C |   D   | E |
------------------------------
| 1 | 03 | 5 | C | TextZ |   |
------------------------------
| 2 | 01 | 2 | 4 | TextN |   |
------------------------------
| 3 | 01 | 2 | 4 | TextA |   |
------------------------------
| 4 | 22 | T | N | TextX |   |
------------------------------

Question

Je voudrais avoir une fonction comme ceci: f(clé) -> result_row.

Qui signifie: étant donné une clé de recherche (01, 2, 4, TextA), la fonction est de me dire que la ligne correspondante est 3 dans l'exemple ci-dessus.

Les valeurs dans la clé de recherche (A, B, C, D) est un identificateur unique.

Comment puis-je obtenir le numéro de ligne de la ligne correspondante?

Une solution

La solution qui vient en premier à l'esprit est d'utiliser Visual Basic pour Applications (VBA) pour analyser la colonne A pour "01". Une fois j'ai trouvé une cellule contenant "01", j'aimerais vérifier les cellules adjacentes dans les colonnes B, C et D si elles correspondent à mes critères de recherche.

Je suppose que l'algorithme fonctionne. Mais: est-il une meilleure solution?

Version

  • Excel 2000 9.0.8961 SP3
  • VBA 6.5

Toutefois, si vous connaissez une solution dans toutes les versions ultérieures d'Excel ou VBA, je suis curieux de savoir en tant que bien.

Edit: 22.09.2010

Merci à vous tous pour vos réponses. @MikeD: très belle fonction, merci!!!!

Ma solution

Voici la solution que j'ai prototypé. Tout est codé en dur, trop verbeux et non pas une fonction comme dans MikeD de la solution. Mais je vais le réécrire dans mon application réelle pour prendre des paramètres et retourner une valeur de résultat.

Sub FindMatchingRow()
    Dim searchKeyD As Variant
    Dim searchKeyE As Variant
    Dim searchKeyF As Variant
    Dim searchKeyG As Variant

    Const indexStartOfRange As String = "D6"
    Const indexEndOfRange As String = "D9"

    ' Initialize search key
    searchKeyD = Range("D2").Value
    searchKeyE = Range("E2").Value
    searchKeyF = Range("F2").Value
    searchKeyG = Range("G2").Value


    ' Initialize search range
    myRange = indexStartOfRange + ":" + indexEndOfRange

    ' Iterate over given Excel range
    For Each myCell In Range(myRange)

        foundValueInD = myCell.Offset(0, 0).Value
        foundValueInE = myCell.Offset(0, 1).Value
        foundValueInF = myCell.Offset(0, 2).Value
        foundValueInG = myCell.Offset(0, 3).Value

        isUnitMatching = (searchKeyD = foundValueInD)
        isGroupMatching = (searchKeyE = foundValueInE)
        isPortionMatching = (searchKeyF = foundValueInF)
        isDesignationMatching = (searchKeyG = foundValueInG)
        isRowMatching = isUnitMatching And isGroupMatching And isPortionMatching And isDesignationMatching

        If (isRowMatching) Then
            Range("D21").Value = myCell.Row
            Exit For
        End If

    Next myCell
End Sub

C'est la feuille Excel qui va avec le code ci-dessus:

Comment trouver une ligne correspondante dans Excel?

OriginalL'auteur Lernkurve | 2010-09-21