检查列中的值是否与其他工作表

时间:2017-12-20 22:57:58

标签: excel vba excel-vba

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

所以我有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) - 保持匹配的数据,并删除不匹配的数据。

2 个答案:

答案 0 :(得分: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)中。如果您愿意,可以将结果更改为不计算刷新次数。

答案 1 :(得分:0)

快速跟进。我让代码以某种方式工作。我唯一做的就是将子检查()更改为私有子工作表_Change(ByVal目标范围)

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

注意:如果我只在新的Excel表格中复制下面提到的代码,那么代码会在一秒钟内超速运行。