我有以下代码用于搜索大型Excel文档以获取数字列表,如果找到,则突出显示该单元格。这些数字存储在一个单独的Excel文档中,因此" For i =#to ##"和#34;使用Workbookx(" $$$$")。表格(" %%%%")",其中符号将被替换为依赖关于他们使用此宏的哪些文件:
Sub PNsToRemove()
Dim i As Integer
Dim findStr As String
Dim ws As Worksheet
Dim lColor As Long
lColor = RGB(211, 211, 211)
'Set i = # to ### to the first and last row numbers of the P/N list
For i = # To ###
'set $$$$$ to name of the excel sheet containing the pn's
'set %%%%% to the sheet name that the pn's are on
With Workbooks("$$$$$").Sheets("%%%%%")
'set @ to the column that contains the pn's
findStr = .Range("@" & i).Value
End With
For Each cell In Intersect(Sheets("&&&&").Range("A:Z"), Sheets("&&&&").UsedRange)
If InStr(cell.Value, findStr) > 0 Then
cell.Interior.Color = lColor
End If
Next
Next
End Sub
我有一种情况出现在前一天突出显示单元格之前,我需要检查与其相邻的单元格的值。它将位于同一行,但左侧为1到3列。有一个字符串列表,如果存在于相邻单元格中,则应使宏不突出显示包含该数字的单元格。我怀疑If InStr(cell.value, findStr) > 0 Then
条件中存在一些代码,但我不确定如何继续。
谢谢! 杰米
我能够使用它来为prefix1中的值工作,但是2到4不会工作(感谢你对cell.offset()Siddharth的评论!)。我错过了InStr功能吗?我读过的所有内容都表明它应该适用于数字搜索:
prefix1 = "DG"
prefix2 = "70"
prefix3 = "72"
prefix4 = "73"
For Each cell In Intersect(Sheets("CAT. NO.").Range("I:BO"), Sheets("CAT. NO.").UsedRange)
If InStr(cell.Value, findStr) > 0 Then
If InStr(cell.Offset(-1).Value, prefix1) = 0 Then
If InStr(cell.Offset(-1).Value, prefix2) = 0 Then
'debug1 = InStr(cell.Offset(-1).Value, prefix1)
'Range("U6604").Value = debug1
If InStr(cell.Offset(-1).Value, "72") = 0 Then
If InStr(cell.Offset(-1).Value, "73") = 0 Then
cell.Interior.Color = lColor
cell.Offset(ColumnOffset:=-1).Interior.Color = lColor
cell.Offset(ColumnOffset:=1).Interior.Color = lColor
cell.Offset(ColumnOffset:=2).Interior.Color = lColor
End If
End If
End If
End If
End If
我确实在If / And行中有所有If语句,但更容易使用分解。
谢谢!
答案 0 :(得分:0)
UNTESTED
不确定# to ##
是如何运作的 - 毫无疑问,这是动态添加这些数字的更好方法,但这不属于这个问题的范围,所以我'我会忽略。
尝试在特定情况下包装if
语句:
Sub PNsToRemove()
Dim i As Integer
Dim findStr As String
Dim ws As Worksheet
Dim lColor As Long
Dim chkStr1 As String, chkStr2 As String, chkStr3 As String
chkStr1 = "Check for this"
chkStr2 = "Or For This"
chkStr3 = "Or Even for This"
lColor = RGB(211, 211, 211)
'Set i = # to ### to the first and last row numbers of the P/N list
For i = # To ###
'set $$$$$ to name of the excel sheet containing the pn's
'set %%%%% to the sheet name that the pn's are on
With Workbooks("$$$$$").Sheets("%%%%%")
'set @ to the column that contains the pn's
findStr = .Range("@" & i).Value
End With
For Each cell In Intersect(Sheets("sheet1").Range("A:Z"), Sheets("sheet1").UsedRange)
Select Case (cell)
Case cell.Offset(0, 1) = chkStr1, chkStr2, chkStr3
GoTo MoveOn
Case cell.Offset(0, 2) = chkStr1, chkStr2, chkStr3
GoTo MoveOn
Case cell.Offset(0, 3) = chkStr1, chkStr2, chkStr3
GoTo MoveOn
Case Else
If InStr(cell.Value, findStr) > 0 Then
cell.Interior.Color = lColor
End If
End Select
MoveOn:
Next
Next
End Sub
我们声明并为您在顶部检查的字符串分配字符串变量。
我们检查左边的一个单元格与任何检查字符串匹配的情况 - 如果是这样的话我们退出选择案例并继续前进到下一个单元格而没有任何操作,否则我们将移动到下一个案例。 / p>
我们检查左边的两个单元格是否匹配任何检查字符串的情况 - 如果是这样的话我们退出选择案例并继续前进到下一个单元格而没有任何操作,否则我们将移动到下一个案例。 / p>
我们检查左边的三个单元格与任何一个检查字符串匹配的情况 - 如果是这样的话我们退出选择案例并继续前进到下一个没有操作的单元格,否则我们移动到其他情况。 / p>
只有当我们检查的单元格左边的1和3之间没有任何单元格与要检查的任何字符串匹配时,我们才运行if语句并应用格式(如果它的计算结果为真。