Excel VBA Match First&姓氏从表1到表2并删除表1上的所有匹配

时间:2014-11-19 12:00:28

标签: excel vba excel-vba string-matching delete-row

对这个人的一些帮助会很棒。

在“表3”中,我在“B”栏中有一个“姓氏”数据库。 “C”栏中的“名字”。 相同的名称列表也在E列和E列中的“表2”,“姓氏”中。 “F”栏中的“名字”

我需要通过点击按钮删除工作表2中的所有匹配项。我还需要能够更改匹配将停止的“工作表2”中的行数,例如,仅查看“工作表2”上的前600行。

我希望这个解释得足够简单。

这是我用来清除特定范围的代码,但它很可怕,我可能需要更改范围,这使得这种方法非常不切实际。

Sub ClearSelection()

    Sheets("ADULT Sign On Sheet").Select
    Range("E6:F36").Select
    Selection.ClearContents
    Range("E42:F72").Select
    Selection.ClearContents
    Range("E78:F108").Select
    Selection.ClearContents
    Range("E114:F144").Select
    Selection.ClearContents
    Range("E150:F180").Select
    Selection.ClearContents
    Range("E186:F216").Select
    Selection.ClearContents
    Range("E222:F252").Select
    Selection.ClearContents
    Range("E258:F288").Select
    Selection.ClearContents
    Range("E294:F324").Select
    Selection.ClearContents
    Range("E330:F360").Select
    Selection.ClearContents

End Sub

1 个答案:

答案 0 :(得分:0)

将网站意图的政治暂时放在一边,看看是否可以让你开始为自己申请一些VBA。

Sub ClearSelection_and_DeDupe()
    Dim r As Long, v As Variant, ws3 As Worksheet

    Application.ScreenUpdating = False
    Application.EnableEvents = False

    With Sheets("ADULT Sign On Sheet")
        For r = 6 To 330 Step 36
            .Cells(r, 5).Resize(31, 2).ClearContents
        Next r
    End With

    On Error GoTo fìn
    Set ws3 = Sheets("Sheet 3")
    With Sheets("Sheet 2")
        r = Application.Max(.Cells(Rows.Count, 5).End(xlUp).row, .Cells(Rows.Count, 6).End(xlUp).row)
        v = InputBox(prompt:="How many rows to look at?", Default:=r)
        For r = Application.Sum(v) To 2 Step -1
            If CBool(Application.CountIfs(ws3.Columns(2), .Cells(r, 5).Value, ws3.Columns(3), .Cells(r, 6).Value)) Then _
                .Rows(r).EntireRow.Delete
        Next r
    End With
fìn:
    Set ws3 = Nothing
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub

该代码将完全按照您的描述执行,并且通过查找区域的模式并循环遍历它,我已经收紧了早期的单元格清除例程。 TBH,循环代码可以很容易地写成:

Sheets("ADULT Sign On Sheet").Range("E6:F36,E42:F72,E78:F108,E114:F144,E150:F180,E186:F216,E222:F252,E258:F288,E294:F324,E330:F360").ClearContents

...但是'For ... Next`循环看起来更酷。

因此,看看你是否能够理解我提供的片段并将它们作为命令按钮合并。关于如何做到这一点的教学材料数量没有尽头,这个网站(以及其他网站)之前提到过的Q& A是一个很好的资源。

如果您在为自己的目的添加此功能时遇到问题,请务必回复问题描述以及显示您自己努力的任何示例。祝你好运!

相关问题