如何从多个excel工作表中读取数据并基于列A合并数据

如何从多个excel工作表中读取数据并基于列A合并数据,excel,excel-2010,vba,Excel,Excel 2010,Vba,我与一些客户有n个excel文件,以及在安装、故障排除、交付等不同阶段花费的小时数 客户端、安装、故障排除、交付 78902110.5 与此类似,我在其他excel文件中也有客户机,但在其他文件中可能会有一些重复的客户机。现在我需要在一张表格中整理所有数据,但我不需要重复客户,而是在适当的列中总结所有的总小时数 我尝试了以下代码来帮助cloumn A获得唯一的客户端,但没有成功: Sub Combine_Workbooks_Select_Files() Dim MyPath As St

我与一些客户有n个excel文件,以及在安装、故障排除、交付等不同阶段花费的小时数

客户端、安装、故障排除、交付
78902110.5

与此类似,我在其他excel文件中也有客户机,但在其他文件中可能会有一些重复的客户机。现在我需要在一张表格中整理所有数据,但我不需要重复客户,而是在适当的列中总结所有的总小时数


我尝试了以下代码来帮助cloumn A获得唯一的客户端,但没有成功:

Sub Combine_Workbooks_Select_Files()

    Dim MyPath As String
    Dim SourceRcount As Long, Fnum As Long
    Dim mybook As Workbook, BaseWks As Worksheet
    Dim sourceRange As Range, destrange As Range
    Dim rnum As Long, CalcMode As Long
    Dim SaveDriveDir As String
    Dim FName As Variant

    With Application
        CalcMode = .Calculation
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
        .EnableEvents = False
    End With

    SaveDriveDir = CurDir
    ChDirNet "C:\"

    FName = Application.GetOpenFilename(filefilter:="Excel Files (*.xl*), *.xl*", _
                                        MultiSelect:=True)
    If IsArray(FName) Then
        Set BaseWks = Workbooks.Add(xlWBATWorksheet).Worksheets(1)
        rnum = 1
        For Fnum = LBound(FName) To UBound(FName)
            Set mybook = Nothing
            On Error Resume Next
            Set mybook = Workbooks.Open(FName(Fnum))
            On Error GoTo 0
            If Not mybook Is Nothing Then
                On Error Resume Next
                With mybook.Worksheets(1)
                    Set sourceRange = .Range("A1:A25")
                End With
                If Err.Number > 0 Then
                    Err.Clear
                    Set sourceRange = Nothing
                Else
        If sourceRange.Columns.Count >= BaseWks.Columns.Count Then
                        Set sourceRange = Nothing
                    End If
                End If
                On Error GoTo 0

                If Not sourceRange Is Nothing Then

                    SourceRcount = sourceRange.Rows.Count

                    If rnum + SourceRcount >= BaseWks.Rows.Count Then
                        MsgBox "Not enough rows in the sheet. "
                        BaseWks.Columns.AutoFit
                        mybook.Close savechanges:=False
                        GoTo ExitTheSub
                    Else
                        Set destrange = BaseWks.Range("A" & rnum)
                        With sourceRange
                            Set destrange = destrange. _
                                            Resize(.Rows.Count, .Columns.Count)
                        End With
                        destrange.Value = sourceRange.Value

                        rnum = rnum + SourceRcount
                    End If
                End If
                mybook.Close savechanges:=False
            End If
        Next Fnum
        BaseWks.Columns.AutoFit
    End If

ExitTheSub:

    With Application
        .ScreenUpdating = True
        .EnableEvents = True
        .Calculation = CalcMode
    End With
    ChDirNet SaveDriveDir

End Sub

将要重复数据消除的数据复制到已知范围内,然后可以使用
ActiveSheet.range(“$a$1:$a$22”)。RemoveDuplicates
要删除任何重复的数据

“我尝试使用以下代码为cloumn a获取唯一的客户端,但不起作用”->什么不起作用?您是否逐行检查了代码以查看哪些代码不起作用?请更具体一点,我们可以帮助你更容易。现在,我完成了我的上述问题陈述。我现在有一个场景,在我的工作表中,我可能有相同的客户,在同一阶段有特定的时间,例如7658在安装中花费了5个小时,另一个7658在excel中,他也只在安装阶段花费了3个小时。现在我需要计算安装时间,并从工作表中删除一个客户端条目。我无法思考这个问题,因为我有很多问题,我必须将客户与在同一阶段花费的时间进行匹配并总结。有关此的任何帮助或指导。将客户列表复制到新工作表(和状态,如果需要单独合计状态小时数)。使用
RemoveDuplicates
,然后您可以将totals单元格的公式更改为
SUMIF
SUMIFS
-将它们添加到一起以从不同的工作表中收集数据