Excel 验证sheet2中的前缀在sheet1中是否具有匹配值

Excel 验证sheet2中的前缀在sheet1中是否具有匹配值,excel,vba,Excel,Vba,我有以下问题:在一个工作簿中,我有多张工作表 在第2行开始的“D”列第2页上,列出了300多个4位数的前缀,例如XFTZ、GHTU、ZAQS等 在第3行开始的“R”列第1页上,是1000+个值的列表,这些值可以具有以下值,例如:AAAA1234556和ZAQS12565865。 第一个值AAAA。。。。。。允许,其中第二个值ZAQS。。。。。运行VBA代码时应引发错误消息 两张表中的值列表都会随着时间的推移而增加,因此我希望避免硬编码记录。我希望这里的最佳解决方案是使用以下内容: LastRow

我有以下问题:在一个工作簿中,我有多张工作表

在第2行开始的“D”列第2页上,列出了300多个4位数的前缀,例如XFTZ、GHTU、ZAQS等

在第3行开始的“R”列第1页上,是1000+个值的列表,这些值可以具有以下值,例如:AAAA1234556和ZAQS12565865。 第一个值AAAA。。。。。。允许,其中第二个值ZAQS。。。。。运行VBA代码时应引发错误消息

两张表中的值列表都会随着时间的推移而增加,因此我希望避免硬编码记录。我希望这里的最佳解决方案是使用以下内容:

LastRowNr = Cells(Rows.Count, 1).End(xlUp).Row

尝试以下操作,用实际数据所在的名称替换
Sheet1

Option Explicit

Private Sub searchPrefix()
    Dim RangeInArray() As Variant
    Dim LastRow1 As Long
    Dim LastRow2 As Long
    Dim tmpSrch As String
    Dim i As Long

    LastRow1 = Worksheets("Sheet1").Cells(Rows.Count, 18).End(xlUp).Row
    LastRow2 = Worksheets("PREFIXES").Cells(Rows.Count, 4).End(xlUp).Row
    RangeInArray = Application.Transpose(Worksheets("PREFIXES").Range("D1:D" & LastRow2).Value)

    For i = 3 To LastRow1
        If Len(Worksheets("Sheet1").Cells(i, 18).Value) >= 3 Then
            tmpSrch = Left(Worksheets("Sheet1").Cells(i, 18).Value, 4) '18: column R
            If IsInArray(tmpSrch, RangeInArray) Then
                Worksheets("Sheet1").Cells(i, 18).Interior.ColorIndex = xlNone
                Worksheets("Sheet1").Cells(i, 18).Font.ColorIndex = 0
                Worksheets("Sheet1").Cells(i, 18).Font.Bold = False
            Else
                Worksheets("Sheet1").Cells(i, 18).Interior.Color = RGB(252, 134, 75)
                Worksheets("Sheet1").Cells(i, 18).Font.Color = RGB(181, 24, 7)
                Worksheets("Sheet1").Cells(i, 18).Font.Bold = True
            End If
        End If
    Next
End Sub

Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
    IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1)
End Function

本网站不是免费的编码服务。请出示您当前的代码。如果没有,我会1)获取sheet2的最后一行,2)将所需范围的sheet2(前缀)添加到数组中,3)在Sheet1的所有行中循环,检查每个单元格值是否剩余。这是我最后一次尝试在同一工作表中检测前缀。我没有可以在两张纸之间进行比较的工作代码。请在问题中包含您的代码,而不是作为答案!也就是说,您应该(例如)将
单元格(1+i,1).Value
替换为
工作表(“Sheet1”).Cells(1+i,1).Value
。通过这种方式,您可以明确说明工作表名称。谢谢您,您的代码起到了关键作用,我同意您的意见,希望将消息框更改为高亮显示所有错误的单元格。当使用数组时,这可能吗?请参阅编辑的答案。如果符合您的需要,请将其标记为已接受:)您好,我成功地使用了上述代码,只需要添加一个额外的要求,因为我对数组不太熟悉,所以我无法工作。函数IsInArray(StringToBeford作为字符串,arr作为变量)作为布尔IsInArray=(UBound(Filter(arr,StringToBeford))>-1)结束函数我需要添加一个测试,跳过“Sheet1”中字符串值小于4个字符的值
Option Explicit

Private Sub searchPrefix()
    Dim RangeInArray() As Variant
    Dim LastRow1 As Long
    Dim LastRow2 As Long
    Dim tmpSrch As String
    Dim i As Long

    LastRow1 = Worksheets("Sheet1").Cells(Rows.Count, 18).End(xlUp).Row
    LastRow2 = Worksheets("PREFIXES").Cells(Rows.Count, 4).End(xlUp).Row
    RangeInArray = Application.Transpose(Worksheets("PREFIXES").Range("D1:D" & LastRow2).Value)

    For i = 3 To LastRow1
        If Len(Worksheets("Sheet1").Cells(i, 18).Value) >= 3 Then
            tmpSrch = Left(Worksheets("Sheet1").Cells(i, 18).Value, 4) '18: column R
            If IsInArray(tmpSrch, RangeInArray) Then
                Worksheets("Sheet1").Cells(i, 18).Interior.ColorIndex = xlNone
                Worksheets("Sheet1").Cells(i, 18).Font.ColorIndex = 0
                Worksheets("Sheet1").Cells(i, 18).Font.Bold = False
            Else
                Worksheets("Sheet1").Cells(i, 18).Interior.Color = RGB(252, 134, 75)
                Worksheets("Sheet1").Cells(i, 18).Font.Color = RGB(181, 24, 7)
                Worksheets("Sheet1").Cells(i, 18).Font.Bold = True
            End If
        End If
    Next
End Sub

Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
    IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1)
End Function