首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

换一种思路思考问题,利用数据库实现数据处理自动化

《VBA代码解决方案》系列书作者

头条百家平台 VBA资深创作者

_______________________________

VBA解决方案系列丛书,我现在推出了两套,其一是《VBA代码解决方案》其二是《VBA数据库解决方案》,很多朋友都在学习我推出的资料,这些资料实用性极强,没有任何的拖泥带水,为什么呢?这是和这套书的定位相关的,VBA解决方案系列的书籍定位于广大职场人员。如我,在职场的实际工作中,利用了20多年VBA,初学时,那种艰辛不是一个“难”字所能描述的,有时候去和人请教一个问题,人家根本就不理我,整整一周都在追着人家问….是啊,有谁肯把自己的经验轻易的告诉你呢?现在,我不想让初学者如我当年那样。只要你来到我的这个学习平台,肯于学习,有志于VBA,总会让你有所收获,我会把好的经验无保留的分享给有需要的朋友.

这系列书中我会模拟各种实际工作的场景,去解决问题,并提供给大家源代码,如果你有时间,可以细细的理解,如果你没有时间,你只要拿来,拿来这些积木组合一下,修改一下构成你的实际场景.

在这系列书籍中,是面向初级和中级人员的教程,书中对于VBA涉及到的各个知识点均作了讲解,是利用代码来解决实际问题的基本教程,从中大家可以收获颇丰,利用了VBA,你之前用手工处理的数据可以借助于代码瞬间完成,例如:对于某位药店的销售人员,自己负责的药品需要根据上月销售的数据,计算出下个月的需求,以便订货,如果手工处理,药品的型号如果少还可以,加入涉及到几百种,工作量是非常大,即使你能够计算出来,往往还要担心数据的准确性,怎么办?VBA绝对是你工作的好帮手。下面的解决方案中,我会给出代码的解决方案。

《VBA数据库方案》是面向中级及以上人员书籍,是数据处理的专业教材,书中,你会看到各种数据的处理方案,会感受到ADO联接给我们工作带来的方便,这里面的思路是在代码方案上的提高,要求读者有效的理解记录集的概念,并用SQL语句来操作它,同时要理解内连接,左外连接,右连接等各种连接方式的特点和实际的应用范围。

还是以上面的例子做我测试的数据,来证明VBA之强大,如下面的数据:

在7月份的实际销售数据中,有各种型号的销量、金额、余数,要在7月份的数据的基础上求出9月的采购预计,就是7月的销售总量减去库存的总量,由于7月的数据是不同的人员报上来的不同数据,要排重处理的。

下面我讲解一下解决方案:

方案一,我们先利用VBA代码方案的知识来解决,只用代码进行数据的比较计算:

Sub MYNZ()

i = 3

Worksheets("Sheet1").Select

Range("F3:J" &Range("A3").End(4).Row).ClearContents

Do While Cells(i, 1) ""

K= 3

DoWhile Cells(K, "f") ""

If Cells(K, "f") = Cells(i, 1) Then

Cells(K, "g") = Cells(K, "g") + Cells(i, 2)

Cells(K, "h") = Cells(K, "h") + Cells(i, 4)

Cells(K, "i") = Cells(K, "i") + Cells(i, 3)

Cells(K, "j") = Cells(K, "g") - Cells(K,"h")

GoTo 100

End If

K = K + 1

Loop

Cells(K, "f") = Cells(i, 1)

Cells(K, "g") = Cells(i, 2)

Cells(K, "h") = Cells(i, 4)

Cells(K, "i") = Cells(i, 3)

Cells(K, "j") = Cells(K, "g") - Cells(K,"h")

100:

i = i + 1

Loop

End Sub

代码解释:

上述代码在运行过程中先是在7月销售中进行一个循环,然后在9月预测中进行一个查找,如果可以查到,那么就累加要统计的数据,如果没有查找到,那么就添加数据。

运行后很快就可以得出结论:

非常之快,根本不是手工处理可以比拟的,而且只要逻辑关系正确,不必担心数据的准确性,上面的数据我只是简单的列举了30个,如果是上万条数据呢?VBA当然可以处理,但手工处理是不可能的了。

本文的题目是《换一种思路思考问题,利用小型的数据库实现数据处理自动化》,上面的方案只是解决方案的一种,是我们认识VBA后,起码可以利用的方案。下面我继续提供解决的提高方案.

方案二,利用VBA数据库解决方案的知识来解决,建立连接,当你对代码的理解有深入后,就是自己水平提高阶段了,要刷新自己的知识,这里上面的问题就就可以利用数据库了,数据库是数据处理的专业工具,在数据处理上有着非常灵活,但要求我们的水平要要有所提高,

我们看下面的代码:

Sub mynzdate()

Dim cnADO, rsADO As Object

Dim strPath, strSQL As String

Worksheets("Sheet1").Select

Range("F3:J" & Range("A3").End(4).Row).ClearContents

Set cnADO = CreateObject("ADODB.Connection")

Set rsADO = CreateObject("ADODB.Recordset")

strPath = ThisWorkbook.FullName

cnADO.Open "provider=Microsoft.ACE.OLEDB.12.0;extendedproperties='excel 12.0;hdr=yes;imex=1';data source=" & strPath

strTable = "[sheet1$a2:d30]"

strSQL = "SELECT品名,SUM(销量),SUM(余数) as剩余,SUM(金额) as上月的金额,SUM(销量)-SUM(余数) FROM " & strTable & " GROUP BY品名"

rsADO.Open strSQL, cnADO, 1, 3

Range("F3").CopyFromRecordset rsADO

rsADO.Close

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

End Sub

上述代码利用ADO连接到7月的销售,然后利用聚合函数完了数据的处理,最后Range("F3").CopyFromRecordset rsADO来输出数据。

输出的结果和上面的图一样:

上述两个方案,前者是利用代码直接比较完成的,代码易懂,是拥有VBA知识后很容易实现的,后者是通过数据库的聚合函数来实现的,在理论上后者对于数据的处理更加直接,特别是数据量庞大的时候,利用后者更是首选。

当我们的知识有所提高,就可以换一种思路解决问题,在实际的工作中,很多数据处理方面的问题可以用数据库来直接完成,这对于我们实现小型数据的办公自动化非常重要,也非常的专业。

小型数据库在我们的工作中可以起到非常重要的作用,当然,VBA要有自己的定位,不能和跑MRP的大型数据处理运算比较,要发挥自己的优点,那就是灵活,可以随自己的需求而随意改变,如上面的要求提供的数据中,要增加一个平均单价,马上修正代码即可完成。

当然,如果你刚刚接触到VBA还是要先学习《VBA代码解决方案》的内容,这些是基本,这套书中147讲内容可以覆盖绝大多数的VBA知识点,大量的利用各个知识点的实例让你参考。当你对这些有了初步的认识后就可以学习《VBA数据库解决方案》了,在84讲内容中,你会欣赏到各种数据处理的专业方案,是我们工作中处理数据的专业工具。

那么,是不是上述的方案就可以了呢?当然不是,下面还有更加巧妙的方案,在我的VBA解决方案系列丛书的第三套教材中推出。

_____________________________

觉得有启发,点个“在看”,转给朋友们

欢迎你“留言”,和作者直接交流

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190817A031YF00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券