【网学网提醒】:本文主要为网学会员提供EXCELvba+SQL,希望对需要EXCELvba+SQL网友有所帮助,学习一下!
EXCEL里使用SQL的方法(欢乐小爪原创)
急用EXCEL的SQL用法,抄来欢乐小爪几篇文章,支持原创,留下小爪印:hi.baidu/huanhuanxiaozhua/blog
EXCEL(VBA)~SQL经典写法范本汇集(一)
2007-12-1021:20
编前话:为了更系统的学习sql语句,小爪首次系统的汇集sql需引用microsoftactiveXDataObjects2.8library
1.sql="select构件名称,构件代号,横长度,横数量,竖长度,竖数量,比重,相应工艺from[参数$B2:K1916]where(大样代码='"&;DYDH&;"')and(内外框='WKXC')"
2.sql="select构件名称,构件代号,横长度,横数量,竖长度,竖数量,比重,相应工艺from[参数$B2:K"&;CSMaxrow&;"]where(大样代码='"&;DYDH&;"')and(内外框='WKXC')"****************************************************************A、根据本工作簿的1个表查询求和写法范本Sub查询方法一()
SetCONN=CreateObject("ADODB.Connection")
CONN.Open"provider=microsoft.jet.oledb.4.0;extendedproperties=excel8.0;datasource="&;ThisWorkbook.FullName
sql="select区域,存货类,sum(代销仓入库数量),sum(代销仓出库数量),sum(日报数量)from[sheet4$a:i]where区域='"&;[b3]&;"'andmonth(日期)='"&;Month(Range("F3"))&;"'groupby区域,存货类"
Sheets("sheet2").[A5].CopyFromRecordsetCONN.Execute(sql)CONN.Close:SetCONN=NothingEndSub
-----------------
Sub查询方法二()
SetCONN=CreateObject("ADODB.Connection")
CONN.Open"dsn=excelfiles;dbq="&;ThisWorkbook.FullName
sql="select区域,存货类,sum(代销仓入库数量),sum(代销仓出库数量),sum(日报数量)from[sheet4$a:i]where区域='"&;[b3]&;"'andmonth(日期)='"&;Month(Range("F3"))&;"'groupby区域,存货类"
Sheets("sheet2").[A5].CopyFromRecordsetCONN.Execute(sql)CONN.Close:SetCONN=NothingEndSub
**************************************************************************************************
B、根据本工作簿2个表的不同类别查询求和写法范本
Sub根据入库表和回款表的区域名和月份分别求存货类发货数量和本月回款数量查询()Setconn=CreateObject("adodb.connection")
conn.Open"provider=microsoft.jet.oledb.4.0;"&;_
"extendedproperties=excel8.0;datasource="&;ThisWorkbook.FullNameSheet3.Activate
Sql="selecta.存货类,a.fh,b.hkfrom(select存货类,sum(本月发货数量)"_&;"asfhfrom[入库$]where存货类isnotnulland区域='"&;[b2]_&;"'andmonth(日期)="&;[d2]&;"groupby存货类)asa"_
&;"leftjoin(select存货类,sum(数量)ashkfrom[回款$]where存货类"_&;"isnotnulland区域='"&;[b2]&;"'andmonth(开票日期)="&;[d2]&;""_&;"groupby存货类)asbona.存货类=b.存货类"Range("a5").CopyFromRecordsetconn.Execute(Sql)EndSub
*******************************************************************C、根据本文件夹下其他工作簿1个表区域的区域求和
Sub在工作表1汇总本文件夹下001工作薄的表1分数列查询汇总()Setconn=CreateObject("ADODB.Connection")
conn.Open"dsn=excelfiles;dbq="&;ThisWorkbook.Path&;"\001.xls"sql="selectsum(分数)from[sheet1$]"
Sheets(1).[a2].CopyFromRecordsetconn.Execute(sql)conn.Close:Setconn=NothingEndSub
---------------------
Sub在工作表1汇总本文件夹下001工作薄的表1A1:A10查询汇总()Setconn=CreateObject("ADODB.Connection")
conn.Open"provider=microsoft.jet.oledb.4.0;extendedproperties='excel8.0;hdr=no;';datasource="&;ThisWorkbook.Path&;"\001.xls"sql="selectsum(f1)from[sheet1$a1:a10]"
Sheets(1).[A5].CopyFromRecordsetconn.Execute(sql)conn.Close:Setconn=NothingEndSub
-----------------------
Sub在工作表1汇总本文件夹下001工作薄的表1分数列A1:A7查询并msgbox表达汇总()Setconn=CreateObject("ADODB.Connection")Setrr=CreateObject("ADODB.recordset")
conn.Open"dsn=excelfiles;dbq="&;ThisWorkbook.Path&;"\001.xls"sql="selectsum(分数)from[sheet1$a1:a7]"
Sheets(1).[A8].CopyFromRecordsetconn.Execute(sql)rr.Opensql,conn,3,1,1MsgBoxrr.fields(0)
conn.Close:Setconn=NothingEndSub
******************************************************************************************
D、根据本文件夹下其他工作簿多个表区域的单列区域查询求和sub本文件夹下其他工作簿的每个工作簿的第4列30行查询求和DimcnAsObject,f$,arr&;(1To30),i%Application.ScreenUpdating=False
Setcn=CreateObject("adodb.connection")
f=Dir(ThisWorkbook.Path&;"\*.xls")DoWhilef<>""
Iff<>ThisWorkbook.NameThen
cn.Open"provider=microsoft.jet.oledb.4.0;extendedproperties='excel8.0;hdr=no;';datasource="&;ThisWorkbook.Path&;"\"&;f
Range("d5").CopyFromRecordsetcn.Execute("selectf4from[基表1$a5:d65536]")cn.Close
Fori=1To30
arr(i)=arr(i)+Range("d"&;i+4)NextiEndIff=DirLoop
Range("d5").Resize(UBound(arr),1)=WorksheetFunction.Transpose(arr)Application.ScreenUpdating=TrueEndSub
**************************************************************************************************
E、根据本文件夹下其他工作簿多个表区域的多列区域查询求和
sub本文件夹下其他工作簿的每个工作簿的第B\C\D列25行查询求和DimcnAsObject,f$,arr&;(1To25,1To3),i%Application.ScreenUpdating=False
Setcn=CreateObject("adodb.connection")f=Dir(ThisWorkbook.Path&;"\*.xls")DoWhilef<>""
Iff<>ThisWorkbook.NameThen
cn.Open"provider=microsoft.jet.oledb.4.0;extendedproperties='excel8.0;hdr=no;';datasource="&;ThisWorkbook.Path&;"\"&;f
Range("b6").CopyFromRecordsetcn.Execute("selectf2,f3,f4from[基表3$a6:e65536]")cn.Close
Fori=1To25Forj=1To3
arr(i,j)=arr(i,j)+Cells(i+5,j+1)NextjNextiEndIff=DirLoop
Range("b6").Resize(UBound(arr),3)=arrApplication.ScreenUpdating=TrueEndSub
***********************************************************************************
F、其他相关知识整理'用excelSQL方法
'conn是建立的连接对象,用open打开
'通过CreateObject("ADODB.Connection")这一句建立了一个数据库连接对象conn'在工程中就不再需要引用“MicrosotActiveXDataObjects2.0Library“对象
'设置对象conn为一个新的ADO链接实例,也可以用setconn=NewADODB.Connection。--------------
'conn.Close表示关闭conn连接
'Setconn=Nothing是把连接对象conn置空,不然你退出了文件,但数据库还没有关闭conn.Open"dsn=excelfiles;dbq="&;ThisWorkbook.Path&;"\001.xls"能把这段含义具体解释一下吗?
'这里的dbq的作用?
'------------------
'dsn是缩写,datasourcename数据库名是excelfile'
'dbq也是缩写,databasequery意思是数据库查询,后接源库文件名001.xls
'---------------------
'代码中长单词怎么记住的?
'比如copyfromrecordset可以拆开记忆,copy、from、recordset这三个单词意思知道吧,就是“复制、从、记录集”
'-----------------
'Sql="selectsum(分数)from[sheet1$]"这里加"分数"两字什么作用?'
'SQL一般结构是select字段from表,意思是从指定的表中查询字段,字段的理解可以是:表中的列名'
'分数是001.xls文件的sheet1第一行A列的字段名,SQL一般以字段来识别每列数据'-------------------
'为什么要用复制的对象引用过来计算呢?'
'因为Sql语句只是对源数据库的字段找到了符合条件的的数据,但不会自动复制到汇总表来,所以需要复制copy'
'注意这里的[sheet1$]",001文件的数据存放地上sheet1表,应当用方括号并加上