对这个人的一些帮助会很棒。
在“表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
答案 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是一个很好的资源。
如果您在为自己的目的添加此功能时遇到问题,请务必回复问题描述以及显示您自己努力的任何示例。祝你好运!