工作表数据如何使用类SQL查询的Excel函数实现?

59

我在Excel工作表中有一个较大的表:

Column_1 | Column_2 | Column_3

ValueA       ValueB     ValueC
....

我需要的是一个函数,它将接受范围和类似 SQL 的查询字符串作为输入,并返回与查询匹配的行的范围,例如:

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

有没有像这样的东西?或者最好的实现方式是什么?


如果你可以保存工作表,那么你就可以使用ADO和Jet/ACE将工作簿视为数据库,并对工作表执行SQL。 - Jon Egerton
数据透视表 - SeanC
由于最近的“晚回答”,我偶然发现了这个。惊讶的是,似乎没有人提到Excel的“高级筛选”功能,它至少在这里是正确的。 - Steve Lovell
5个回答

50

您可以使用Excel 2010中“数据”选项卡中的“获取外部数据”(尽管它的名称如此),设置一个工作簿中的连接,以从自身查询数据。使用来自其他源来自Microsoft Query连接到Excel。

一旦设置好,您就可以使用VBA操作连接,以查看和修改驱动查询的SQL命令等内容。查询会引用内存中的工作簿,因此无需保存即可刷新最新数据。

这里是一个快速的Sub演示如何访问连接对象。

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

3
你能勾选一下这个回答解决了你的问题吗,Richard? - K_B
1
我在 strSQL = c(i).odbcconnection.commandtext 行收到了一个“对象不支持此操作”的错误。 - zoonosis
1
@JustinJDavies - 最近我在公司的防火墙后面,所以 Stack Overflow 的访问不太稳定。现在已经接受了。 - Richard H
1
很遗憾听到这个消息,Richard!如果你被防火墙拦住了这么有用的资源,那真是一种遗憾的状态。 - JustinJDavies
你在Mac上如何执行这个操作?Microsoft Query没有显示出来。 - Brandon
显示剩余2条评论

5
如果您可以保存工作簿,那么您可以选择使用ADO和Jet/ACE将工作簿视为数据库,并对工作表执行SQL。
有关如何使用ADO访问Excel的MSDN信息,请单击此处

嗯,那肯定是一种可能性,感谢您的建议,但我宁愿不必像这样“外部引用”。 - Richard H
“externally” 是什么意思? - Jon Egerton
1
ADO/Jet引用文件系统上的电子表格(这也意味着需要保存该表)而不是内存范围。 - Richard H

2

一个快速的方法是创建一个列,其中包含一个公式,该公式对于您关心的行评估为true,然后在该列中过滤值为TRUE。


2
如果您想要通过执行SQL语句的函数在工作表上运行公式,则可以使用Add-in A-Tools。例如,使用function BS_SQL("SELECT ...")。请参考以下示例:enter image description here

1
有时候可以使用 SUM_IF 函数来完成任务。
假设您有一个产品信息表,其中包括在 A 列中的唯一 productID 和在 P 列中的单价。还有一个采购订单条目表,其中产品 ID 在 A 列中,并且您希望 T 列计算该条目的单价。
以下公式将在 Entries!T2 单元格中完成操作,并可复制到同一列中的其他单元格中。
=SUMIF(Products!$A$2:$A$9999,Entries!$A2, Products!$P$2:$9999)

那么你可以添加另一列来显示每个条目的物品数量,并将其乘以单位价格以得出该条目的总费用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接