经过3个小时的搜索,我仍然没有找到答案,这就是我想要做的:
我试图用绿色填充其中包含 WBS 的任何行,用红色填充其中包含 ACT 的任何行和蓝色任何包含 EPR 的行。它适用于第一个公式,然后当我尝试添加第二个公式时,一切都搞砸了。
经过3个小时的搜索,我仍然没有找到答案,这就是我想要做的:
我试图用绿色填充其中包含 WBS 的任何行,用红色填充其中包含 ACT 的任何行和蓝色任何包含 EPR 的行。它适用于第一个公式,然后当我尝试添加第二个公式时,一切都搞砸了。
我尝试制作一个类似于 asim-ishaq 的函数来确定您的搜索词是否存在于该行中以获得乐趣 :) 然后尝试将其应用于突出显示行,结果我不知道如何很好地使用条件格式!最后想通了,希望我已经解释得足够好。
有了这个,您必须在数据末尾有(一个)额外的列来包含结果。
通过将函数放在条件格式中可能不需要额外的列,但是我无法让它工作(没有很努力地尝试)。这不是一个很大的损失,因为如果它在工作簿上编辑公式要简单得多,而不必通过每个条件规则来编辑它,如果您将来需要编辑它。
要使格式正常工作,您需要创建许多规则(每个关键字一个)
您想创建如下所示类型的规则,在公式框中您需要以下内容:包含下面函数结果的列=INDIRECT("D" & ROW())=0
在哪里,并且是您突出显示的关键字的索引。D
0
在我的示例中,D
列中的公式是:(=SearchRow(An:Cn,"ABS","KBS","JBS")
其中 n 是公式所在的行)
根据需要设置格式,然后按确定,当您返回规则管理器时,您需要更新Applies to
值,该值应该是一个涵盖您要突出显示的所有数据的范围。在我的例子中是$A$1:$C$3
我下面的函数需要 2+ 个参数,第一个是要搜索的范围。第二个(以及任何后续的)是搜索词。
该函数将返回一个数字。-1 表示没有匹配项,0+ 表示找到的搜索词。数量取决于参数中的位置。
A1 = "ABS"
B1 = "SBA"
A2 = "SBA"
B2 = "ABS"
A3 = ""
B3 = ""
C1 = "=SearchRow(A1:B1, "ABS", "SBA")"
C2 = "=SearchRow(A2:B2, "ABS", "SBA")"
C3 = "=SearchRow(A3:B3, "ABS", "SBA")"
C1 > 0
C2 > 1
C3 > -1
该函数将始终返回第一个结果,从左到右按顺序将每个单元格与关键字进行比较。使用我的示例,如果单元格包含“SBA ABS”,则结果将为 0(对于 ABS)。我猜你的单元格可能只包含一个关键字,所以这应该不是问题吗?
Public Function SearchRow(ByVal Row As Range, ParamArray Keyword() As Variant) As Integer
Dim Column As Integer
Dim Value As String
Dim Index As Integer
Dim Result As Integer
For Column = 1 To Row.Columns.Count
Value = LCase(Row.Cells(1, Column))
Result = -1
For Index = LBound(Keyword) To UBound(Keyword)
If InStr(1, Value, LCase(Keyword(Index))) > 0 Then
Result = Index
Exit For
End If
Next Index
If Result > -1 Then
Exit For
End If
Next Column
SearchRow = Result
End Function
我所理解的是,您需要连续搜索关键字,如果在该行的任何单元格中找到它,然后对其进行着色。
也许我们可以使用条件格式来做到这一点,但我有另一个想法。我们可以在 Excel VBA 中创建一个简单的搜索功能。像这样的东西:
=search_row(A1:F1,"EPR")
如果在指定行的任何单元格中找到 EPR,该函数将返回 1。现在,如果您在数据列的末尾创建两个不同的列,首先使用 WPS 命名,然后使用 EPR 命名,并将此函数写入其中。喜欢
G1 =search_row(A1:F1,"WPS")
H1 =search_row(A1:F1,"EPR")
拖动它结束。现在对列进行排序。首先是 WPS 从高到低。然后在一次选择中为所有具有 1 的行着色。同样对 EPR (H1) 列执行相同操作。
要使用此功能,您可以从以下 URL 下载宏文件:
http://asimishaq.com/myfiles/SearchHighlight.xlsm
现在运行它首先启用宏,然后重新打开你的数据文件,然后打开这个宏文件。只要打开这个宏文件就可以使用这个功能。如果您想自己创建宏,以下是 VBA 代码:
Function search_row(sRow As Range, Keyword As String)
Dim i As Integer
Dim Found As Integer
For i = 1 To sRow.Columns.Count
If InStr(1, LCase(sRow.Cells(1, i)), LCase(Keyword)) > 0 Then
search_row = 1
End If
Next
End Function