【问题标题】:Compare column A in 2 sheets if a match fill column B-E with data from master sheet如果匹配填充 B-E 列与主表中的数据,则比较 2 张表中的 A 列
【发布时间】:2014-05-07 18:46:06
【问题描述】:

我有一个宏,可以运行并比较“每日”工作表和“主”工作表中的“A”列(但仅限于第一个连字符)。 然后它将任何匹配项剪切并粘贴到 sheet3,然后在用户表单中显示任何不匹配项。 我想要的是找到的任何匹配项,我希望将“主表”中 B-E 列中的数据粘贴到“sheet3”上的 B-E 列中。同时保留每日表格中的 columa 'A' 匹配详细信息。

Sub unknownservers()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim rngTocut As Range, x As Range
Dim iListCount As Long, iCtr As Long
Dim firstHyp1 As Integer, firstHyp2 As Integer

Application.ScreenUpdating = False

Set ws1 = Sheets("Sheet1") 'master list
Set ws2 = Sheets("Sheet2") ' daily 
Worksheets("sheet2").Activate
  iListCount = ws2.Cells(ws2.Rows.count, "A").End(xlUp).Row
' Loop through the "master" list.
For Each x In ws1.Range("A1:A" & ws1.Cells(Rows.count, "A").End(xlUp).Row)
    For iCtr = 1 To iListCount
        firstHyp1 = InStr(1, x.Value, ".")
        firstHyp2 = InStr(1, ws2.Cells(iCtr, 1).Value, ".")
        firstHyp1 = IIf(firstHyp1 = 0, Len(x.Value), firstHyp1 - 1)
        firstHyp2 = IIf(firstHyp2 = 0, Len(ws2.Cells(iCtr, 1).Value), firstHyp2 - 1)

        If UCase(Left(ws2.Cells(iCtr, 1).Value, firstHyp2)) = UCase(Left(x.Value,      firstHyp1)) Then
            If rngTocut Is Nothing Then
                Set rngTocut = ws2.Cells(iCtr, 1)
            Else
                Set rngTocut = Union(rngTocut, ws2.Cells(iCtr, 1))
            End If
        End If
    Next iCtr
Next

If Not rngTocut Is Nothing Then rngTocut.EntireRow.Cut Worksheets("sheet3").Range("A"  & Rows.count).End(xlUp).Offset(1)
Application.ScreenUpdating = True

If Application.WorksheetFunction.CountA(Range("A:A")) = 0 Then Exit Sub

For Each r In Intersect(Range("A:A"), ActiveSheet.UsedRange)
    If r.Value > "" Then
        msg = msg & vbCrLf & r.Value
    End If
Next r
' create listbox with send email option
frmunknownservers.Textunknownservers.Text = msg
frmunknownservers.Show
End Sub

【问题讨论】:

  • Cut 真的有效吗?我认为这不适用于多项选择...如果您在构建 rngToCopy 时构建 rngToCut ,那么您也可以在循环之后处理它。您需要为每个匹配行添加的范围是 ws2.Cells(iCtr, 1).Offset(0, 1).Resize(1,4)
  • 是范围来剪切作品

标签: excel vba


【解决方案1】:

vLookup 就是针对这种情况而设计的。您可以修改查找字符串以匹配两个工作表(直到第一个连字符),然后公式将填写您想要的任何列值。然后,您可以遍历其中一列并将所有不适用的列放在一个列表框中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多