web-dev-qa-db-fra.com

Fonction Excel pour effectuer des requêtes de type SQL sur des données de feuille de calcul?

J'ai un grand tableau dans une feuille de calcul Excel:

Column_1 | Column_2 | Column_3

ValueA       ValueB     ValueC
....

Ce dont j'ai besoin est une fonction qui prend en entrée la plage et une chaîne de requête de type SQL et renvoie une plage de lignes correspondant à la requête, par exemple:

=SQL_SELECT(A1:C1000, "SELECT * WHERE Column_1 = ValueH AND Column_3 = blah")

Est-ce que quelque chose comme ça existe? Ou quel serait le meilleur moyen de me mettre en œuvre?

Merci

54
Richard H

Vous pouvez utiliser Get External Data _ (indiquez son nom), situé dans l'onglet "Données" d'Excel 2010, pour configurer un connection dans un classeur afin d'interroger des données à partir de lui-même. Utilisation From Other SourcesFrom Microsoft Query pour se connecter à Excel

Une fois configuré, vous pouvez utiliser VBA pour manipuler le connection afin, entre autres, d’afficher et de modifier la commande SQL qui pilote la requête. Cette requête ne fait référence au classeur en mémoire, vous n'avez donc pas besoin d'une sauvegarde pour actualiser les dernières données.

Voici un rapide Sub pour montrer comment accéder aux objets de connexion

Sub DemoConnection()
    Dim c As Connections
    Dim wb As Workbook
    Dim i As Long
    Dim strSQL As String

    Set wb = ActiveWorkbook
    Set c = wb.Connections
    For i = 1 To c.Count
        ' Reresh the data
        c(i).Refresh 
        ' view the SQL query
        strSQL = c(i).ODBCConnection.CommandText
        MsgBox strSQL
    Next
End Sub
48
chris neilsen

Si vous pouvez enregistrer le classeur, vous avez la possibilité d'utiliser ADO et Jet/ACE pour traiter le classeur comme une base de données et exécuter SQL sur la feuille.

Les informations MSDN sur la façon de frapper Excel avec ADO peuvent être trouvées ici .

5
Jon Egerton

Si vous souhaitez exécuter une formule sur une feuille de calcul à l'aide d'une fonction qui exécute une instruction SQL, utilisez l'outil complémentaire A-Tools.

Exemple, function BS_SQL("SELECT ..."):

enter image description here

2

Parfois, SUM_IF peut faire le travail.

Supposons que vous disposiez d’une feuille d’informations sur le produit, y compris unique productID dans la colonne A et d’un prix unitaire dans la colonne P. Une feuille d’entrées de commande avec les ID de produit dans la colonne A et que vous souhaitiez que la colonne T calcule l’unité prix pour l'entrée.

La formule suivante fera l'affaire dans les entrées de cellule! T2 et peut être copiée dans les autres cellules de la même colonne.

=SUMIF(Products!$A$2:$A$9999,Entries!$A2, Products!$P$2:$9999)

Vous pouvez ensuite avoir une autre colonne avec le nombre d'articles par entrée et la multiplier par le prix unitaire pour obtenir le coût total de l'entrée.

1
Nasorenga

Une méthode rapide consiste à créer une colonne avec une formule qui vaut True pour les lignes qui vous intéressent, puis filtre pour la valeur TRUE dans cette colonne.

0
user4681810