Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 单元格中的InStr搜索和逗号_Excel_Vba - Fatal编程技术网

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