我需要一些帮助,我试着写一些代码。我在VBA方面不是很有经验,我认为一个VLookup是我需要的,但在考虑之后。我认为Find循环工作更好。
在sheet1上会有一个按钮。
代码需要在表格" Global"中进行以下操作。使用列B和搜索范围,每行将有不同的值,它将需要逐行搜索单元格值,在Sheet" Details"如果找到匹配,则复制来自H,F和F列的数据。 E并粘贴到O,P和P列中。 Q在全球表中。 H = O,E = P,D = Q.循环直到第一个空行。
在详细信息表中,如果没有与详细信息匹配的数据,则在B列中,该行将被删除。
例如:
全球之前:
详细信息之前:
代码运行后:
全球后:
详细信息之后:
希望这足以解释它,因为你可以看到它找到了匹配的数据并将其复制到相关的行,所有非匹配的数据都被删除了。
我目前没有代码,因为如果我诚实,我不知道从哪里开始!非常感谢所有帮助!!
答案 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