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
我需要一些关于我正在尝试编写的代码的帮助。我在 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