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 Arr As Variant
Dim Rng As Range
Set Dic = CreateObject("Scripting.Dictionary")
Dim SendDate$, Client$, Cargo$, Style$, Num# Set Wb = Application.ThisWorkbook
Set Sht = Wb.Worksheets("数据表")
Set oSht = Wb.Worksheets("统计表")
With Sht
endrow = .Cells.Find("*", .Cells(1, 1), xlValues, xlWhole, xlByRows, xlPrevious).Row
Set Rng = .Range("A2:Z" & endrow)
Arr = Rng.Value
For i = LBound(Arr) To UBound(Arr)
SendDate = Format(CStr(Arr(i, 2)), "yyyy年mm月")
'Debug.Print mydate
Client = Arr(i, 4)
If Client = "" Then Client = "空"
Cargo = Arr(i, 5)
If Cargo = "" Then Cargo = "空"
Num = Arr(i, 10)
If InStr(1, Arr(i, 8), ",") > 0 Then
Style = Split(Arr(i, 8), ",")(0)
Else
Style = Arr(i, 8)
End If
'Debug.Print Style Key = SendDate & ";" & Client & ";" & Cargo & ";" & Style
Dic(Key) = Dic(Key) + Num Next i End With With oSht
.Cells.Clear
.Range("A1:E1").Value = Array("月份", "客户", "货品", "花色", "数量")
Arr = SubTotalDicToArr(Dic, ";")
.Range("A2").Resize(UBound(Arr), UBound(Arr, 2)).Value = Arr CustomSort .Range("A1").CurrentRegion
SetEdges .Range("A1").CurrentRegion End With UsedTime = VBA.Timer - StartTime
Debug.Print "UsedTime:" & Format(UsedTime, "0.000 Seconds") ErrorExit:
AppSettings False Set Wb = Nothing
Set Sht = Nothing
Set oSht = Nothing
Set Rng = Nothing
Set Dic = Nothing Exit Sub
ErrHandler:
If Err.Number <> 0 Then
MsgBox Err.Description & "!", vbCritical, "NextSeven QQ 84857038"
Debug.Print Err.Description
Err.Clear
Resume ErrorExit
End If
End Sub
Public Sub AppSettings(Optional IsStart As Boolean = True)
If IsStart Then
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
Application.StatusBar = ">>>>>>>>Macro Is Running>>>>>>>>"
Else
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic
Application.StatusBar = False
End If
End Sub
Public Function SubTotalDicToArr(ByVal Dic As Object, ByVal Separator As String) As Variant()
Dim Arr(), OneKey, Key$, Item$, iRow&, iCol&
Dim Keys, Items, m&, n&, KeyCount&, ItemCount&
iCol = 0
For Each OneKey In Dic.Keys
iCol = UBound(Split(OneKey, Separator)) + 1
iCol = iCol + UBound(Split(Dic(OneKey), Separator)) + 1
Exit For
Next OneKey
iRow = Dic.Count
ReDim Arr(1 To iRow, 1 To iCol)
m = 0
For Each OneKey In Dic.Keys
m = m + 1
Keys = Split(OneKey, Separator)
KeyCount = UBound(Keys) + 1
For n = 1 To KeyCount
Arr(m, n) = Keys(n - 1)
Next n
Items = Split(Dic(OneKey), Separator)
ItemCount = UBound(Items) + 1
For n = 1 To ItemCount
Arr(m, KeyCount + n) = Items(n - 1)
Next n
Next OneKey
SubTotalDicToArr = Arr
End Function Private Sub SetEdges(ByVal Rng As Range)
With Rng
.HorizontalAlignment = xlCenter
With .Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With .Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With .Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With .Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
If .Cells.Count > 1 Then
With .Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With .Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
End If
End With
End Sub
Sub CustomSort(ByVal RngWithTitle As Range)
With RngWithTitle
.Sort Key1:=RngWithTitle.Cells(1, 1), Order1:=xlAscending, _
Key2:=RngWithTitle.Cells(1, 2), Order2:=xlAscending, Header:=xlYes, _
MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin
End With
End Sub

  

20170711xlVBA自定义分类汇总一例的更多相关文章

  1. 20170928xlVBA自定义分类汇总

    SubtotalByCQL Range("A1:E100").Value, "Select 1,2,Sum(4),Count(4) GroupBy 1,2", ...

  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. Android开源项目分类汇总-转载

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

随机推荐

  1. uva11383 转化为 二分图匹配

    给定一个n*n矩阵,每个格子里都有一个正整数w(i,j).你的任务是给每行确定一个整数row(i),没列也确定一个正整数col(i),使得对于任意格子(i,j),w(i,j) <= row(i) ...

  2. Sa身份登陆SQL SERVER失败的解决方案

    经常使用windows身份登陆,久而久之,基本不动怎么用SQL SERVER身份验证登陆,所以趁着有空,就解决一下一些问题~~ 解决方案:  第一步:打开SSMS,先使用windows身份登陆,右击服 ...

  3. 关于VS2010的帮助文档更改路径

    不小心把MSDN装在系统盘怎么办? 由于自己的C盘空间比较有限,所以经常需要把软件安装在其他磁盘,比如E盘,但是这次重装却不小心就装在C盘了,特遗憾,偶然在网上找到可以更改路径的方法,自己试试,成功了 ...

  4. Java笔记 #02# 带资源的try语句

    索引 普通的 try.java 带资源的 try.java 当资源为 null 的情况 可以参考的文档与资料 / test.txt 待读取的内容 hello. / 普通的 try.java 读取 te ...

  5. JCTools, 场景特化的并发工具

    同上一篇一样,在jmap -histo中发现MpscChunkedArrayQueue类的实例比较多,javadoc看了下,其原来是出自JC Tools,https://github.com/JCTo ...

  6. 依赖注入(DI)在PHP中的实现

    什么是依赖注入? IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection,简称DI). 当一个类的实例需要另一 ...

  7. 20145227鄢曼君《网络对抗》shellcode注入&Return-to-libc攻击深入

    20145227鄢曼君<网络对抗>shellcode注入&Return-to-libc攻击深入 shellcode注入实践 shellcode基础知识 Shellcode实际是一段 ...

  8. 20145303刘俊谦 《网络对抗》Exp9 Web安全基础实践

    20145303刘俊谦 <网络对抗>Exp9 Web安全基础实践 基础问题回答 1.SQL注入原理,如何防御 SQL注入 就是通过把SQL命令插入到"Web表单递交"或 ...

  9. 20144303石宇森《网络对抗》MSF基础应用

    20144303石宇森<网络对抗>MSF基础应用 实验后回答问题 一.解释什么是exploit,payload,encode: 我认为exploit就是一个简单的攻击指令,就是对配置所有设 ...

  10. mac下的一些操作

    mac 下修改Hosts文件 : http://www.cnblogs.com/zhangqs008/p/3773623.html mac下装Tomcat服务器: 在苹果系统安装Tomcat:首先下载 ...