|
|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
Sub test()
Dim r%, i%
Dim arr, brr, hh(), lk()
Dim d As Object
Set d = CreateObject("scripting.dictionary")
Application.ScreenUpdating = False
Application.DisplayAlerts = False
With Worksheets("sheet1")
r = .Cells(.Rows.Count, 1).End(xlUp).Row
c = .Cells(2, .Columns.Count).End(xlToLeft).Column
ReDim hh(1 To 3)
For i = 1 To 3
hh(i) = .Rows(i).RowHeight
Next
ReDim lk(1 To c)
For j = 1 To c
lk(j) = .Columns(j).ColumnWidth
Next
arr = .Range("b1:b" & r)
For i = 4 To UBound(arr)
If Not d.exists(arr(i, 1)) Then
Set d(arr(i, 1)) = .Range("a1:k3")
End If
Set d(arr(i, 1)) = Union(d(arr(i, 1)), .Cells(i, 1).Resize(1, 11))
Next
End With
Application.SheetsInNewWorkbook = 1
For Each aa In d.keys
Set wb = Workbooks.Add
With wb
With .Worksheets(1)
d(aa).Copy .Range("a1")
r = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range("g3:k3").FormulaR1C1 = "=SUM(R4C:R" & r & "C)"
For i = 1 To 2
.Rows(i).RowHeight = hh(i)
Next
.Rows("3:" & r).RowHeight = hh(3)
For j = 1 To c
.Columns(j).ColumnWidth = lk(j)
Next
End With
.SaveAs Filename:=ThisWorkbook.Path & "" & aa
.Close False
End With
Next
Application.ScreenUpdating = True
MsgBox "数据拆分完毕!"
End Sub
这个代码如果列数是36列,然后行数有848行,我还是将要拆分的关键字放在B列就是了。我改哪里呢?
另外这个“Resize(1, 11)"是什么意思?看了上面的解释还是有点不明白。因为拆自己的表格数据还是不成功。我将上面的 Set d(arr(i, 1)) = .Range("a1:k3")这个k3改为aj848后就只生成一个新表,就是等于将原来的整个表搬为新表,然后没有重命名就报错了。
谢谢。 |
|