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

  

时间: 2024-08-03 21:42:23

20170928xlVBA自定义分类汇总的相关文章

20170711xlVBA自定义分类汇总一例

Public Sub CustomSubTotal() AppSettings On Error GoTo ErrHandler Dim StartTime, UsedTime As Variant StartTime = VBA.Timer 'Input code here Dim i As Long, j As Long, k Dim Wb As Workbook Dim Sht As Worksheet Dim oSht As Worksheet Dim Dic As Object Dim

模块管理常规功能自定义系统的设计与实现(41--终级阶段 综合查询[8]分类汇总)

综合查询(8)--分类汇总 这一节来看看分类汇总,在一个查询方案建立好了以后,可以对其进行汇总和分类汇总.分类汇总的级数可以任意级,为了方便操作,暂定为最多三级. 先来看看总计. 在上图显示总计前面就是一个分组设置,当前状态是未选择,我先选择一个按年度分组. 下面显示明细,看看结果. 这是一级分类汇总的,下面看看二级的. 再看看显示明细数据的 下面设置第三级: 三级显示明细 导出的excel表 理论上可以无限级次的分组,我暂定最多设置了三级. 博客是不是写得很失败啊,评论的人都没有一个.这一节也

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

今天在看博客的时候,无意中发现了@Trinea在GitHub上的一个项目Android开源项目分类汇总,由于类容太多了,我没有一个个完整地看完,但是里面介绍的开源项目都非常有参考价值,包括很炫的界面特效设计.个性化控件.工具库.优秀的Android开源项目.开发测试工具.优秀个人和团体等.可以这样说,每一位Andorid开发人员都能从中找到一个或多个适用自己项目的解决方案,消化吸收并加以利用,可以为自己的APP增色不少.文章最后还列出了部分国外著名Android开发者的信息,包括GitHub地址

【Anroid】Android开源项目分类汇总

Android开源项目第一篇——个性化控件(View)篇  包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar.TextView.ScrollView.TimeView.TipView.FlipView.ColorPickView.GraphView.UI Style.其他Android开源项目第二篇——工具库篇  包括依赖注入.图片缓存.网络相关.数据库ORM工具包.Android公共库.高版本向

Excel 学习笔记——排序,筛选,查找,定位,分类汇总和数据有效性及 细节操作技巧

Excel 学习笔记   课程内容:查找.替换.定位 想要实现的目标内容: 1.       替换指定内容,例:苏州 <- 苏州市  红色背景色<- 黄色背景色 将"张某某"替换为"经理的亲戚" 2.       定位特定位置的单元格,类似筛选功能(mac 系统中 暂时未发现定位按钮) 3.       批注 修改 删除 变换形状 隐藏命令 利用的工具,手段(操作按钮的名称,位置): 1.1   查找和替换-选项-单元格匹配 用来锁定指定单元格,避免类似

五、分类汇总与数据有效性

一.分类汇总工具 1.认识分类汇总 使用分类汇总前先排序 数据--分类汇总,在[分类字段].[汇总方式].[选定汇总项]选择相应的选项,如果不选择[替换当前分类汇总]这个选项的话,那能够进行[分类汇总的嵌套]. 分类汇总后会在表格的左上方有数字,这些数字越大所代表的表格的数据越详细.        2.复制分类汇总的结果区域 如果直接进行复制的话,那么复制的是整个表格,所以在复制前先使用[定位]工具对可见单元格进行定位(或则使用快捷键 [alt] + ; ),再进行复制粘贴. 二.设置数据有效性

【Android】Android开源项目分类汇总

第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar.TextView.ScrollView.TimeView.TipView.FlipView.ColorPickView.GraphView.UI Style等等..其他 一.ListView android-pulltorefresh一个强大的拉动刷新开源项目,支持各种控件下拉刷新

Android UI集锦——1.Android Drawable分类汇总(1/3)

Android UI集锦--1.Android Drawable分类汇总(1/3) -转载请注明出处coder-pig 本节引言: 小猪好像写了好几个专题,都没坚持写完,又忍不住开个新的专题了,因为最近打算 开始研究Android图形与图形图像处理,动画以及自定义View等,所以就顺道记录下, 最近事有点多,感觉情绪很低迷,心理压抑又找不到倾述的对象,这个时候程序猿肯定会说: "没对象,你自己new一个啊",好有道理,我竟无言以对...好吧!还是自己的那句座右铭: 没什么可以一蹴而就,

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

Android开源项目分类汇总 如果你也对开源实现库的实现原理感兴趣,欢迎 Star 和 Fork Android优秀开源项目实现原理解析欢迎加入 QQ 交流群:383537512(入群理由需要填写群介绍问题答案) 377723625(一群已满) 欢迎大家推荐好的Android开源项目,可直接Commit,欢迎Star.Fork :) 目前包括: Android开源项目第一篇——个性化控件(View)篇  包括ListView.ActionBar.Menu.ViewPager.Gallery.G