0

我有一个 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语法知之甚少!

谢谢!

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

4

1 回答 1

0

试试这个。

  1. 打开包含驱动程序数据的所有工作簿
  2. 现在打开一个新工作簿,粘贴此代码,然后点击运行

代码循环遍历所有工作簿,获取数据,并将其添加到活动工作簿中的相关列。

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
于 2013-06-07T21:39:37.860 回答