|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
- Sub ykcbf() '//2025.3.14
- Application.ScreenUpdating = False
- Application.DisplayAlerts = False
- bt = 1: col = 1: c = 2: c1 = 3
- Dim zr(1 To 1000)
- br = [{"小计","累计"}]
- On Error Resume Next
- With ActiveSheet
- arr = .UsedRange
- For i = bt + 1 To UBound(arr)
- If InStr(arr(i, c), br(1)) Then
- MsgBox "已有小计行,不必再插入!"
- Exit Sub
- End If
- Next
- .Cells.Interior.ColorIndex = 0
- ReDim brr(1 To UBound(arr) * 2, 1 To 7)
- ReDim Sum(1 To 7)
- ReDim Ss(1 To 7)
- For i = bt + 1 To UBound(arr)
- If Month(arr(i, col)) & arr(i, 2) <> Month(arr(i - 1, col)) & arr(i - 1, 2) Then k = k + 1: zr(k) = Array(i, i)
- zr(k)(1) = i
- Next
- For x = 1 To k
- r1 = zr(x)(0): r2 = zr(x)(1)
- n = r2 - r1 + 1
- For i = r1 To r2
- m = m + 1
- For j = 1 To UBound(arr, 2)
- brr(m, j) = arr(i, j)
- Next
- Next
- m = m + 2
- brr(m - 1, 2) = Month(arr(r1, 1)) & "月" & arr(r1, 2) & br(1)
- brr(m, 2) = Month(arr(r1, 1)) & "月" & br(2)
- For j = c1 To UBound(arr, 2)
- brr(m - 1, j) = Application.Sum(.Cells(r1, j).Resize(n))
- Ss(j) = Ss(j) + brr(m - 1, j)
- If x = 1 Or Month(arr(r2, col)) <> Month(arr(zr(x - 1)(1), col)) Then
- brr(m, j) = brr(m - 1, j)
- Sum(j) = brr(m - 1, j)
- Else
- Sum(j) = Sum(j) + brr(m - 1, j)
- End If
- brr(m, j) = Sum(j)
- Next
- Next
- m = m + 1
- brr(m, 2) = "总计"
- For j = c1 To UBound(arr, 2)
- brr(m, j) = Ss(j)
- Next
- With .Cells(bt + 1, 1).Resize(m, UBound(arr, 2))
- .Value = brr
- .Borders.LineStyle = 1
- .HorizontalAlignment = xlCenter
- .VerticalAlignment = xlCenter
- End With
- For i = bt + 1 To m + bt
- Set Rng = .Cells(i, c)
- If InStr(Rng.Value, "小计") Then
- Rng.Resize(, 6).Interior.ColorIndex = 4
- Rng.Offset(1).Resize(, 6).Interior.ColorIndex = 6
- End If
- If InStr(Rng.Value, "总计") Then
- Rng.Resize(, 6).Interior.ColorIndex = 8
- End If
- Next
- ActiveWindow.DisplayZeros = False
- End With
- Application.ScreenUpdating = True
- MsgBox "OK!"
- End Sub
- Sub 删除小计()
- With ActiveSheet
- bt = 2: col = 2
- r = .Cells(.Rows.Count, col).End(xlUp).Row
- Set Rng = Nothing
- For i = bt + 1 To r
- If InStr(.Cells(i, col), "计") Then
- If Rng Is Nothing Then
- Set Rng = .Rows(i)
- Else
- Set Rng = Union(Rng, .Rows(i))
- End If
- End If
- Next
- If Not Rng Is Nothing Then Rng.EntireRow.Delete
- End With
- End Sub
复制代码
|
|