【发布时间】:2018-02-04 00:48:36
【问题描述】:
我的要求是,当用户在 sheet1 的 columnA 中输入数据时,它应该在 sheet2 的 columnA 中查找匹配项,如果找到,则应将所有相应的行拉到 sheet1。在某些情况下,对于 sheet1 的 columnA 中的条目有将是 sheet2 的 columnA 中的多个匹配项。在这些情况下,我希望所有重复的数据也被拉入 sheet1。这个必需的功能充满了我的以下代码。但我面临的挑战很少 1.例如当在sheet1的ColumnA中输入三个输入时,如果仅找到两个输入的匹配项,则应将它们拉到输入的相应行,将第三个输入留在最后一行。
enter image description here 2.另一个挑战是当发现重复项时,所有重复项在提取其他输入的数据之前应该彼此相邻。
enter image description here 3.当没有找到任何输入匹配时,应该显示匹配未找到消息框。 以下是在一定程度上有所帮助的代码。
Sub Getdata()
Dim Ws1 As Worksheet, Ws2 As Worksheet, Ws3 As Worksheet
Dim vDB, vCr, vR()
Dim i As Long, k As Long, N As Long, j As Integer
Dim r As Long, C As Integer
Dim lRow As Long, lCol As Long
Set Ws1 = Sheets("MARSDATA")
Set Ws2 = Sheets("MARS")
If WorksheetFunction.CountA(Range("A3:A50")) = 0 Then
MsgBox "Not Found"
Exit Sub
End If
With Ws1
r = .Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
C = .Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
vDB = .Range("A4", .Cells(r, C))
End With
With Ws2
r = .Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
C = .Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
vCr = .Range("a1", .Cells(r, C))
End With
'vDB = Ws1.Range("a1").CurrentRegion
'vCr = Ws2.Range("a1").CurrentRegion
C = UBound(vDB, 2)
For i = 4 To UBound(vCr, 1)
For k = 1 To UBound(vDB, 1)
If vCr(i, 1) = vDB(k, 1) Then
N = N + 1
ReDim Preserve vR(1 To C, 1 To N)
For j = 1 To C
vR(j, N) = vDB(k, j)
Next j
End If
Next k
Next i
With Ws2
lRow = .Range("A" & .Rows.Count).End(xlUp).Row
lCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
.Range(.Cells(lRow + 1, 1), .Cells(lRow + 1, lCol)).Resize(N, 26) = WorksheetFunction.Transpose(vR)
End With
结束子
【问题讨论】:
-
您是否在此处寻找过现有的解决方案?在 excel-vba 和超级用户上?
-
是的,但没有找到。上面的代码也得到了 YowE3K 的帮助。我已对我的要求进行了更改,但未能成功。
-
YowE3K 帮助解决了哪个问题?它在哪里?
-
我得到的只是页面未找到 - 它是否已关闭...