|
|
用轮子很快
- Dim f As New clsFunc
- Sub Main()
- Dim i&, r, j&, y&, n&, m&, x, arr, brr, arrjg
- arr = f.GetArrData([a6], 1, 1, , mCols:=4)
- For i = 2 To UBound(arr)
- If arr(i, 1) = "" Then arr(i, 1) = arr(i - 1, 1)
- Next
-
- Dim d As New clsDic, rng As Range
- Dim cjg As New Collection, cRow As Collection
- d.init_Collection arr, "1", 1, , True
- For Each x In d.Keys
- Set cRow = d.Rows_Collection(x & "", xxCollection)
- cjg.Add f.myFilter(arr, cRow)
-
- ReDim brr(1 To 1, 1 To UBound(arr, 2))
- brr(1, 1) = "汇总"
- brr(1, 3) = d.Sum_collection(x & "", 3)
- brr(1, 4) = d.Sum_collection(x & "", 4)
- cjg.Add brr '添加汇总行
- Next
- arrjg = f.Coll2dToArr(cjg)
- Set rng = f.Get_range_data([f7], , USEDRANGEROW, , usedRangeColumn)
- If Not rng Is Nothing Then
- rng.UnMerge
- rng.ClearContents
- End If
- f.Auto_ArrToRange arrjg, [f7]
- 批量合并单元格 "F", 7
- End Sub
- Sub 批量合并单元格(lie, sr)
- Dim i&, r&, y&, k&, n&, m&, arr
- Dim er&, ssR$, col&, Sh As Worksheet
- With Application
- .ScreenUpdating = False
- .DisplayAlerts = False
- .AskToUpdateLinks = False
- End With
- 'Set sh = Sheet1 '这里也要改
- 'lie = "b": col = 2 '合并那列就改这2个地方
-
- Set Sh = ActiveSheet
-
- If VBA.IsNumeric(lie) Then
- col = lie
- lie = Split(Cells(1, col).Address, "$")(1)
- Else
- col = Range(lie & 1).column
- End If
- On Error Resume Next
- Sh.ShowAllData
- On Error GoTo 0
-
- r = Sh.Cells(Sh.Rows.Count, lie).End(xlUp).Row
- arr = Sh.Range("a1").Resize(r + 1, col).Value '加一行,为了循环的时候比较
- 'sr = 2 '开始合并的行数
- For i = sr To r
- If arr(i, col) <> arr(i + 1, col) Then
- ssR = ssR & "," & lie & sr & ":" & lie & i
- sr = i + 1
- End If
- If Len(ssR) > 200 Then
- Sh.Range(Mid(ssR, 2)).Merge
- ssR = ""
- End If
- If ssR <> "" And i = r Then
- Sh.Range(Mid(ssR, 2)).Merge
- End If
- Next
- With Application
- .ScreenUpdating = True
- .DisplayAlerts = True
- .AskToUpdateLinks = True
- End With
- End Sub
复制代码
|
评分
-
1
查看全部评分
-
|