0

私は Excel の問題を抱えており、(論理的には) 非常に簡単であることを願っていますが、Visual Basic の知識は非常に限られています。それぞれ約 30 個の .xlsm ファイルを含むいくつかのフォルダーがあります (各ファイルは 1 日を表します)。各ファイルのシート 13 と 14 には、私が必要とする 2 つの情報を含むタイム シートがあります (シート 13 は昼勤、シート 14 は夜勤です)。列 A には従業員名、列 I には車両番号が表示されます。車両番号 MT332 を使用していた従業員の名前を抽出する必要があります。

たとえば、これがファイルの 1 つのシートの 1 つであるとします。

  Row A:                            Row I:
Doe, John                           MT426
Smith, Jim                          MT856
Richard, Greg                       MT332
Parson, Fred                        MT265

ファイルのシートから「リチャード、グレッグ」という名前を別のスプレッドシートのリストに抽出する必要があります。リストは次のようになります。

       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 に答える