Comment joindre deux feuilles de calcul dans Excel comme je le ferais avec SQL?

121

J'ai deux feuilles de calcul dans deux fichiers Excel différents. Ils contiennent tous deux une liste de noms, des numéros d'identification et les données associées. L'une est une liste principale qui comprend des champs démographiques généraux et l'autre est une liste qui comprend uniquement le nom, l'id et une adresse. Cette liste a été réduite de la liste principale par un autre bureau.

Je veux utiliser la 2ème liste pour filtrer la première. De plus, je souhaite que les résultats incluent d'autres champs de la feuille de calcul principale à côté des champs d'adresse de la deuxième feuille de calcul. Je sais que je pourrais très facilement faire cela avec une jointure interne de base de données, mais je suis moins clair sur la manière de le faire efficacement dans Excel. Comment peut-on joindre deux feuilles de calcul dans Excel? Des points bonus pour montrer comment faire des jointures externes également, et je préférerais grandement savoir comment faire cela sans avoir besoin d'une macro.

Joel Coehoorn
la source
1
Je trouve la page suivante très utile: randomwok.com/excel/how-to-use-index-match
Tommy Bravo
randomwok.com/excel/how-to-use-index-match => surtout le "rappel" facile à la fin:=INDEX ( Column_I_want_a_return_value_from , ( MATCH ( My_Lookup_Value , Column_I_want_to_Lookup_against , 0 ))
Tommy Bravo

Réponses:

157

Pour 2007+ utilisation Data> From Other Sources> From Microsoft Query:

  1. choisissez Excel Fileet sélectionnez votre 1er excel
  2. choisissez des colonnes
    (si vous ne voyez aucune liste de colonnes, vérifiez Options> System Tables)
  3. aller à Data> Connections> [choisir la connexion vient de créer]> Properties> Definition>Command text

Vous pouvez maintenant éditer ceci en Command texttant que SQL. Je ne sais pas quelle syntaxe est suportée, mais j'ai essayé les jointures implicites, "jointure interne", "jointure gauche" et les unions qui fonctionnent toutes. Voici un exemple de requête:

SELECT *
FROM `C:\Users\Peter\Documents\Excel-to-excel\Source_1.xlsx`.`Sheet1$` a
LEFT JOIN `C:\Users\Peter\Documents\Excel-to-excel\Source_2.xlsx`.`Sheet1$` b
ON a.col2 = b.col2
Un million
la source
1
Existe-t-il un moyen d'éviter de coder en dur le chemin? Le chemin relatif fonctionnerait-il?
Rekin
25
En prime, Microsoft Query vous permet d'utiliser des contrôles communs de style 16 bits pour ouvrir le fichier Excel et les boîtes de message. De cette façon, vous pouvez vous rappeler quand vous étiez jeune. :-)
Edward Brey
Est-ce que cela fonctionne avec les fichiers CSV? J'utilise MS Office Professional Plus 2010 et je ne vois pas comment suivre l'étape 3. Est-ce que je laisse la boîte de dialogue de l'étape 2 en suspens? Il n'y a pas de "choisissez votre nouvelle connexion" dans la boîte de dialogue Connexions.
John Freeman
@JohnFreeman parce que vous devez choisir l' une des options disponibles en fonction de vos besoins (par exemple, "Ajouter ...")
Avril
3
Notez que vous pouvez obtenir une boîte de dialogue indiquant "Cette source de données ne contient pas de tables visibles", suivie d'une boîte de dialogue "Assistant de requête - Choisir les colonnes". C’est à partir de cette boîte de dialogue que vous souhaitez cliquer sur le bouton "Options", puis cochez la case "Tables système" pour afficher les données que vous souhaitez interroger.
Tola Odejayi
11

Soutenez la réponse acceptée. Je veux juste insister sur "choisir des colonnes (si vous ne voyez aucune liste de colonnes, assurez-vous de cocher Options> Tables système)"

Une fois que vous avez sélectionné le fichier Excel, vous verrez probablement apparaître une this data source contains no visible tablesinvite, et les onglets et les colonnes disponibles sont nuls. Microsoft a admis qu'il était erroné que les onglets des fichiers Excel soient traités comme des "tables système" et que l'option "tables système" ne soit pas sélectionnée par défaut. Donc, ne paniquez pas à cette étape, il vous suffit de cliquer sur "option" et de cocher "Tables système", vous verrez alors les colonnes disponibles.

Ben Lin
la source
8

VLOOKUP et HLOOKUP peuvent être utilisés pour rechercher des clés primaires correspondantes (stockées verticalement ou horizontalement) et renvoyer des valeurs à partir de colonnes / lignes 'attribut'.

Reuben L.
la source
très utile pour les feuilles sur le même classeur (mais je trouve les fonctions INDEX + MATCH encore plus utiles), un peu plus compliqué lors de la mise à jour de données à partir de classeurs externes fermés ...
Avril
7

Vous pouvez utiliser Microsoft Power Query, disponible pour les versions plus récentes d'Excel (similaire à la réponse acceptée, mais beaucoup plus simple et facile). Power Query appelle les jointures "fusionne".

Le plus simple est d’avoir vos 2 feuilles Excel sous forme de tableaux Excel. Ensuite, dans Excel, accédez à l'onglet du ruban Power Query, puis cliquez sur le bouton "À partir d'Excel". Une fois que vous avez importé les deux tables dans Power Query, sélectionnez-en une et cliquez sur "Fusionner".

un autrefred
la source
3
Tellement plus facile que les autres options proposées. Cela devrait être la réponse! Power Query est maintenant inclus dans Excel 2016 sous l' onglet Données .
SliverNinja - MSFT
1
Une autre fonctionnalité qui ne semble pas exister sur le Mac
juandesant
4

Bien que je pense que la réponse d’Aprillion à l’utilisation de Microsoft Query soit excellente, elle m’a inspiré pour utiliser Microsoft Access afin de rejoindre les feuilles de données, ce que j’ai trouvé beaucoup plus facile.

Bien entendu, vous devez avoir installé MS Access.

Pas:

  • Créez une nouvelle base de données Access (ou utilisez une base de données de travail).
  • Utilisez Get External Datapour importer vos données Excel comme nouvelles tables.
  • Utilisez Relationshipspour montrer comment vos tables sont jointes.
  • Définissez le type de relation pour correspondre à ce que vous voulez (représentant la jointure gauche, etc.)
  • Créez une nouvelle requête qui joint vos tables.
  • Utilisez External Data->Export to Excelpour générer vos résultats.

Je n'aurais vraiment pas pu le faire sans la bonne réponse de Aprillion.

Dizzley
la source
Je n'ai jamais utilisé l'accès avant aujourd'hui, mais cela ne m'a pris que 10 minutes. J'ai copié / collé les colonnes Excel dans 2 tables au lieu d'importer.
Jiggunjer
3

Vous ne pouvez pas préformer des jointures de style SQL sur des tableaux Excel à partir d'Excel. Cela dit, il existe de nombreuses façons d’accomplir ce que vous essayez de faire.

Dans Excel, comme le dit Reuben, les formules qui fonctionneront probablement le mieux sont VLOOKUPet HLOOKUP. Dans les deux cas, vous faites correspondre une ligne unique et renvoie la valeur de la colonne \ rangée à gauche \ bas de l'id trouvé.

Si vous souhaitez uniquement ajouter quelques champs supplémentaires à la deuxième liste, ajoutez les formules à la deuxième liste. Si vous souhaitez une table de style "jointure externe", ajoutez la VLOOKUPformule à la première liste avec ISNApour vérifier si la recherche a été trouvée. Si l'aide de Excel ne vous fournit pas suffisamment de détails sur leur utilisation dans votre cas particulier, contactez-nous.

Si vous préférez utiliser SQL, liez les données à votre programme de base de données, créez votre requête et exportez les résultats vers Excel. (Dans Access, vous pouvez importer des feuilles de calcul Excel ou des plages nommées sous forme de table liée.)

mischab1
la source
12
en fait, vous pouvez - cela s'appelle Microsoft Query
avril
3

Chez XLTools.net, nous avons créé une bonne alternative pour que MS Query fonctionne particulièrement avec les requêtes SQL par rapport aux tableaux Excel. Il s'appelle XLTools SQL Queries . Il est beaucoup plus facile à utiliser que MS Query et fonctionne vraiment bien si vous avez juste besoin de créer et d'exécuter SQL - pas de VBA, pas de manipulations complexes avec MS Query ...

Avec cet outil, vous pouvez créer n’importe quelle requête SQL avec des tables de classeurs Excel à l’aide de l’éditeur Embedded SQL et l’exécuter immédiatement avec l’option permettant de placer le résultat dans une nouvelle ou une feuille de calcul existante.

Vous pouvez utiliser presque tous les types de jointure, y compris LEFT OUTER JOIN (seuls RIGHT OUTER JOIN et FULL OUTER JOIN ne sont pas pris en charge).

Voici un exemple:

XLTools SQL Queries - Générateur de requêtes

Peter Liapin
la source
2

Pour Excel 2007 User: Données> Autres sources> De Microsoft Query> accédez au fichier Excel

Selon cet article , une requête à partir de la version 2003 de XLS peut générer un message "Cette source de données ne contient aucune table visible". erreur car vos feuilles de calcul sont traitées comme une table SYSTEM. Vérifiez donc les "Tables système" dans les options de la boîte de dialogue "Assistant de requête - Choisir les colonnes" lors de la création de la requête.

Pour définir votre jointure: boîte de dialogue Microsoft Query> menu Tableau> Jointures ...

Pour renvoyer les données à votre feuille Excel d'origine, choisissez "Renvoyer les données à une feuille Excel" dans la boîte de dialogue Microsoft Query> menu Fichier.

clarkttfu
la source
0

Si vous connaissez suffisamment les bases de données, vous pouvez utiliser SQL Server pour connecter les deux feuilles de calcul en tant que serveurs liés, puis utiliser T-SQL pour effectuer le travail relatif aux données back-end. Terminez ensuite en reliant Excel à SQL et extrayez les données dans une table (normale ou pivot). Vous pouvez également envisager d'utiliser Powerpivot; cela permettra des jointures entre toutes les sources de base de données, y compris Excel utilisé comme base de données plate.

dav
la source
2
Vous avez raison, mais la question initiale est basée sur l'utilisation d'un tableur (ou deux) pour effectuer une fonction de base de données, donc je ne suis pas sûr d'un moyen vraiment efficace d'accomplir cette tâche.
dav
0

En cherchant le même problème, je suis tombé sur RDBMerge , qui, à mon avis, est un moyen convivial de fusionner des données de plusieurs classeurs Excel, csv et xml dans un classeur de synthèse.

lalthomas
la source