Excel VBA循环列和复制数据

时间:2015-06-03 13:10:14

标签: excel vba excel-vba excel-2010

我需要一些帮助,我试着写一些代码。我在VBA方面不是很有经验,我认为一个VLookup是我需要的,但在考虑之后。我认为Find循环工作更好。

在sheet1上会有一个按钮。

代码需要在表格" Global"中进行以下操作。使用列B和搜索范围,每行将有不同的值,它将需要逐行搜索单元格值,在Sheet" Details"如果找到匹配,则复制来自H,F和F列的数据。 E并粘贴到O,P和P列中。 Q在全球表中。 H = O,E = P,D = Q.循环直到第一个空行。

在详细信息表中,如果没有与详细信息匹配的数据,则在B列中,该行将被删除。

例如:

全球之前: enter image description here

详细信息之前: enter image description here

代码运行后:

全球后: enter image description here

详细信息之后: enter image description here

希望这足以解释它,因为你可以看到它找到了匹配的数据并将其复制到相关的行,所有非匹配的数据都被删除了。

我目前没有代码,因为如果我诚实,我不知道从哪里开始!非常感谢所有帮助!!

1 个答案:

答案 0 :(得分:1)

试试这个。请注意,如果找到行中的值,您将需要一个空列暂时保留标记 - 在我的示例中,我使用了“I”列,如果它不为空,则需要修改它。

Private Sub pasteValues()
Dim i, j, lastG, lastD As Long

' find last row
lastG = Sheets("Global").Cells(Rows.Count, "B").End(xlUp).Row
lastD = Sheets("Details").Cells(Rows.Count, "B").End(xlUp).Row

' loop over values in "Global"
For i = 1 To lastG
    lookupVal = Sheets("Global").Cells(i, "B") ' value to find

    ' loop over values in "details"
    For j = 1 To lastD
        currVal = Sheets("Details").Cells(j, "B")

        If lookupVal = currVal Then
            Sheets("Global").Cells(i, "O") = Sheets("Details").Cells(j, "H")
            Sheets("Global").Cells(i, "P") = Sheets("Details").Cells(j, "E")
            Sheets("Global").Cells(i, "Q") = Sheets("Details").Cells(j, "D")
            ' mark the row
            Sheets("Details").Cells(j, "I") = "marked"

        End If
    Next j
Next i

' loop over rows in "details" and delete rows which have not been marked
For j = 1 To lastD
    If Sheets("Details").Cells(j, "I") <> "marked" Then
        ' delete unmarked rows
        Sheets("Details").Cells(j, "A").EntireRow.Delete
        If Sheets("Details").Cells(j, "B") <> "" Then
            j = j - 1 ' revert iterator so it doesn't skip rows
        End If
    Else:
        ' remove the mark
        Sheets("Details").Cells(j, "I") = ""
    End If
Next j
End Sub