在VBA中使用SQL

发布时间:2024年01月24日

VBA在处理大量的数据/计算时如果使用常规方法会比较慢,因此需要对其进行性能优化以提高运行速度,一般的方法是数组计算或者sql计算。SQL计算的速度最快,限制也是最多的,数组速度其次,灵活性也更高

如果要在vba中调用sql处理数据基本可以遵循一个套路,只要修改其中的SQL语句即可

调用sql处理数据VBA代码如下,其中’##### #####中的地方是每次运行时要根据情况修改的:

Sub Sql_Query()

 Dim Conn As Object, Rst As Object
 Dim strConn As String, strSQL As String
 Dim i As Integer, PathStr As String
 Set Conn = CreateObject("ADODB.Connection")
 Set Rst = CreateObject("ADODB.Recordset")
 PathStr = ThisWorkbook.FullName 
 Select Case Application.Version * 1 '设置连接字符串,根据版本创建连接(不同版本的excel连接是不同的)
 Case Is <= 11
    strConn = "Provider=Microsoft.Jet.Oledb.4.0;Extended Properties=excel 8.0;Data source=" & PathStr
 Case Is >= 12
    strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & PathStr & ";Extended Properties=""Excel 12.0;HDR=YES"";"""
 End Select

 strSQL = "Select * FROM [rawdata$]"   '####在这里改SQL查询语句####

 Conn.Open strConn '打开数据库链接
 Set Rst = Conn.Execute(strSQL) 	'执行查询,并将结果输出到记录集对象
 With ThisWorkbook.Sheets("sql data") 	'#####在这里更改输出的位置对应的表名####
      .Cells.Clear
      For i = 0 To Rst.Fields.Count - 1    '填写标题
        .Cells(1, i + 1) = Rst.Fields(i).Name	'在第一行输出字段名
      Next i
      .Range("A2").CopyFromRecordset Rst     '从A2单元格开始输出
      .Cells.EntireColumn.AutoFit '自动调整列宽
 End With
 Rst.Close  '关闭数据库连接
 Conn.Close
 Set Conn = Nothing
 Set Rst = Nothing

End Sub

接下来,开始学习SQL语句语法

1.基于一张工作表的查询语法

SQL语法格式比较固定,只需要根据特定的语法顺序,再根据需求加减关键字即可。首先我们给出一个比较全的格式如下:

 SELECT   [DISTINCT]   [TOP <数值>  [PERCENT]]   列标题  [聚合函数]   [[AS] <别名列标题>]   FROM  表或查询 [[AS] <别名>]   [WHERE <筛选条件>]  [ORDER BY <排序项>  [ASC|DESC]]                                

说明:

  1. <>表示必选项,[]表示可选项,|表示多选一。
  2. SQL语句中不区分大小写,上述式中的的大写意为SQL中关键字
  3. SELECT 关键字:选取关键字
  4. DISTINCT关键字:去除重复的行
  5. TOP 关键字:显示前几条记录
  6. PERCENT关键字:TOP 与 PERCENT 组合在SQL语句中的使用可以按照百分比提取数据
  7. AS关键字:给标题列重新命一个新名称
  8. FROM关键字:给定数据源的名称
  9. WHERE关键字:筛选条件语句
  10. ORDER BY关键字:排序,一般和ASC|DESC一起使用,将结果升序或者降序排列。

接下来详细讲解每一个关键字的使用:

SELECT关键字和FROM 关键字

SELECT关键字和FROM 关键字是每个SQL语句中都必须要有的关键字。SELECT关键字可以选取最终需要显示所有字段,而FROM关键字则用于告诉程序数据源的位置在哪里。VBA中一个最基本的SQL语句写法如下:

SELECT 列字段名1,列字段名2,列字段名3...... FROM [工作表名称$]

例如我们需要从student这一个sheet中取出ID,name,address,score这四列数据:

select ID,name,address,score from [student$]

也可以使用[]将列名括起来表示这是一个列名

select [ID],[name],[address],[score] from [student$]

如果需要取所有的列,可以直接使用“*”号来取全部的列,从而减少代码量

#*号是代表全部列
select * from [sheet1$]

AS关键字

AS关键字用于给字段或者数据源表取别名,从而简化一些比较长的表名或字段名

#从student表中选取姓名列,并重命名为Name
SELECT 姓名 AS Name FROM [Student$]

DISTINCT关键字

DISTINCT关键字功能是去重,语法结构为:

SELECT DISTINCT 要去重复值的字段1,要去重复值的字段2...... FROM [工作表名$]

举例如下:

#选取所有不重复的name
Select Distinct name From [student$]
#选取name和ID都不重复的数据
Select Distinct name,ID From [student$]

WHERE关键字

where关键字可以按条件筛选数据。WHERE语句后可以有一个或多个条件,条件之间可以用操作符AND 或者OR进行连接。
WHERE语句的语法结构如下:

SELECT 列字段名称 FROM [表名称$] WHERE 条件

where后的条件语句可以是运算符或逻辑判断,包含大于、小于、等于、不等于、大于或等于、小于或等于、IN、 BETWEEN、AND、NOT等。

#选取取消费金额等于100的数据
SELECT * FROM [test$] where 消费金额=100
#选取级别为A的数据
SELECT * FROM [test$] where 级别='A'
文章来源:https://blog.csdn.net/qq_42692386/article/details/122676816
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。