web-dev-qa-db-fra.com

rechercher un index de ligne d'un nombre qui s'est produit en premier

J'ai A colonne qui a des valeurs dans un ordre aléatoire comme

       A column
           2
           3
           4
           2
           5
           6
           4
           3
           4

Je veux l'index de ligne d'un nombre particulier qui s'est produit en premier. dire si je dis que le nombre est 4, la valeur renvoyée doit être 3

Je veux aussi l'index de ligne d'un nombre particulier qui s'est produit en dernier. Si je dis que le nombre est 3 alors la valeur retournée doit être 8

Je pensais que la fonction Vlookup ou find devait faire la tâche mais je ne pouvais pas les mettre en ordre.

19
niko

Mes exemples recherchent le nombre 3 mais c'est facile à adapter.

Pour trouver la première occurrence, vous pouvez utiliser:

=MATCH(3,A:A,0)

Pour trouver le dernier, vous pouvez utiliser une formule matricielle (valider avec Ctrl+Shift+Enter)

{=MAX(IF(A1:A10=3,ROW(A1:A10),0))}

Notez que vous auriez également pu utiliser une formule matricielle pour la première avec un MIN mais ce serait assez compliqué pour ce que ça vaut.

41
JMax

Salut ami, vous pouvez utiliser des macros pour ce faire

Utilisez le code suivant

Sub FindNumbers()

    Sheet1.Range("B:D") = ""
    Application.ScreenUpdating = False
    tot = Sheet1.Range("A1048575").End(xlUp).Row
    i = 1
    k = 1
    m = 1
    n = 1
    o = 1
    p = 1

    For i = 1 To tot
            c = Application.WorksheetFunction.CountIf(Sheet1.Range("B:B"), Sheet1.Range("A" & i).Value)
            If c <= 0 Then
            Sheet1.Range("B" & k).Value = Sheet1.Range("A" & i).Value
            k = k + 1
            End If
    Next

    tots = Sheet1.Range("B1048575").End(xlUp).Row

    For m = 1 To tots
        For n = 1 To tot
            If Sheet1.Range("B" & m).Value = Sheet1.Range("A" & n).Value Then
            Sheet1.Range("D" & m).Value = n
            End If
        Next
    Next

    For o = 1 To tots
        For p = 1 To tot
            If Sheet1.Range("B" & o).Value = Sheet1.Range("A" & p).Value Then
            Sheet1.Range("C" & o).Value = p
            p = tot
            End If
        Next
    Next

    Application.ScreenUpdating = True

End Sub

Comment utiliser le code? (Dans le cas où vous êtes nouveau dans la macro)

  1. Ouvrez un nouveau fichier Excel

  2. Appuyez sur Alt + F11

  3. Insérez un nouveau module

  4. Collez le code dans le module

  5. Revenez à la feuille Excel et ajoutez un bouton

  6. Attribuez la macro "FindNumbers" au bouton

  7. Enregistrez Excel au format .xlsm si vous utilisez Excel 2007 ou 2010

  8. Aidez-moi

  9. Colonne A: entrez vos données dans la colonne A et cliquez sur le bouton ou exécutez la macro

  10. Appuyez sur le bouton ou exécutez la macro

Votre résultat sera comme ça

Colonne B: nombres uniques dans les données saisies dans la colonne A

Colonne C: première occurrence de données

Colonne D: dernière occurrence de données

2
Kannan Suresh