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自定义分类汇总的更多相关文章

  1. 20170711xlVBA自定义分类汇总一例

    Public Sub CustomSubTotal() AppSettings On Error GoTo ErrHandler Dim StartTime, UsedTime As Variant ...

  2. GitHub上史上最全的Android开源项目分类汇总 (转)

    GitHub上史上最全的Android开源项目分类汇总 标签: github android 开源 | 发表时间:2014-11-23 23:00 | 作者:u013149325 分享到: 出处:ht ...

  3. GitHub上史上最全的Android开源项目分类汇总

    今天在看博客的时候,无意中发现了 @Trinea 在GitHub上的一个项目 Android开源项目分类汇总 ,由于类容太多了,我没有一个个完整地看完,但是里面介绍的开源项目都非常有参考价值,包括很炫 ...

  4. Android 开源项目分类汇总(转)

    Android 开源项目分类汇总(转) ## 第一部分 个性化控件(View)主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Galler ...

  5. Android 开源项目分类汇总

    Android 开源项目分类汇总 Android 开源项目第一篇——个性化控件(View)篇  包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView ...

  6. Android开源项目分类汇总【畜生级别】[转]

    Android开源项目分类汇总 欢迎大家推荐好的Android开源项目,可直接Commit或在 收集&提交页 中告诉我,欢迎Star.Fork :) 微博:Trinea    主页:www.t ...

  7. Android开源项目分类汇总[转]

    Android开源项目分类汇总 如果你也对开源实现库的实现原理感兴趣,欢迎 Star 和 Fork Android优秀开源项目实现原理解析欢迎加入 QQ 交流群:383537512(入群理由需要填写群 ...

  8. Android开源项目分类汇总【畜生级别】

    From :http://blog.csdn.net/forlong401/article/details/25459403?c=6c4cd677a617db4655988e41ee081691#t7 ...

  9. Excel分类汇总与数据有效性

    分类汇总就是把一些数据按照一个标准进行分类,然后按照相应的汇总方式进行汇总. 使用分类汇总之前先排序,否则汇总会出现很多类. 看如上这个表,如果按照所属区域分类,然后按照金额的总和汇总,在汇总之前就要 ...

随机推荐

  1. 前端 --- 2 css

    一. CSS的几种引入方式 1.行内样式 2.内部样式 写在网页的<head></head>标签对的<style></style>标签对中 3.外部样式 ...

  2. Windows Installation

    If you're running on Windows it is good to run Jenkins as a service so it starts up automatically wi ...

  3. Cannot add foreign key constraint @ManyToMany @OneToMany

    最近在使用shiro做权限管理模块时,使用的时user(用户)-role(角色)-resource(资源)模式,其中user-role 是多对多,role-resource 也是多对多.但是在使用sp ...

  4. #pragma data_seg() 共享数据// MyData段 // 进程 // DLL

    https://www.cnblogs.com/dongsheng/p/4476157.html http://www.cnblogs.com/CBDoctor/archive/2013/01/26/ ...

  5. MVC 之 初识(一)

    创建一个mvc项目,在项目中会startup.cs文件,startup文件主要是将项目寻找一个宿主 过去,项目一般都是寄宿在iis上的,通过owin可以寄宿到不同的宿主. 可以关闭owin:<a ...

  6. hdu 6070 Dirt Ratio 线段树+二分

    Dirt Ratio Time Limit: 18000/9000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)Spe ...

  7. 算法时间复杂度的表示法O(n²)、O(n)、O(1)、O(nlogn)等是什么意思?

    Java中  Set 和 List 集合  的contains()方法,检查数组链表中是否包含某元素检查数组链表中是否包含某元素,使用 Set 而不使用 List  的原因是效率问题, 前者的 set ...

  8. git中 .ignore文件的配置 忽略不想上传的文件

    1.配置语法: 以斜杠“/”开头表示目录: 以星号“*”通配多个字符: 以问号“?”通配单个字符 以方括号“[]”包含单个字符的匹配列表: 以叹号“!”表示不忽略(跟踪)匹配到的文件或目录: 此外,g ...

  9. python3.7.2 pip 出现locations that require TLS/SSL异常处理方法

    centos7安装python3.7.2后,运行 pip3 install tornado 会报错 [root@localhost ~]# pip3 install tornado pip is co ...

  10. WSL(Windows Subsystem for Linux) 适用于Linux的Windows子系统

    打开 Microsoft Store , 搜索 Linux .选择 Ubuntu , 仔细看介绍,尤其是安装前的说明 ========================================= ...