Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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 宏以在字符串表达式列表中查找特定单词_Excel_Vba - Fatal编程技术网

Excel 宏以在字符串表达式列表中查找特定单词

Excel 宏以在字符串表达式列表中查找特定单词,excel,vba,Excel,Vba,我试图做的是引用一列以在另一列中查找关键字。例如: 我需要搜索的是C列中的数千个单元格到A列中的数百个单元格。当从C中找到字符串时,我希望它高亮显示 在这种情况下,在宏运行后,将高亮显示的唯一单元格是“Bird Cat”和“the Snake”。到目前为止,我得到的信息如下: Sub Test() Columns("A:A").Select Selection.Find(What:="Bird", After:=ActiveCell,

我试图做的是引用一列以在另一列中查找关键字。例如:

我需要搜索的是C列中的数千个单元格到A列中的数百个单元格。当从C中找到字符串时,我希望它高亮显示

在这种情况下,在宏运行后,将高亮显示的唯一单元格是“Bird Cat”和“the Snake”。到目前为止,我得到的信息如下:

Sub Test()

Columns("A:A").Select
        Selection.Find(What:="Bird", After:=ActiveCell, LookIn:=x1Formulas2, _
        LookAt:=x1Part, SearchOrder:=x1ByRows, SearchDirection:=x1Next, _
        MatchCase:=False, SearchFormulas:=False).Activate
    Selection.Style = "Good"
    Cells.FindNext(After:=ActiveCell).Activate

    
End Sub
在某一点上,我确实有一个Do,直到代码中的IsEmpty(ActiveCell)…循环,但我认为这不起作用


我还不熟悉VBA编码,所以一般来说,任何输入都是受欢迎的。

此代码使用Find和FindNext查找单个单词并标记找到它的所有单元格

Sub MarkMatches(ByVal Crit As String)
    ' 085

    Dim Rng         As Range                ' range to search
    Dim Fnd         As Range                ' cell where match was found
    Dim FirstFnd    As Long                 ' row where a match was first found
    Dim Arr         As Variant              ' Rng.Value (for execution speed)
    
    With Worksheets("Sheet2")               ' change to suit
        ' search in column A, starting from row 1
        Set Rng = .Range(.Cells(1, "A"), _
                         .Cells(.Rows.Count, "A").End(xlUp))
    End With
    
    With Rng
        Arr = .Value
        .Interior.Pattern = xlNone          ' clear existing colouring
        Set Fnd = .Find(Crit, .Cells(.Cells.Count), _
                        xlValues, xlPart, MatchCase:=False)
        If Not Fnd Is Nothing Then
            FirstFnd = Fnd.Row
            Do
                ' "1" refers to column A here:-
                Arr(Fnd.Row, 1) = " " & Arr(Fnd.Row, 1) & " "
                ' exclude partial matches, like "catalog" matching "cat"
                If InStr(1, Arr(Fnd.Row, 1), " " & Crit & " ", vbTextCompare) Then
                    Fnd.Interior.Color = vbYellow       ' mark found match
                End If
                Set Fnd = .FindNext(Fnd)
                If Fnd Is Nothing Then Exit Do
            Loop While Fnd.Row > FirstFnd
        End If
    End With
End Sub
您可以使用下面给出的过程调用上述子过程

Sub Macro1()
    MarkMatches "bird"
End Sub
不指定单词,您可以指定单元格引用,如“MarkMatches(Cells(2,“a”).Value”。如果希望搜索单词列表,可以将此调用放入循环中,但首先需要解决如何区分标记的单词,因为它们符合一个或另一个条件


程序MarkMatches包含一行
Rng.Interior.Pattern=xlNone
,该行删除所有以前的突出显示。这行的操作可以移动到调用程序,但您当前的问题没有充分说明您打算实施更好的策略。

您有一堆
x1
前缀除了
xl
是否有理由不在没有VBA的情况下使用条件格式来实现这一点?()如果C中有“蛋糕”,a中有“煎饼”怎么办?如果C中有“蛋糕”,a中有“煎饼”怎么办?我不担心这一点。在实际的数据集中,a列将是“程序的[userID]设置项”列c将是[userID]。它将是一个字母,然后是一个由5个数字组成的字符串。我正在尝试搜索我可能拥有的任何票证与系统,以查看谁可能被配置。我只是将其放在上面,但n实际的数据集列a将是“程序的[userID]的配置项”,列c将是[userID]。这将是一个字母,然后是一个由5个数字组成的字符串。我所做的是从系统中提取所有用户ID。然后,我将所有ID放入Excel文档中,其中包含该系统的ServiceNow票证的票证号/摘要。我有大约10000张票证要在15个不同的系统中进行检查。我可以对数据进行排序,以进行筛选该系统并将所有活跃用户拉到该系统上,但除此之外,我无法自动调整目标帖子,是吗?:-)我不认为你的类比很糟糕。因此,我的代码很有用。您可以输入用户ID并突出显示所有关联的票号。也许你想扩展它来创建一个过滤列表,但这将是论坛上另一个问题的主题,以及如何进一步自动化流程的问题。你需要找到空间来描述这个过程,我们这里没有。