|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
这个用VBA来统计很方便,效果如下图所示——
代码如下——
- Option Explicit
- Sub 整理名单()
- Dim rngDB As Range, arr(9999, 10), c As Range, i%, j%, k%
- 'Set rngDB = Application.InputBox("请选择数据源所在单元格区域:", "数据选择", Type:=8)
- 'If rngDB Is Nothing Then Exit Sub
- Set rngDB = Sheets("数据源").UsedRange
- With rngDB
- .Sort Key1:=.Cells(1, 3), Order1:=xlAscending, Key2:=.Cells(1, 4), Order2:=xlAscending '对数据区域按部门和子部门排序
- i = 2
- arr(0, 0) = "劳保名单(人数:" & Application.CountA(.Columns(1)) & "人)"
- Do While Len(.Cells(i, 3)) > 0 '在部门列循环
- If .Cells(i, 3) <> .Cells(i - 1, 3) Then '碰到部门第一条数据,写入数组
- j = j + 1 '数组记录行数累进
- arr(j, 0) = .Cells(i, 3) & " " & .Cells(i, 4) '写入部门名
- arr(j, 1) = .Cells(i, 1) '写入人名
- k = 1 '数组中同一行数据列数计数器初始为1
- Else '同部门数据,每十列为一组写入数组
- If .Cells(i, 4) <> .Cells(i - 1, 4) Then '碰到同部门不同子部门的第一条数据,修改计数器
- j = j + 1 '数组行数+1
- k = 0 '数组内列数计数器归0
- arr(j, 0) = .Cells(i, 3) & " " & .Cells(i, 4) '写入部门名
- End If
- k = k + 1 '数组内列计数器累进
- If k > 10 Then '当K累进超过10时,数组记录行数+1,同时列数计数器初始为1
- j = j + 1
- k = 1
- End If
- arr(j, k) = .Cells(i, 1) '根据列数K的值向数组内写入人名
- End If
- i = i + 1 '数据记录行数计数器累进
- Loop
- End With
- [G:Q].ClearContents '清空结果显示区域
- [G1].Resize(UBound(arr), 11) = arr '输出统计结果
- End Sub
复制代码
附件如下——
|
-
-
举例模版.rar
49.89 KB, 下载次数: 19
含VBA,打开时需要启用宏
|