web-dev-qa-db-fra.com

vlookup avec plusieurs colonnes

J'ai la formule suivante dans ma colonne B: B

=VLOOKUP(A1;'mySheet'!$A:$B;2;FALSE)

Il affiche en B: B les valeurs trouvées dans la feuille de calcul! B: B où A: A = mySheet! A: A. Ça fonctionne bien. Maintenant, j'aimerais aussi avoir la troisième colonne. Cela fonctionne si j'ajoute la formule suivante à toute la colonne C: C:

=VLOOKUP(A1;'mySheet'!$A:$C;3;FALSE)

Cependant, je travaille avec plus de 100 000 lignes et environ 40 colonnes. Je ne veux pas faire 100k * 40 * VLOOKUP, je voudrais seulement le faire 100k et ne pas avoir à le multiplier par toutes les colonnes. Existe-t-il un moyen (avec des formules matricielles peut-être) de ne faire que VLOOKUP une fois par ligne pour obtenir toutes les colonnes dont j'ai besoin?


exemple de données

ID|Name
-------
 1|AB
 2|CB
 3|DF
 4|EF

ID|Column 1|Column 2
--------------------
 1|somedata|whatever1
 4|somedate|whatever2
 3|somedaty|whatever3

Je voudrais obtenir:

ID|Name|Column 1|Column 2
-------------------------
 1|AB  |somedata|whatever1
 2|CB  |        |
 3|DF  |somedaty|whatever2
 4|EF  |somedate|whatever3
6
dnLL

INDEX fonctionne rapidement que VLOOKUP, je vous recommande de l'utiliser. Cela réduira la tension que beaucoup de vlookups mettraient sur votre système.

Commencez par trouver la ligne contenant ce dont vous avez besoin dans une colonne d'assistance avec MATCH:

=MATCH(A1,'mySheet'!$A:$A,0)

Ensuite, un INDEX utilisant ce numéro, que vous pouvez faire glisser et remplir toutes vos colonnes avec:

=INDEX('mySheet'!B:B,$B1)

Votre sortie s'apparenterait à:

ID|Name|Match |Column 1 |Column 2
-------------------------
 1|AB  |Match1|IndexCol1|IndexCol2
 2|CD  |Match2|IndexCol1|IndexCol2
 3|EF  |Match3|IndexCol1|IndexCol2

Également! Je recommanderais de définir ces plages pour couvrir les données plutôt que de faire référence à la colonne entière pour des gains de vitesse supplémentaires, par exemple

=INDEX('mySheet'!B1:B100000,$B1)
3
Aaron Contreras

Je réfléchissais davantage à votre problème et si vous pouviez contrôler les données que vous consultez, j'ai une autre suggestion que vous pourriez essayer.

Dans 'mysheet', où les données brutes sont conservées, ajoutez une nouvelle colonne qui concatène chaque colonne dans une cellule, avec une sorte de diviseur unique ne figurant pas dans vos données:

=B1&"+"&C1&"+"&D1&"+"&E1 etc...

Ensuite, vous pouvez créer un VLOOKUP ou un INDEX/MATCH pour chaque ligne, au lieu de 40.

Une fois que vous l'avez dans votre nouvelle feuille, vous pouvez fractionner les résultats.


Fractionnement sans formules

Copiez/collez les résultats des formules de recherche en tant que Values ​​dans la colonne suivante.

Sélectionnez cette colonne et, dans l'onglet Données de votre ruban, sélectionnez Texte en colonnes

Laissez-le sur Délimité , appuyez sur Suivant . Décochez Tab , cochez Autre , et entrez votre délimètre (+ dans mon exemple).

Cliquez sur Terminer .


Fractionner avec des formules

Utilisez =FIND() pour localiser chaque délimiteur et =MID() pour extraire le texte entre chaque ensemble de délimètres, en utilisant le délimiteur précédent comme numéro de départ.

Certainement la plus complexe des deux méthodes.

2
Aaron Contreras

Si je comprends bien, je commencerais par utiliser =VLOOKUP(A1;'mySheet'!$A:LastColumn;COLUMN(B1);FALSE). De cette façon, votre référence de colonne se déplacera lorsque vous faites glisser votre Vlookup vers la droite.

1
114

Aucune formule.Aucune sortie. Donc, il ne peut y avoir aucun moyen d'appliquer une formule sur une colonne uniquement et de passer aux autres ... Un autre moyen envisageable est de mettre une formule dans une cellule, d'utiliser intelligemment les signes $ et de les déplacer dans toutes les cellules d'un giffy sans avoir à mettre vlookup 40 fois.

Vlookup a 4 codes à saisir

1 - Valeur de recherche. Utilisez ce $A1 (mettez $ sur A et non 1)

2 - Données source- Mettez $ signes everywhere

3 - Index de colonnes no. Juste au-dessus de vos données, dans la 1ère ligne, ajoutez une ligne vide.Mettez les valeurs 1 dans A1, 2 dans B1, 3 dans C1, etc. Maintenant dans la formule, au lieu de mettre manuellement "2" ou "3" Donnez une référence à ces cellules. Mettez $ sur Numberal et non sur la colonne (B$1). 

4 - Type false ou 0

Ensuite, faites-le glisser partout.

0
Rahul Shah
  1. Valeur de recherche. Utilisez ce $ A1 (mettez $ sur A et non 1)
  2. Données source - Placez les signes $ partout
  3. Numéro de colonne Utilisez simplement le nom de colonne à partir duquel les données doivent être extraites (par exemple, COLUMN (B1) si la valeur de recherche se trouve dans la colonne A et que vous voulez une valeur dans la colonne B).
  4. Tapez false ou 0
0
user6920348