使用EXCEL VBA 与SQL查询语句转换表格


经常我们需要将EXCEL表格的一列转换为行标题,尽管使用数据透视表可以完成这一转换,但是,由于数据透视表会将相同值做汇总处理,将不同值以新行的方式存放数据。这对于我们需要将单据号及备注同时显示做参考,但对单据号或备注是否对应并不在意,数据透视表就显得心有余而力不足了。

下面我们介绍使用EXCEL VBA以及在VBA里使用简单的SQL查询来实现。下面的语句从上倒下包含:
1. 使用ADODB对EXCEL的基础数据进行联机
2. 对将做为行标题的列以及目标列做连续序号处理
3. 编写SQL语句(注意与SQL SERVER 的有稍许区别)
4. 打开ADODB连接,及数据集
5. 将整理后的数据复制到新表格


Sub PopulateBasicData()

'Application.ScreenUpdating = False
Application.Volatile

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim strFile As String
Dim strConn As String
Dim strSQL As String
Dim i As Integer


strFile = Me.FullName
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"""

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")


Sheets("RawData").Activate

For i = 2 To Me.Sheets("RawData").UsedRange.Rows.Count

    Cells(i, 9).Value = Application.WorksheetFunction.CountIfs(Range(Cells(2, 1), Cells(i, 1)), Cells(i, 1), Range(Cells(2, 2), Cells(i, 2)), Cells(i, 2))

Next i
Me.Save

strSQL = "SELECT DISTINCT m.物料, m.Seq, s1.物料凭证, s1.过帐日期, s1.数量, s2.交货单, s2.过帐日期, s2.数量,s3.参考凭证, s3.过帐日期, s3.数量,s4.参考凭证, s4.过帐日期, s4.数量 FROM (((([RawData] AS m LEFT JOIN (SELECT 物料,Seq, 物料凭证, 过帐日期, 数量 FROM [RawData] WHERE 移动类型=541 )  AS s1 ON (m.Seq = s1.seq) AND (m.物料 = s1.物料)) LEFT JOIN (SELECT 物料,Seq, 交货单, 过帐日期, 数量 FROM [RawData] WHERE 移动类型=103 )  AS s2 ON (m.Seq = s2.seq) AND (m.物料 = s2.物料)) left join (SELECT 物料,Seq, 参考凭证, 过帐日期, 数量 FROM [RawData] WHERE 移动类型=104) s3 ON (m.Seq = s3.seq) AND (m.物料 = s3.物料)) left join (SELECT 物料,Seq, 参考凭证, 过帐日期, 数量 FROM [RawData] WHERE 移动类型=105) s4 ON (m.Seq = s4.seq) AND (m.物料 = s4.物料)) WHERE m.seq > 0"


cn.Open strConn
rs.Open strSQL, cn

Sheets("RawData").Select
Range("I2:I20000").ClearContents


Application.ScreenUpdating = True
Sheets("Reformat").Activate

Range("A2:Z20000").ClearContents
Range("A2").CopyFromRecordset rs

rs.Close
cn.Close

Me.Save

MsgBox "Done"
End Sub


相关推荐

  • Java教程—Hibernate、hql语句和QBC查询 通过上面HQL语句我们可以看出,这时查询出来的就是一个个student对象了,而不是一个个游离的数据了,这里一定要注意HQL语句的写法。这种写法在sql语句中肯定是不支持的。java教程HQL语句进行内连接查询:fromTeamtjoint
  • SQL语句提高查询性能的关键[zz] SQL结构化查询字符串的改写,是实现数据库查询性能提升的最现实、最有效的手段,有时甚至是唯一的手段,比如在不允许大幅度修改现有数据库结构的情况下。通过优化SQL语句提高查询性能的关键是:根据实际需求情况,建立合适的索引;&#
  • 一条SQL语句实现查询成绩-60、60~80、+80的人数的方法 现在在实验室,总结一下上午学到的一个SQL方法。下面我创建一个数据表:SELECT*FROM`students`;可以看到数据表中存在六条数据,如果使用传统的查询方法,我们需要三条SQL语句,分别是:selectcount(*)fromst
  • AVI Fairy AVI MP3/MP4转换精灵 5.0 AVIFairyAVIMP3/MP4转换精灵5.0AVI转换精灵是国内最优秀实用的AVI视频转换工具,它支持把avi、mpg、mpeg、rm、rmvb、wmv、dat转换为AVI格式。采用AVIConverterV5.0为核心,广泛适用于支
  • 黑马程序员_SQL和ADO.net篇4之数据排序,group by ,having 语句,以及SQL语句优先级  -------WindowsPhone7手机开发、.Net培训、期待与您交流!-------一.数据排序================================================orderby句子要放到where后面
  • ADS8681IRUMT 模数转换器 黄云艳13632767652 ADS8681IRUMTTI新产品250PCS一个包装TexasInstrumentsADS868116位SAR模数转换器(ADC)是一款基于16位逐次逼近(SAR)模数转换器的集成式数据采集系统。该器件的工作吞吐量达1MSPS。该器件具有
  • DAC39J82IAAV  数模转换器黄云艳13632767652 DAC39J82IAAV数模转换器-DACDual-Chn4-Output16-Bit2.8GSPS工厂交货期6周受限产品单价在120美金左右。1Features3DescriptionTheDAC39J82isaverylowpower,
  • PASCAL精要——第五章 语句  zz 第五章语句如果说数据类型是Pascal编程的一个基础,那么另一个则是语句。编程语言的语句主要由关键字和操作指令组成。语句常放在过程或函数中,就象我们将在下一章中看到的那样。现在,我们集中讲解最基本的编程语句。简单语句和复合语句Pascal简
  • 转 ORCLE-Select 语句执行顺序以及如何提高Oracle 基本查询效率 源地址:http://blog.itpub.net/24627116/viewspace-754502今天把这几天做的练习复习了一下,不知道自己写得代码执行的效率如何以及要如何提高,于是乎上网开始研究一些材料,现整理如下:首先,要了解在Or
  • Delphi程序设计第七讲—— 语句操作 语句是执行具体操作的指令.语句有很多种;如注释语句,条件语句,循环语句,多分支语句等.例如:BUTTON1.CAPTION:=’确定’;每个语句必须以分号结束.1.赋值语句赋值语句是DELPHI程序中最常用的语句,一般用于对变量或给对象的属
  • PR查询- 收录/反链查询- 死链接检测/全站PR查 网站信息查询:ALEXA排名查询-GooglePR查询-收录/反链查询-死链接检测/全站PR查询-网页GZIP压缩检测-PR输出值查询搜索优化查询:长尾关键字友情链接检测关键词排名查询关键词密度查询搜索引擎模拟网页META信息百度收录百度权
  • 各种视频格式转换软件 3gp转换器 万能转换器 FLV视频转换器4.62009-3-47.14MB0 《FLV视频转换器》是一款功能强大的FLV视频转换工具,它可以帮助您将几乎所有流行的视频格式,如:RM、RMVB、VOB、DAT、VCD、DVD、SVCD、...运行平台:Win9X/W

你的评论

就没有什么想说的吗?

最新博客

关于我们 移动版

©2017传客网    琼ICP备15003173号-2    

本站部分文章来源于互联网,版权归属于原作者。
本站所有转载文章言论不代表本站观点,如是侵犯了原作者的权利请发邮件联系站长(weishubao@126.com),我们收到后立即删除。
站内所有资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担!

X