我遇到以下问题:在一个工作簿中,我有多张纸。
在工作表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
谁可以提供帮助?
答案 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