Excel VBA 循环列并复制数据

Excel VBA Loop column and copy data

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

点击 sheet1 按钮。

代码需要做如下操作,在sheet "Global"中使用B列和搜索范围,每一行都会有不同的值,需要通过以下方式搜索单元格值行row, in Sheet "Details" 如果找到匹配项,则复制 H、F 和 E 列中的数据并粘贴到全局 sheet 中的 O、P 和 Q 列中。 H = O,E = P,D = Q。循环直到第一个空行。

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

例如:

全局之前:

之前的详细信息:

代码后有运行:

全球之后:

之后的详细信息:

希望这解释得足够好,如您所见,它已找到匹配的数据并将其复制到相关行,所有不匹配的数据已被删除。

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

试试这个。请注意,如果找到行中的值,您将需要一个空列,该列将临时保留一个标记 — 在我的示例中,我使用了 "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