|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
代码如下,按自选部门查询。- Sub ykcbf() '//2024.2.22
- Dim arr, d, zr
- Application.ScreenUpdating = False
- Application.DisplayAlerts = False
- Set d = CreateObject("Scripting.Dictionary")
- Set ws = ThisWorkbook
- Set sh = ws.Sheets("考核汇总")
- bm = sh.[j2].Value
- For Each sht In ws.Sheets
- If sht.Name <> sh.Name Then
- With sht
- fn = .Name
- arr = .UsedRange
- c = .Rows(2).Find("小计", , , , , 1).Column
- End With
- p4 = IIf(InStr(fn, "自查"), "自查", "")
- For i = 3 To UBound(arr)
- If InStr(bm, arr(i, 2)) Then
- s = arr(i, 2) & "|" & arr(i, 3) & "|" & arr(i, 4) & "|" & arr(i, 5) & "|" & p4
- d(s) = arr(i, c)
- End If
- Next
- End If
- Next
- ReDim brr(1 To d.Count, 1 To 8)
- For Each k In d.keys
- m = m + 1
- b = Split(k, "|")
- brr(m, 1) = m
- brr(m, 2) = b(0)
- brr(m, 3) = b(1)
- brr(m, 4) = b(2)
- brr(m, 5) = b(3)
- brr(m, 6) = d(k)
- brr(m, 8) = b(4)
- Next
- On Error Resume Next
- With sh
- .UsedRange.Offset(2).UnMerge
- .UsedRange.Offset(2).Clear
- With .[a3].Resize(m, 8)
- .Value = brr
- .Borders.LineStyle = 1
- .HorizontalAlignment = xlCenter
- .VerticalAlignment = xlCenter
- End With
- .[a3].Resize(m, 8).Sort .[b3], 1
- zr = Array(1, 2, 7)
- Call 合并单元格(3, 2, zr)
- Call 合并单元格求和(3, 4, 6, 7)
- End With
- Set d = Nothing
- Application.ScreenUpdating = True
- MsgBox "OK!"
- End Sub
- Function 合并单元格(r1, c, zr) '//2024.2.22
- Application.DisplayAlerts = False
- r = ActiveSheet.Cells(Rows.Count, c).End(3).Row
- Dim rng As Range
- For i = r To r1 Step -1
- Set rng = ActiveSheet.Cells(i, c)
- Set Rng1 = rng.Offset(-1)
- If rng = Rng1 Then
- For x = 0 To UBound(zr)
- ActiveSheet.Cells(i, zr(x)).Offset(-1).Resize(2).Merge
- Next
- End If
- Next
- Application.DisplayAlerts = True
- End Function
- Function 合并单元格求和(r1, col, c1, c)
- With ActiveSheet
- r = .Cells(Rows.Count, col).End(3).Row
- For i = r1 To r
- Set rng = .Cells(i, c)
- Sum = 0
- If rng.MergeCells = True Then
- n = n + 1
- .Cells(i, 1) = n
- m = rng.MergeArea.Count
- For x = 1 To m
- Sum = Sum + ActiveSheet.Cells(i + x - 1, c1)
- Next
- rng.Value = Sum
- i = i + m - 1
- Else
- rng.Value = rng.Offset(, c1 - c).Value
- End If
- Next
- End With
- End Function
复制代码
|
|