用vba通过sql查询xls文件的内容

就一个xls文件 文件里只有一个sheet
sheet里面只有两列数据
因为数据较多有几十万行 用常规方法打开和检索话费时间太多 是不是可以ado链接excel文件 用sql查询 并返回到变量里面
背景完毕

我想用第一列的关键字 查询并返回第二列的数据保存的变量里 我后续要用这个变量。

以下内容引用于excelhome论坛。建议去论坛查看更多信息。

'在Excel中使用SQL语句总结-1:

'************************************        标准SQL查找代码:       *********************************************************
Sub SQL_Excel_2003_2007()

'On Error Resume Next       '如果出现错误,忽略,然后执行下一行代码。
Application.ScreenUpdating = False '关闭屏幕刷新,成对出现,提高速度
Application.DisplayAlerts = False '关闭提示,,成对出现,避免出现提示框

'---------------------------------------   参数声明部分  ------------------- ------------------- -------------------

    Dim cnn, SQL$   '定义数据库连接和SQL语句
    Set cnn = CreateObject("adodb.connection")  '创建数据库连接
    Set rs = CreateObject("adodb.recordset")   '创建一个数据集保存数据
   
'---------------------------------------   设置数据库连接  ------------------- ------------------- -------------------

    cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName
    
       '将EXCEL文件作为数据库连接,实际并不打开EXCEL,
       'Excel2003版本:cnn.Open "Provider=Microsoft.jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & ThisWorkbook.Path & "\数据表.xls"
       'Excel2007版本:cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.Path & "\数据表.xlsx"
       '带参数的连接字符串:cnn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;HDR=yes;IMEX=2';data source=" & ThisWorkbook.FullName
       '    HDR=Yes   代表 Excel 档中的工作表第一行是标题栏,标题只能是一行,不能使多行,或者合并的单元格。
       '    HDR=no     工作表第一行就是数据了,没有标题栏,不使用栏位,则栏位就以f代表,第一列列名就是:f1,第二列列名:f2
       '    IMEX 汇入模式  0 只读  1 只写   2 可读写
       '              当 IMEX=0 时为“汇出模式”,这个模式开启的 Excel 档案只能用来做“写入”用途。
       '              当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用途。
       '              当 IMEX=2 时为“连结模式”,这个模式开启的 Excel 档案可同时支援“读取”与“写入”用途。
       'Data Source  存储查询数据来源的工作薄名称,数据库路径为:数据表.xls  或本表:& ThisWorkbook.FullName
       
'---------------------------------------   设置SQL语句  ------------------- ------------------- -------------------

  SQL = "select * from  [数据表_1$A1:G100] where 姓名='马拉多纳'"
  
       '在Sheet1表内查找列名为:姓名 中所有:马拉多纳 的数据。
       '[XXX$A2:G100]的中括号和$为特别数据表标示符,XXX为Sheet名,A2:G100是选取的区域。
       'SQL语句是一个字符串,双引号开头和结尾,列名两边无单引号,表示一个字符串:‘马拉多纳’,要用单引号扩上,数字就不用了。
       'Nu=36:  AA="马拉多纳":   set  Sh=Sheet1:  SQL = "select * from  [" & Sh.name & “$] where 姓名=‘” & AA & “’  and  年龄=Nu"
       
'---------------------------------------   SQL结果处理  ------------------- ------------------- -------------------

   Set rs = cnn.Execute(SQL) '将SQL语句获得的数据传递给数据集
   Sheets("结果").Cells.ClearContents       '清理保存数据的区域
   Sheets("结果").Range("a2").CopyFromRecordset rs    '将数据集粘贴到Excel中,左上角为A2,无列名。
   'Sheets("结果").Range("b2").CopyFromRecordset cnn.Execute(SQL)  '可以不声明Y,直接使用

   cnn.Close     '关闭数据库连接
   Set cnn = Nothing    '将CNN从内存中删除。
'--------------------------------------- ------------------------ ------------------- -------------------
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub   '这就是最简单的EXCEL中SQL的应用 ,其他的都是SQL的运用了

温馨提示:内容为网友见解,仅供参考
无其他回答

用VBA实现用SQL语句查询EXCEL中的数据
因此,考虑使用VBA。VBA可将Excel视作数据库对象,建立连接,并执行SQL查询。通过编写简单的脚本,实现从Excel数据文件中执行SQL查询:选择查询文件 - 建立连接 - 编写查询语句 - 执行查询,将结果保存在新工作表中。下面是示例代码:有时,工具不必强大,能快速解决问题,提高效率的工具便是好工具。此外...

如何使用SQL查询Excel跨表数据? (VBA版)
首先,确保你的Excel文件支持VBA功能,这可以通过“开发工具”选项卡的设置来实现。勾选“开发工具”选项卡中的“VBA项目”选项,你的Ribbon上将出现“开发工具”字样,为后续编程操作做好准备。接着,构建一段简单样例数据,用来演示查询流程。两个表格中,其中一个表格包含年份信息,另一个表格则包含与年...

excel vba常用代码--sql条件查询
在Excel VBA中,SQL条件查询是进行数据筛选的重要工具。以下是几种常见的查询方法:1. 等于或不等于查询:使用"="或">"运算符,例如,WHERE column = 'value' 或 WHERE column > 'another_value',以筛选出符合条件的行。2. 列表查询:通过"In"或"Not In"关键字,如WHERE column IN ('value1...

vba用sql在excel表中查数据时报"至少一个参数没有被指定值"
1、你的数据表中必须有 NEName,Board_Name、Board_Type、Subrack_No、Inventory_Unit_ID、Serial_Number 这些字段;2、Sql = Sql & " FROM [" & CunLiangBook.Sheets(1).Name & "$] " 语句中 $ 号是不是应该去掉?3、你查询的是Excel中的数据,你看看你的这个 CunLiangBook.Sheets(1)....

Excel VBA SQL联表(join和group by)查询统计调优经验(一)
因此,对于结果字段出现在筛选条件中的查询,可先进行`Group By`操作以汇聚结果,减少数据筛选的集数,然后再进行筛选,以显著提升查询效率。总结,优化Excel VBA SQL查询的关键在于合理使用聚合操作和筛选策略,以减少数据处理的复杂性和时间成本。通过实践和调整,可以显著提升查询效率,提高工作效率。

excel没装db,vba使用sql将多个表联系起来
1、打开Excel,选择数据选项卡,点击从其他来源获取数据,选择从SQL Server获取数据。2、在连接到数据源对话框中,输入SQL Server的名称和登录信息,点击下一步。3、在选择如何建立连接对话框中,选择使用特定的用户名和密码,输入数据库的用户名和密码,点击下一步。4、在选择数据库和表对话框中,选择...

vb6.0怎么读取excel表中内容
’用CommonDialog可以解决选定打开.xls文件问题 然后就是读取进去 哈哈 保存代码如下 '添加command控件一个 CommonDialog,MSFlexGrid控件一个 Private Sub Command1_Click() On Error Resume Next Dim fileadd As String CommonDialog1.ShowOpen CommonDialog1.Filter = "xls文件(*.xls)|*.xls" '选择...

VBA里面想用sql语句引用一个外部excel表的某个单元格
试一下这个 sql = \\"Select * FROM [Sheet1$],[sheet2$] where[sheet1$].a = [sheet2$].a \\" 或者 sql = \\"Select * FROM [Sheet1$] INNER JOIN [sheet2$] ON[sheet1$].a = [sheet2$].a \\"

VBA怎么在文件夹内,提取EXCEL的特定内容?
i = Cells(Rows.Count, 1).End(3).Row Set fso = CreateObject("scripting.filesystemobject")Set myfolder = fso.GetFolder("D:\\a") '引号内填写文件夹a的完整路径 For Each myfile In myfolder.Files If myfile.Name Like "*.xls*" Then Set wb = Workbook.Open(myfile.Path)i = i ...

excel 宏使用sql语句
1.在宏编辑界面中进行SQL数据查询以及生成报表的代码如下:Sub Static()Dim objNewWorkbook As Workbook '定义一个Workbook对象 Set objNewWorkbook = Workbooks.Add(ThisWorkbook.Path & "\\模板.xlt") '使用模板文件新建一个EXCEL报表生成文件 Set objConnection = CreateObject("ADODB.Connection") '创建...

相似回答