-1

私は VB スクリプトを初めて使用するので、以下のタスクを実行するために助けが必要です。私が必要としているのは、次の 3 つのことです。

  1. シート 1 の列 A の行ごとの値を、シート 2 の列 A の任意の行の値と一致させます。
  2. 一致する場合は、同じワークブックの新しいシートの列 A にその値をコピーする必要があります。
  3. これで、シート 2 の残りの列、つまり列 B などが追加され、以前に一致した列 A の値をコピーした新しいシートにコピーされます。

例:
Sheet1 データ:

employeeName ID 部門
モハン 1 IT

Sheet2 データ:

employeeName ID インタイム アウトタイム
ギャーン 2 12:00:00 PM 10:15:00 PM
モハン 1 09:02:00 午前 11:01:00 午後

シート 3 は次のようになります。

employeeName ID インタイム アウトタイム
モハン 1 09:02:00 午前 11:01:00 午後

これはすべて同じブック内にあり、VBA を使用して行う必要があります。

4

1 に答える 1

1

このコードをワークブックのモジュールに配置し、run() サブルーチンを実行します。これは、説明したように、シートのコード名が Sheet1、Sheet2、および Sheet3 であることを前提としています。

Sub run()

    Dim row As Integer, sheet2Row As Integer
    row = 2

    With Sheet1
        Do While (.Cells(row, 1) <> "")
            sheet2Row = findInSheet2(.Cells(row, 1))
            If sheet2Row <> 0 Then copyRow (sheet2Row)
            row = row + 1
        Loop
    End With

End Sub

Function findInSheet2(text As String) As Integer

    Dim found As Range

    With Sheet2
        Set found = .Columns(1).Find(What:=text, MatchCase:=True)
        If Not found Is Nothing Then
            findInSheet2 = found.row
        Else
            findInSheet2 = 0
        End If
    End With

End Function

Sub copyRow(row As Integer)

    Sheet2.Rows(row).Copy
    Sheet3.Rows(getSheet3LastRow).PasteSpecial

End Sub

Function getSheet3LastRow()

    Dim found As Range

    Set found = Sheet3.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
    If Not found Is Nothing Then
        getSheet3LastRow = found.row + 1
    Else
        getSheet3LastRow = 1
    End If

End Function
于 2012-09-13T21:00:14.567 に答える