检查列中的值是否与其他工作表中的范围匹配

问题描述 投票:0回答:2

首先,我是新来的,所以我希望我能说清楚。

所以我有两张纸:“Sheet1”和“Sheet2”。 Sheet2在范围内具有不同的值(D2:D6)。 sheet1范围(A2:A6)为空。每次我在sheet1范围(A2:A6)中插入数据时,都必须检查该数据是否与sheet2范围内的数据匹配(D2:D6)。如果数据在单元格中匹配,则它保持在范围(A2:A6)中,否则从范围中删除(A2:A6)。

这是我制作的代码。不幸的是,我无法上传Excel,所以你们可以更好地看到它。只有当我按下工作表中创建的底部时,代码才有效:

Sub check()


Dim i As Integer, j As Integer
Dim aRec As Worksheet, bRec As Worksheet, wb As Workbook


Dim aDesc As String, bDesc As String
Dim auxSheet1 As Variant
Dim auxSheet2 As Variant
Dim count As Integer


Set wb = Excel.ActiveWorkbook
Set aRec = wb.Worksheets(1)
Set bRec = wb.Worksheets(2)


For i = 2 To aRec.UsedRange.Rows.count
count = 1
auxSheet1 = Trim(aRec.Cells(i, 1).Value)
For j = 2 To bRec.UsedRange.Rows.count
auxSheet2 = Trim(bRec.Cells(j, 4).Value)

If Not auxSheet1 = auxSheet2 Then
count = count + 1
End If

If count = bRec.UsedRange.Rows.count Then
aRec.Cells(i, 1).Value = ""
End If
Next j
Next i


End Sub

我的问题是,只有当我按下我在Excel文件中创建的底部时,此代码才有效。相反,我希望我的代码更智能,避免按下底部。

我的意思是每次在sheet1范围(A2:A6)中输入一个条目时,代码应自动运行并删除与sheet2范围(d2:d6)不匹配的条目。我想删除底部并让代码每次在范围内插入数据时自动完成工作(A2:A6) - 保持匹配的数据,并删除不匹配的数据。

excel vba excel-vba
2个回答
0
投票

您可以创建工作表更改事件,然后您可以查看更改的单元格是否包含在您关注的范围内,然后处理范围。

看到这篇文章:https://support.microsoft.com/en-us/help/213612/how-to-run-a-macro-when-certain-cells-change-in-excel

或者,您可以创建一个占用范围的UDF,并传入A2:A6范围,然后每次更改单元格时,将调用UDF并调用您的函数。

Dim RefreshCount as Integer

Function DoRefresh(r As Range) As String
    change()
    DoRefresh = "Refresh " & RefreshCount
End Function

将公式放入单元格=DoRefresh(A2:A6)中。如果您愿意,可以将结果更改为不计算刷新次数。


0
投票

只需快速跟进。我让代码以某种方式工作。我唯一做的就是将Sub check()更改为Private Sub Worksheet_Change(ByVal Target As Range)。

问题是,当我在代码所在的列中插入数据时,我的Excel工作表加载速度非常慢。代码加载和检查条目需要很长时间。这是因为我的Excel表格中有很多vba代码吗?

注意:如果我只在新的Excel工作表中复制下面提到的代码,那么代码可以在一秒钟内快速完成。

© www.soinside.com 2019 - 2024. All rights reserved.