web-dev-qa-db-fra.com

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

J'ai deux feuilles de calcul dans deux fichiers Excel différents. Ils contiennent tous deux une liste de noms, de numéros d'identification et de 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 façon de le faire efficacement dans Excel. Comment 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.

115
Joel Coehoorn

Pour 2007+, utilisez Data> From Other Sources> From Microsoft Query:

  1. choisissez Excel File et sélectionnez votre 1er Excel
  2. choisir des colonnes
    (si vous ne voyez pas de liste de colonnes, cochez la case Options> System Tables)
  3. allez à Data> Connections> [choisissez la connexion que vous venez de créer]> Properties> Definition> Command text

Vous pouvez maintenant éditer ce Command text en tant que SQL. Je ne sais pas quelle syntaxe est utilisé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
154
Aprillion

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 l'invite this data source contains no visible tables et les onglets et les colonnes disponibles sont nuls. Microsoft a admis qu'il s'agissait d'un bogue que les onglets des fichiers Excel sont traités comme des "tables système" et que l'option "tables système" n'est 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.

11
Ben Lin

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 d'attributs.

8
Reuben L.

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 moyen 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".

6
anotherfred

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 VLOOKUP et HLOOKUP. Dans les deux cas, vous faites correspondre une ligne unique et renvoie la valeur de la colonne donnée\ligne à gauche\bas à partir 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 formule VLOOKUP à la première liste avec ISNA pour 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.)

3
mischab1

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 pour 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 Data pour importer vos données Excel sous forme de nouvelles tables.
  • Utilisez Relationships pour 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 Excel pour générer vos résultats.

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

3
Dizzley

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 très 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 - Query Builder

3
Peter Liapin

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

Selon cet article , l’interrogation à partir de la version 2003 de XLS pourrait donner comme résultat "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 "Requête Wizard - 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.

2
clarkttfu

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.

0
dav

À la recherche du 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.

0
lalthomas