exl合并的问题,就是将多个exl表合并成一个exl表现在是有1个exl,分别给10个人做统计,然后他们会在后面添加上自己的数据(文字),10个人的编辑区域不会重合,然后得到10个exl,需要将这10个exl再

来源:学生作业帮助网 编辑:作业帮 时间:2024/07/17 06:18:21
exl合并的问题,就是将多个exl表合并成一个exl表现在是有1个exl,分别给10个人做统计,然后他们会在后面添加上自己的数据(文字),10个人的编辑区域不会重合,然后得到10个exl,需要将这10个exl再
xYoOI*\`b}sڴVMm.7nuvţ*H*j𬍶ԫ@MA@0e_+,3 \<<<3%n ƬOo׬ I\K<r{DLb(&N)$da;굂<%`σ UNm[ٯ  BP܀C᫼V!P'D\ɈbH\ bتTZ>z `kKE(9(B HNfrʥuGlV__V-)+A½/O1yonj!QuC%HZQD|pa]Nqձ9G|BAu<6,EOX <9AxGz!:xʐ2xNX|0--=Dq|S|uYΐ8Ī!`.%[c[`+*`#HE=z 3ӄ Э@pnB_,4!_/oߎ7v {Jl5[RA3ĕ| DpDzA{D$֕!<^ڊ1>IHssC(*17_$A(7ZOM$sx6 3"_ER9˫B+&JK,g;^% %mc,Iҏ! g9>-ʊX K<z8||nRqZCV8$ũ', +[a6ӍyM9GZ1@ͣ,>*osi(h"4QZ~^N ^FI^vv9[Ti9Z)VpJ{UQKXcXte@j6Ez2Л`ׇɦ0jaAMĉ*b qL6., C}̬҇~+ h*n:%ř U(m5XJJ*Z!}ERiF[Jf٪˜ktkj%9ƙW4ut\' *(hЧ7zB2ur@nzTttPqc~YMPIONX2jgP̙( Jrkrpdݫ = Gdvl.mu#6ʥ 8ړ+kӸ /VR*n]k*r8WQu]䨩Sݔ>e&!eFQh!zܺ"A3XbFU벐GaQyh)k#T 0u1+m}Y\ꕉ>-/GT<2j[nkҝ*r.OUww!z+=n[z=39* ;g0%v]Ə{Еezb",v"[ H$<y.r@zf`o6=~5=O78{'^[b⣔\ۺi/$7A.v{4˧ZWG^tV9/YV1-1%8%&N!IyHpM6vfؼ/{SC$mQ?ɨ!VMnUw[kLQлQ )S^8^jQ! Z?6%6V3UYufr*W-sU/ pHΧNظn NKнʇ

exl合并的问题,就是将多个exl表合并成一个exl表现在是有1个exl,分别给10个人做统计,然后他们会在后面添加上自己的数据(文字),10个人的编辑区域不会重合,然后得到10个exl,需要将这10个exl再
exl合并的问题,就是将多个exl表合并成一个exl表
现在是有1个exl,分别给10个人做统计,然后他们会在后面添加上自己的数据(文字),10个人的编辑区域不会重合,然后得到10个exl,需要将这10个exl再合成一个exl该怎么做?

exl合并的问题,就是将多个exl表合并成一个exl表现在是有1个exl,分别给10个人做统计,然后他们会在后面添加上自己的数据(文字),10个人的编辑区域不会重合,然后得到10个exl,需要将这10个exl再
Option Explicit
Sub 多簿合并()
Dim Wb As Workbook
Dim bName As Variant
Dim tempName As String, i As Integer, DataRow As Long, j As Long, k As Long, m As Integer
Dim MyMtrx() As String, MainListRow As Long
Dim ErrbName As String
bName = Array("城东公客", "登封", "港区", "巩义", "郊区", "金水公客", "上街", "网建", "未分区", "西区公客") '分表名称
Range("T2:IV" & Rows.Count).Clear '清除T以后全部列
MainListRow = ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Row - 1 '获取主表最后一行行号
Application.ScreenUpdating = False '关闭屏幕刷新
For i = 0 To UBound(bName)
    tempName = ThisWorkbook.Path & "\" & bName(i) & ".xls" '分表路径名称
    On Error GoTo CheckError '开启错误捕获
    Set Wb = GetObject(tempName) '获取分表
    On Error GoTo 0 '关闭错误捕获
    With Wb.Sheets(1)
        DataRow = .UsedRange.Rows.Count + .UsedRange.Row - 1 '获取分表最后一行行号
        k = 0 '初始化
        For j = 1 To DataRow
            If .Range("T" & j) <> "" Then '把分表中T列非空白的行的关键信息、备注信息保存到数组,E、F、I、T列是关键信息,T是备注信息
                k = k + 1
                ReDim Preserve MyMtrx(1 To 4, 1 To k)
                MyMtrx(1, k) = .Range("E" & j)
                MyMtrx(2, k) = .Range("F" & j)
                MyMtrx(3, k) = .Range("I" & j)
                MyMtrx(4, k) = .Range("T" & j)
            End If
        Next j
    End With
    Wb.Close False '关闭分表
    Set Wb = Nothing '清除分表变量
    For j = 2 To UBound(MyMtrx, 2) '通过循环输出备注信息,1为表头,从2开始
        For k = 2 To MainListRow
            If Range("E" & k).Text = MyMtrx(1, j) And Range("F" & k).Text = MyMtrx(2, j) And Range("I" & k).Text = MyMtrx(3, j) Then '关键信息全部吻合
                For m = Range("T1").Column To Range("IV1").Column '通过循环找空白位置
                    If Cells(k, m) = "" Then '找到空白位置
                        Cells(k, m) = MyMtrx(4, j) '输出
                        Exit For
                    End If
                Next m
                Exit For
            End If
        Next k
        If k > MainListRow Then
            MsgBox "分表-" & bName(i) & "-有以下信息无法在主表中匹配:" & vbCrLf & vbCrLf & MyMtrx(1, j) & vbCrLf & MyMtrx(2, j) & vbCrLf & MyMtrx(3, j)
            If MsgBox("是否结束本程序?", vbYesNo, "有异常") = vbYes Then
                Application.ScreenUpdating = True
                Exit Sub
            End If
        End If
    Next j
    Erase MyMtrx '清除数组
Pass:
Next i '处理下一个分表
If Len(ErrbName) > 0 Then
    MsgBox "没有找到以下工作簿:" & vbCrLf & ErrbName
End If
Application.ScreenUpdating = True
Exit Sub
CheckError:
ErrbName = ErrbName & vbCrLf & bName(i)  '记录错误工作簿名
Resume Pass
End Sub