Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3316|回复: 15

[已解决]多区域统计个数的VBA.

[复制链接]
发表于 2017-8-13 15:38 | 显示全部楼层 |阅读模式
本帖最后由 mate66 于 2017-8-15 11:35 编辑

多区域统计个数的VBA.
最佳答案
2017-8-15 10:58
  1. Sub main()
  2.     Dim rng As Range, RngColor As Range
  3.     Set rng = Range("g15")   '自选单元格改为:set rng=selection
  4.     mycolor = Array(0, 3, 33, 10, 6)    '颜色出现的次序,从第二个开始。
  5.     ActiveSheet.UsedRange.Cells.Interior.ColorIndex = 0
  6.     rng.Interior.ColorIndex = 6
  7.     Range("b35:ar1000") = ""
  8.     For k = 1 To 4
  9.         If k = 1 Then
  10.             Set RngColor = rng.Offset(10, 3).Resize(5, 12)
  11.         ElseIf k = 2 Then
  12.             Set RngColor = rng.Offset(3, 3).Resize(4, 12)
  13.         ElseIf k = 3 Then
  14.             Set RngColor = rng.Offset(-3, 13).Resize(5, 18)
  15.         Else
  16.             Set RngColor = rng.Offset(4, 21).Resize(5, 14)
  17.         End If
  18.         RngColor.Interior.ColorIndex = mycolor(k)
  19.         c = RngColor.Column
  20.         rmax = Cells(65536, c).End(3).Row + 2
  21.         Cells(rmax, c).Resize(10, 2) = 统计个数(RngColor)
  22.         Cells(rmax, c).Resize(10, 2).Interior.ColorIndex = mycolor(k)
  23.     Next
  24. End Sub
  25. Function 统计个数(rng As Range)
  26.     Dim arr(9, 1 To 2), x As Range
  27.     For Each x In rng
  28.         y = x.Value
  29.         arr(x, 1) = x
  30.         arr(x, 2) = arr(x, 2) + 1
  31.     Next
  32.     For i = 0 To 8
  33.         For j = i + 1 To 9
  34.             If arr(j, 2) > arr(i, 2) Then
  35.                 tmp = arr(i, 2): arr(i, 2) = arr(j, 2): arr(j, 2) = tmp
  36.                 tmp = arr(i, 1): arr(i, 1) = arr(j, 1): arr(j, 1) = tmp
  37.             End If
  38.         Next
  39.     Next
  40.     统计个数 = arr
  41. End Function
复制代码

自由多区域的统计个数VBA.rar

14.16 KB, 下载次数: 17

 楼主| 发表于 2017-8-13 21:28 | 显示全部楼层
回复

使用道具 举报

发表于 2017-8-14 14:10 | 显示全部楼层
为什么选取G15, 相对此单元格的区域会如蓝、红、绿、黄四个区域?
回复

使用道具 举报

 楼主| 发表于 2017-8-14 14:16 | 显示全部楼层
grf1973 发表于 2017-8-14 14:10
为什么选取G15, 相对此单元格的区域会如蓝、红、绿、黄四个区域?

任意选取一单元格,然后统计多个区域的结果。   
本来要选取多个区域,现在选取一个单元格即可以同时作用于多个区域,在实际操作中方便。

回复

使用道具 举报

发表于 2017-8-14 14:34 | 显示全部楼层
功能本身很容易实现。
就是要问:为什么选取G1单元格,可以同时作用于蓝、红、绿、黄四个区域?
回复

使用道具 举报

发表于 2017-8-14 14:36 | 显示全部楼层
示例是单区域的统计及排序。
多区域只要多次引用,调整数据范围,显示位置即可。

自由多区域的统计个数代码.rar

21.78 KB, 下载次数: 12

回复

使用道具 举报

 楼主| 发表于 2017-8-14 14:47 | 显示全部楼层
grf1973 发表于 2017-8-14 14:36
示例是单区域的统计及排序。
多区域只要多次引用,调整数据范围,显示位置即可。

老师这样操作不灵活了。因为代码中的统计区域是固定的。

如果是相对一个任意选取单元格的多个区域,则使用非常灵活。
任意选取一个单元格,则与此单元格偏移的区域同时统计。



回复

使用道具 举报

 楼主| 发表于 2017-8-14 14:57 | 显示全部楼层
grf1973 发表于 2017-8-14 14:36
示例是单区域的统计及排序。
多区域只要多次引用,调整数据范围,显示位置即可。

老师:
1.相对任意选取单元格的多区域统计。
        比如任意点一个单元格G15,运行代码,则与G15偏移的多个区域统计。
        又任意点一个单元格M17,运行代码,则与M17单元格偏移的多个区域统计。 这样灵活统计多区域。






2.统计结果的放置,是对应在每个统计区域。与所属统计区域的起始列同列开始放置。
         比如示例中4个区域,统计的结果也是对应4个区域填入。
         红、蓝区域起始列同列,发生重叠,要上下放置。

回复

使用道具 举报

发表于 2017-8-14 15:47 | 显示全部楼层
比如任意点一个单元格G15,运行代码,则与G15偏移的多个区域统计。
又任意点一个单元格M17,运行代码,则与M17单元格偏移的多个区域统计。 这样灵活统计多区域。

你一直没有解释清楚,如何个偏移法?就是如何通过一个单元格得到需要统计的数据区域。
示例只是单独区域的,只要知道怎样偏移,可以很方便的得出结果。
回复

使用道具 举报

 楼主| 发表于 2017-8-14 15:57 | 显示全部楼层
grf1973 发表于 2017-8-14 15:47
比如任意点一个单元格G15,运行代码,则与G15偏移的多个区域统计。
又任意点一个单元格M17,运行代码,则 ...

老师,偏移可以任意设置,可以按示例那样设置偏移做好效果。   如果要更改偏移 统计区域,只需要在代码里事先更改好就可以。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-3-29 22:37 , Processed in 0.487724 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表