Excel 单元格中的InStr搜索和逗号
我有一系列包含文本的行,例如:Excel 单元格中的InStr搜索和逗号,excel,vba,Excel,Vba,我有一系列包含文本的行,例如: dog,cat,mouse bat,dog,fly fish,beaver,horse 我正在尝试搜索并突出显示包含特定单词的行: Public Sub MarkDuplicates() Dim iWarnColor As Integer Dim rng As Range Dim rngCell As Variant Dim LR As Long Dim vVal Dim tRow LR = Cells(Rows.Count, "B").End(xlUp).
dog,cat,mouse
bat,dog,fly
fish,beaver,horse
我正在尝试搜索并突出显示包含特定单词的行:
Public Sub MarkDuplicates()
Dim iWarnColor As Integer
Dim rng As Range
Dim rngCell As Variant
Dim LR As Long
Dim vVal
Dim tRow
LR = Cells(Rows.Count, "B").End(xlUp).Row
Set rng = Range("B1:B" & LR)
iWarnColor = xlThemeColorAccent2
For Each rngCell In rng.Cells
tRow = rngCell.Row
If InStr(rngCell.Value, "dog") = 1 Then
rngCell.Interior.ColorIndex = iWarnColor
Else
rngCell.Interior.Pattern = xlNone
End If
Next
端接头
只要单词“dog”是逗号字符串中的第一个单词,那么它就可以突出显示第一行,而不是第二行,因为单词“dog”出现在“bat”之后。我需要先去掉逗号,还是有更好的方法?看起来您的最终目标是根据“dog”是否在单元格中为行着色。这里有一种甚至不涉及VBA的不同方法(本例假设您的数据都在a列中):
=IF(NOT(ISERROR(FIND(“dog”,A1))),1,0)
。您可以稍后隐藏该列,以便用户看不到它。基本上,如果它的某处有单词“dog”,则返回1或0=$B2=1
额外积分:如果将此数据格式化为表对象,则在添加新行时,条件格式应自动转移到新行。关于我的上述注释 示例1(使用
.Find
和.Findnext
)
屏幕截图
示例2(使用自动过滤器)
为此,请确保单元格B1中有一个标题
Option Explicit
Public Sub MarkDuplicates()
Dim ws As Worksheet
Dim iWarnColor As Integer
Dim rng As Range, aCell As Range
Dim LR As Long
Set ws = ThisWorkbook.Sheets("Sheet1")
iWarnColor = xlThemeColorAccent2
With ws
'~~> Remove any filters
.AutoFilterMode = False
LR = .Range("B" & .Rows.Count).End(xlUp).Row
Set rng = .Range("B1:B" & LR)
With rng
.AutoFilter Field:=1, Criteria1:="=*dog*"
Set aCell = .Offset(1, 0).SpecialCells(xlCellTypeVisible)
End With
If Not aCell Is Nothing Then aCell.Interior.ColorIndex = iWarnColor
'~~> Remove any filters
.AutoFilterMode = False
End With
End Sub
您是否尝试过。查找?如果有大量的行,循环遍历列中的每一行将非常慢。当使用.Find
时,使用LookAt:=xlPart
您也可以使用自动筛选来实现您想要的功能。或者简单地使用这样的比较如果InStr(1,rngCell.Value,“dog”)0则
。。。另外,请检查InStr
函数的参数。@keeg:如果您有不使用VBA的选项,我强烈建议:@PowerUser's way!:)+我也建议使用非VBA方式:)顺便说一句,您不需要额外的列:)您可以在与数据相同的列中设置条件格式,并在其中设置公式:)
Option Explicit
Public Sub MarkDuplicates()
Dim ws As Worksheet
Dim iWarnColor As Integer
Dim rng As Range, aCell As Range
Dim LR As Long
Set ws = ThisWorkbook.Sheets("Sheet1")
iWarnColor = xlThemeColorAccent2
With ws
'~~> Remove any filters
.AutoFilterMode = False
LR = .Range("B" & .Rows.Count).End(xlUp).Row
Set rng = .Range("B1:B" & LR)
With rng
.AutoFilter Field:=1, Criteria1:="=*dog*"
Set aCell = .Offset(1, 0).SpecialCells(xlCellTypeVisible)
End With
If Not aCell Is Nothing Then aCell.Interior.ColorIndex = iWarnColor
'~~> Remove any filters
.AutoFilterMode = False
End With
End Sub