【发布时间】: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) -
是范围来剪切作品