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

时间:2018-08-10 12:33:59

标签: excel-vba

我遇到以下问题:在一个工作簿中,我有多张纸。

在工作表2的“ D”列中,从第2行开始,是300多个4位数长的前缀的列表,例如XFTZ,GHTU,ZAQS等

在工作表1的“ R”列中,从第3行开始,是1000多个值的列表,这些值可以具有以下值,例如:AAAA1234556和ZAQS12565865。 允许第一个值AAAA ......,其中第二个值ZAQS .....在运行VBA代码时应该抛出错误消息。

两个工作表中的值列表会随着时间的推移而增长,因此我想避免对记录进行硬编码。我希望这里最好的解决方案是使用类似以下的内容:

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

谁可以提供帮助?

2 个答案:

答案 0 :(得分:0)

<Modal defaultOpen={this.props.isShowing} portalClassName="openmodal">
</Modal>

答案 1 :(得分:0)

尝试如下操作,将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