3.3.2:SUM作为一般函数及聚合函数的应用

【分享成果,随喜正能量】我们很多道友没受过什么苦,或受不了一句话、一点气,总想悠悠自在成佛。或是念上几十部经就想换取什么,法宝是无价的!你拿有价来换,不但换不到,还丧失了功德。应当不退初心,遇到恶缘,把它看作考验,你能不能定得住? 人身难得,佛法难闻,百念千生,要坚固自己的信愿力,莫退信心。。

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的劳动效率,而且可以提高数据处理的准确度。我推出的VBA系列教程共九套和一部VBA汉英手册,现在已经全部完成,希望大家利用、学习。

如果您只是一般的职场VBA需求,可以打包选择7.1.3.9教程+汉英手册,第7套教程是入门,第1套教程是入门后的提高,第3套教程字典是必备的VBA之精华,第9套教程是实用的典型案例讲解。这四套教程内容掌握后足以处理一般工作中的问题,实际写代码的时候再辅助代码汉英手册,足矣!如果您想进一步提高,就需要选择高级阶段的教程了。

VBA是面向对象编程的语言,博大精深。很多朋友咨询VBA的学习方法,我会陆续给大家讲解一些我的经验,大家可以慢慢体会。今日的内容是:3.3.2:SUM作为一般函数及聚合函数的应用

3.3 学习提高过程中的思考(贯彻我的编程思想)

在学习过程中,我们要同时思考几个问题,这也是我们学习过程中的提高。

3.3.2:SUM作为一般函数及聚合函数的应用

VBA解决方案系列丛书中,我以实际场景模拟的方式讲解如何利用代码提高自己的工作效率,在现实工作中会面临很多实际问题,各种问题如何快速准确的解决是VBA的课题。VBA作为一种寄生语言,在OFFICE应用中起着非常重要的作用。

我们每一次的数据处理其实都是数据的组织和重新结合的过程,我称之为"重组",这是非常重要的概念,数据重组后可以发现我们需要了解的信息,进而实现管理的优化。这种数据重组过程就是实现数据自动化处理过程。

今日和大家要谈的是在实现数据自动化处理过程中一个常见函数SUM的价值。这个函数在工作表中应用非常广泛,可以说和EXCEL是共生关系,在VBA代码中直接利用或许少些,但在数据库中又体现了自己强大的生命力。

下面我们看看实例:本实例讲解利用了"VBA代码方案之十三:如何利用VBA在单元格中录入公式"的内容及VBA数据库解决方案中聚合函数及工作表连接的相关内容,就不再一一截图说明,今日只是就下面实例内容讲解:

实例,在工作表sheet1中有很多数据,杂乱无章,现在要求出每列数据的和,结果放在第二个工作表中,该如何解决?

今日我讲解两套方案,让大家看到SUM函数强大的生命力;

方案一:利用工作表函数解决

思路:我们在第二个工作中录入一个工作表函数,这个工作表函数要等于对应的第一个工作表列的总和,问题是如何能自动地计算出第一个工作表中有多少列,以及工作表函数在VBA中如何表示。下面看我给出的代码:

Sub MYNZ()

    Sheets("SHEET2").Select

    i = 1

    k = 1

    Range("a2:aa2").ClearContents

&nbsp;&nbsp;&nbsp;&nbsp;Do While Sheets("SHEET1").Cells(1, i) <> ""

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LL = Sheets("SHEET1").Cells(1, i).Address

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TT = Mid(LL, 2, Application.WorksheetFunction.Find("$", LL, 2) - 2)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TT = TT & ":" & TT

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cells(2, k).Formula = "=SUM(Sheet1!" & TT & ")"

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i = i + 1

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k = k + 1

&nbsp;&nbsp;&nbsp;&nbsp;Loop

End Sub

代码解析:

1 上述代码实现了用VBA录入公式的方法,这个方法在《VBA代码解决方案》中有讲解了。

2 Do While Sheets("SHEET1").Cells(1, i) <> ""

LL = Sheets("SHEET1").Cells(1, i).Address

TT = Mid(LL, 2, Application.WorksheetFunction.Find("$", LL, 2) - 2)

TT = TT & ":" & TT

Cells(2, k).Formula = "=SUM(Sheet1!" & TT & ")"

i = i + 1

k = k + 1

Loop

上述的循环语句实现了在第二个工作表中录入工作表函数的方法。其中LL = Sheets("SHEET1").Cells(1, i).Address 将获取单元格的地址,此地址是$a$1的格式。我们要从中提取出列的符号。

3 Cells(2, k).Formula = "=SUM(Sheet1!" & TT & ")"

上述代码实现了公式的录入。此处的TT变量来自于上面的列的符号提取。

下面看代码的输出:

方案二:利用数据库的聚合函数来解决:

思路:利用数据聚合函数SUM来解决,这是数据库方案的内容,思路更加清晰。难点是对数据连接及SQL语句的写法,好在我希望大家能利用我提出的搭积木方法,代码语句尽可能不要去写,而是去复制和修改。

下面看我给出的代码:

Sub MYNZS()

&nbsp;&nbsp;&nbsp;&nbsp;Sheets("SHEET1").Select

&nbsp;&nbsp;&nbsp;&nbsp;Dim cnADO, rsADO, Z As Object

&nbsp;&nbsp;&nbsp;&nbsp;Dim strPath, strTable, strSQL As String

&nbsp;&nbsp;&nbsp;&nbsp;Set cnADO = CreateObject("ADODB.Connection")

&nbsp;&nbsp;&nbsp;&nbsp;strPath = ThisWorkbook.FullName

&nbsp;&nbsp;&nbsp;&nbsp;strTable = "[Sheet1$]"

&nbsp;&nbsp;&nbsp;&nbsp;i = 1

&nbsp;&nbsp;&nbsp;&nbsp;Do While Sheets("SHEET1").Cells(1, i) <> ""

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TT = TT & "sum(f" & i & "),"

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i = i + 1

&nbsp;&nbsp;&nbsp;&nbsp;Loop

&nbsp;&nbsp;&nbsp;&nbsp;TT = Left(TT, Len(TT) - 1)

&nbsp;&nbsp;&nbsp;&nbsp;'建立连接,提取数据

&nbsp;&nbsp;&nbsp;&nbsp;cnADO.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties='excel 8.0;hdr=no;imex=1';data source=" & strPath

&nbsp;&nbsp;&nbsp;&nbsp;strSQL = "select " & TT & " from " & strTable

&nbsp;&nbsp;&nbsp;&nbsp;Set Z = cnADO.Execute(strSQL)

&nbsp;&nbsp;&nbsp;&nbsp;Sheets("SHEET2").Select

&nbsp;&nbsp;&nbsp;&nbsp;Range("a5:aa5").ClearContents

&nbsp;&nbsp;&nbsp;&nbsp;[a5].CopyFromRecordset Z

&nbsp;&nbsp;&nbsp;&nbsp;cnADO.Close

&nbsp;&nbsp;&nbsp;&nbsp;Set cnADO = Nothing

End Sub

代码解析:

1上述过程代码看似多些,但其实非常的清晰,利用一个循环完成列数的聚合函数的书写,然后利用SQL语句完成一个查询,直接的输出结果。

2 &nbsp;Do While Sheets("SHEET1").Cells(1, i) <> ""

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TT = TT & "sum(f" & i & "),"

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i = i + 1

&nbsp;&nbsp;&nbsp;&nbsp;Loop

&nbsp;&nbsp;&nbsp;&nbsp;TT = Left(TT, Len(TT) - 1)

上述代码是完成了聚合函数SUM的书写过程,不清楚的请查阅《VBA数据库解决方案》。

3 cnADO.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties='excel 8.0;hdr=no;imex=1';data source=" & strPath

&nbsp;&nbsp;&nbsp;strSQL = "select " & TT & " from " & strTable

&nbsp;&nbsp;&nbsp;Set Z = cnADO.Execute(strSQL)

建立连接实现查询

4 &nbsp;[a5].CopyFromRecordset Z

提出数据。

下面看输出的结果:

两种方案借助于SUM函数得到了一样的结果,可见,SUM函数在数据的统计中,无论是EXCEL的工作表计算,还是VBA代码的利用,还是数据库的利用,都有着非常方便的实用性,我们要发掘其中的实用方法,好好利用。

备注:《VBA数据库解决方案》是教程的中级部分,此处是帮助初学人员能感受到VBA深入学习后的魅力。

ØSUM函数强大的生命力.xlsm

我20多年的VBA实践经验,全部浓缩在下面的各个教程中:

相关推荐
玩电脑的辣条哥2 小时前
Python如何播放本地音乐并在web页面播放
开发语言·前端·python
ll7788114 小时前
LeetCode每日精进:20.有效的括号
c语言·开发语言·算法·leetcode·职场和发展
Jackson@ML6 小时前
Python数据可视化简介
开发语言·python·数据可视化
赵琳琅6 小时前
Java语言的云计算
开发语言·后端·golang
lly2024066 小时前
jQuery 杂项方法
开发语言
赵琳琅7 小时前
MDX语言的安全开发
开发语言·后端·golang
开开又心心的学嵌入式7 小时前
C语言——指针进阶应用
c语言·开发语言
开开又心心的学嵌入式7 小时前
C语言——指针基础知识
c语言·开发语言
lonelyhiker7 小时前
javascript的原型链
开发语言·javascript·原型模式
夏梓蕙8 小时前
Elixir语言的软件开发工具
开发语言·后端·golang