Vba 如何使用Visual Basic从Excel中的多个文件中提取数据?

Vba 如何使用Visual Basic从Excel中的多个文件中提取数据?,vba,excel,Vba,Excel,我有一个Excel问题,希望它非常简单(逻辑方面),但我对Visual Basic的知识非常有限。我有几个文件夹,每个文件夹中大约有30个.xlsm文件(每个文件代表一天)。在每个文件的第13页和第14页中都有我需要的带有两条信息的时间表(第13页是白班,第14页是夜班)。A列有员工姓名,I列有车辆编号。我需要做的是提取使用车辆编号MT332的员工的姓名 例如,假设这是其中一个文件中的一张图纸: Row A: Row I: Doe, Jo

我有一个Excel问题,希望它非常简单(逻辑方面),但我对Visual Basic的知识非常有限。我有几个文件夹,每个文件夹中大约有30个.xlsm文件(每个文件代表一天)。在每个文件的第13页和第14页中都有我需要的带有两条信息的时间表(第13页是白班,第14页是夜班)。A列有员工姓名,I列有车辆编号。我需要做的是提取使用车辆编号MT332的员工的姓名

例如,假设这是其中一个文件中的一张图纸:

  Row A:                            Row I:
Doe, John                           MT426
Smith, Jim                          MT856
Richard, Greg                       MT332
Parson, Fred                        MT265
我需要从文件上的表格中提取“Richard,Greg”的名字,并将其放在单独的电子表格中。列表将如下所示:

       Drivers for MT332
    Days               Nights
Richard, Greg       Hamill, Susan
Lunz, Trent         Forter, Heath
    ...                  ...
其中,Days列来自第13页,Nights列来自每个文件的第14页

请尽力引导我;我对VB语法知之甚少

谢谢大家!

(注意:这些名字不是真的)

试试这个

  • 打开包含驱动程序数据的所有工作簿
  • 现在打开一个新工作簿,粘贴此代码,然后点击run
  • 代码循环遍历所有工作簿,获取数据,并将其添加到活动工作簿中的相关列中

    Sub GetMT332Drivers()
        Dim wbk As Workbook, cl As Range
    
        Range("A1") = "Drivers for MT332"
        Range("A2") = "Days"
        Range("B2") = "Nights"
    
        For Each wbk In Workbooks
            If wbk.Name <> ThisWorkbook.Name Then
                For Each cl In wbk.Worksheets("Sheet13").Range("I2:I" & wbk.Worksheets("Sheet13").Range("I1").End(xlDown).Row)
                    If cl = "MT332" Then
                        Worksheets("Sheet1").Range("A" & Worksheets("Sheet1").Range("A1048576").End(xlUp).Row + 1) = cl.Offset(0, -8)
                    End If
                Next cl
    
                For Each cl In wbk.Worksheets("Sheet14").Range("I2:I" & wbk.Worksheets("Sheet14").Range("I1").End(xlDown).Row)
                    If cl = "MT332" Then
                        Worksheets("Sheet1").Range("B" & Worksheets("Sheet1").Range("B1048576").End(xlUp).Row + 1) = cl.Offset(0, -8)
                    End If
                Next cl
            End If
        Next
    End Sub
    
    子GetMT332Drivers()
    将wbk作为工作簿,cl作为范围
    范围(“A1”)=“MT332的驱动程序”
    范围(“A2”)=“天”
    范围(“B2”)=“夜间”
    对于工作簿中的每个wbk
    如果wbk.Name ThisWorkbook.Name,则
    对于wbk.工作表(“Sheet13”)范围(“I2:I”和wbk.工作表(“Sheet13”)范围(“I1”)中的每个cl。结束(xlDown)。行)
    如果cl=“MT332”,则
    工作表(“Sheet1”).范围(“A”和工作表(“Sheet1”).范围(“A1048576”).结束(xlUp).行+1)=cl.偏移量(0,-8)
    如果结束
    下一个cl
    对于wbk.工作表(“Sheet14”)范围(“I2:I”和wbk.工作表(“Sheet14”)范围(“I1”)中的每个cl。结束(xlDown)。行)
    如果cl=“MT332”,则
    工作表(“表1”).范围(“B”和工作表(“表1”).范围(“B1048576”).结束(xlUp).行+1)=cl.偏移量(0,-8)
    如果结束
    下一个cl
    如果结束
    下一个
    端接头