【问题标题】:Match column A of sheet1 data with column A of sheet2 and pull all corresponding rows to sheet1 including duplicates将 sheet1 数据的 A 列与 sheet2 的 A 列匹配,并将所有相应的行拉到 sheet1,包括重复项
【发布时间】: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 帮助解决了哪个问题?它在哪里?
  • 我得到的只是页面未找到 - 它是否已关闭...

标签: vba macos excel


【解决方案1】:

好吧,我更像是一个黑客而不是程序员,所以这是一个非常肮脏的解决方案,但这是我会做的。

  1. 搜索值并找出数据存在的位置(如果存在)。
  2. 如果是,请从该行获取数据。
  3. 将行号存储在变量中。
  4. 向下移动一个单元格并进行新的搜索。
  5. 如果找到其他值,请检查以确保行号不同。这将表明您已将数据循环回开始。

重复第 4 步和第 5 步,直到获得原始行号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多