20170928xlVBA自定义分类汇总
SubtotalByCQL Range("A1:E100").Value, "Select 1,2,Sum(4),Count(4) GroupBy 1,2", Range("J1"), True
Sub SubtotalByCQL(ByVal Arr As Variant, ByVal CQL As String, ByVal DesRange As Range, Optional Header As Boolean = False)
Dim i As Long, j As Long, m As Long
Dim Sel As String, Grp As String, Sels, Grps
Dim Ar() As Variant, Br As Variant
Dim Dic As Object
Set Dic = CreateObject("Scripting.Dictionary")
CQL = UCase(CQL)
Sel = Replace(Replace(Split(CQL, "GROUPBY")(0), " ", ""), "SELECT", "")
Sels = Split(Sel, ",")
Grp = Replace(Split(CQL, "GROUPBY")(1), " ", "")
Grps = Split(Grp, ",")
If Header Then
Key = ""
For j = LBound(Grps) To UBound(Grps)
Key = Key & ";" & Arr(1, CLng(Grps(j)))
Next j
Key = Mid(Key, 2)
ReDim Ar(0 To 0)
m = 0
For j = LBound(Sels) To UBound(Sels)
ReDim Preserve Ar(0 To m)
If IsNumeric(Sels(j)) Then
Ar(m) = Arr(1, CLng(Sels(j)))
Else
Select Case Split(Sels(j), "(")(0)
Case "SUM"
Ar(m) = Arr(1, CLng(Split(Split(Sels(j), "(")(1), ")")(0))) & "-求和"
Case "COUNT"
Ar(m) = Arr(1, CLng(Split(Split(Sels(j), "(")(1), ")")(0))) & "-计数"
End Select
End If
m = m + 1
Next j
Dic(Key) = Ar
End If
For i = LBound(Arr) + IIf(Header, 1, 0) To UBound(Arr)
Key = ""
For j = LBound(Grps) To UBound(Grps)
Key = Key & ";" & Arr(i, CLng(Grps(j)))
Next j
Key = Mid(Key, 2)
If Not Dic.Exists(Key) Then
ReDim Ar(0 To 0)
m = 0
For j = LBound(Sels) To UBound(Sels)
ReDim Preserve Ar(0 To m)
If IsNumeric(Sels(j)) Then
Ar(m) = Arr(i, CLng(Sels(j)))
Else
Select Case Split(Sels(j), "(")(0)
Case "SUM"
Ar(m) = Arr(i, CLng(Split(Split(Sels(j), "(")(1), ")")(0)))
Case "COUNT"
Ar(m) = 1
End Select
End If
m = m + 1
Next j
Dic(Key) = Ar
Else
Br = Dic(Key)
For j = LBound(Sels) To UBound(Sels)
If IsNumeric(Sels(j)) Then
Else
Select Case Split(Sels(j), "(")(0)
Case "SUM"
Br(j) = Br(j) + Arr(i, CLng(Split(Split(Sels(j), "(")(1), ")")(0)))
Case "COUNT"
Br(j) = Br(j) + 1
End Select
End If
Next j
Dic(Key) = Br
End If
Next i
DesRange.Resize(Dic.Count, UBound(Sels) + 1).Value = _
Application.Rept(Dic.items, 1)
Set Dic = Nothing
End Sub
20170928xlVBA自定义分类汇总的更多相关文章
- 20170711xlVBA自定义分类汇总一例
Public Sub CustomSubTotal() AppSettings On Error GoTo ErrHandler Dim StartTime, UsedTime As Variant ...
- GitHub上史上最全的Android开源项目分类汇总 (转)
GitHub上史上最全的Android开源项目分类汇总 标签: github android 开源 | 发表时间:2014-11-23 23:00 | 作者:u013149325 分享到: 出处:ht ...
- GitHub上史上最全的Android开源项目分类汇总
今天在看博客的时候,无意中发现了 @Trinea 在GitHub上的一个项目 Android开源项目分类汇总 ,由于类容太多了,我没有一个个完整地看完,但是里面介绍的开源项目都非常有参考价值,包括很炫 ...
- Android 开源项目分类汇总(转)
Android 开源项目分类汇总(转) ## 第一部分 个性化控件(View)主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Galler ...
- Android 开源项目分类汇总
Android 开源项目分类汇总 Android 开源项目第一篇——个性化控件(View)篇 包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView ...
- Android开源项目分类汇总【畜生级别】[转]
Android开源项目分类汇总 欢迎大家推荐好的Android开源项目,可直接Commit或在 收集&提交页 中告诉我,欢迎Star.Fork :) 微博:Trinea 主页:www.t ...
- Android开源项目分类汇总[转]
Android开源项目分类汇总 如果你也对开源实现库的实现原理感兴趣,欢迎 Star 和 Fork Android优秀开源项目实现原理解析欢迎加入 QQ 交流群:383537512(入群理由需要填写群 ...
- Android开源项目分类汇总【畜生级别】
From :http://blog.csdn.net/forlong401/article/details/25459403?c=6c4cd677a617db4655988e41ee081691#t7 ...
- Excel分类汇总与数据有效性
分类汇总就是把一些数据按照一个标准进行分类,然后按照相应的汇总方式进行汇总. 使用分类汇总之前先排序,否则汇总会出现很多类. 看如上这个表,如果按照所属区域分类,然后按照金额的总和汇总,在汇总之前就要 ...
随机推荐
- android studio设计模式和文本模式切换
- ODAC(V9.5.15) 学习笔记(四)TCustomDADataSet(3)
4. 主从表关系 名称 类型 说明 MasterSource 从表对应于主表的DataSource组件 DetailFields 从表中对应于主表字段的外键字段 MasterFields 主表中关联从 ...
- P4556 [Vani有约会]雨天的尾巴
目录 思路 优化 过程中的问题/疑问 错误 代码 思路 每个节点维护一课线段树(当然是动态开点) 线段树的作用是统计这个节点有多少种粮食型号,以及最多的粮食型号 然后树上差分,u和v点 +1,lca( ...
- Docker 安装Hadoop HDFS命令行操作
网上拉取Docker模板,使用singlarities/hadoop镜像 [root@localhost /]# docker pull singularities/hadoop 查看: [root@ ...
- 逆波兰表达式|2013年蓝桥杯A组题解析第六题-fishers
逆波兰表达式 正常的表达式称为中缀表达式,运算符在中间,主要是给人阅读的,机器求解并不方便. 例如:3 + 5 * (2 + 6) - 1 而且,常常需要用括号来改变运算次序. 相反,如果使用逆波兰表 ...
- Oracle面试相关
存储过程: https://www.cnblogs.com/taiguyiba/p/7809310.html https://www.cnblogs.com/lideng/p/3427822.html ...
- (转)Spring Cloud(一)
(二期)22.微服务框架spring cloud(一) [课程22]spirng c...简介.xmind54KB [课程22]spirng cl...架构.xmind0.5MB [课程22]负载均. ...
- LOJ121 「离线可过」动态图连通性
思路 动态图连通性的板子,可惜我不会在线算法 离线可以使用线段树分治,每个边按照存在的时间插入线段树的对应节点中,最后再dfs一下求出解即可,注意并查集按秩合并可以支持撤销操作 由于大量使用STL跑的 ...
- Java中substring函数的简单应用
1.删掉一个字符串中的某个字符 /* * 使用Java 中的 substring()函数删掉字符串中的某个字符 * deleteAssignChar函数的参数说明: * str:被操作的字符串 * o ...
- Java基础【冒泡、选择排序、二分查找】
冒泡排序的思路就是前一个和后一个进行比较,如果大的就交换位置 大的数字后浮 如 12 8 5 31 第一轮 8 5 12 31 第二轮 5 8 ...