|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
Sub 数据合并()
Application.ScreenUpdating = False
Dim ar As Variant
Dim br()
Dim d As Object, dc As Object
Set d = CreateObject("scripting.dictionary")
lj = ThisWorkbook.Path & "\需合并处理的工作簿\"
ReDim br(1 To 100000, 1 To 200)
f = Dir(lj & "*.xls*")
y = 2: n = 1
br(1, 1) = "月份"
br(1, 2) = "序号"
Do While f <> ""
If f <> ThisWorkbook.Name Then
Set wb = Workbooks.Open(lj & f, 0)
With wb.Worksheets("正式人员")
r = .Cells(Rows.Count, 2).End(xlUp).Row
yy = .Cells.Find("*", searchdirection:=xlPrevious).Column
ar = .Range("a1").Resize(r, yy)
End With
mc = Split(wb.Name, ".")(0)
wb.Close False
For j = 2 To yy
If ar(3, j) = "" Then ar(3, j) = ar(3, j - 1)
If ar(3, j) <> "" Then
If ar(4, j) <> "" Then
bt = ar(3, j) & ":" & ar(4, j)
Else
bt = ar(3, j)
End If
lh = d(bt)
If lh = "" Then
y = y + 1
d(bt) = y
lh = y
br(1, y) = bt
End If
End If
Next j
For i = 5 To UBound(ar)
If ar(i, 2) <> "" Then
n = n + 1
br(n, 1) = mc
br(n, 2) = n - 1
For j = 2 To yy
If ar(3, j) <> "" Then
If ar(4, j) <> "" Then
bt = ar(3, j) & ":" & ar(4, j)
Else
bt = ar(3, j)
End If
lh = d(bt)
br(n, lh) = ar(i, j)
End If
Next j
End If
Next i
End If
f = Dir
Loop
If n = 1 Or y = 1 Then MsgBox "没有需要合并的数据!": End
With Sheets("正式人员")
.[a1].CurrentRegion.Borders.LineStyle = 0
.[a1].CurrentRegion = Empty
.[a1].Resize(n, y) = br
.[a1].Resize(n, y).Borders.LineStyle = 1
End With
Application.ScreenUpdating = True
MsgBox "ok!"
End Sub
|
|