想知道是否有人可以给我一个指针,或者只是有人问我一个参考,但是我怎么能突出显示包含多列文本任意部分匹配的excel电子表格中的单元格呢?
例如,单元格A2具有文本“电离海盐”,单元格D5具有文本“盐”。由于匹配的单词“盐”,我想突出显示这些单元格。
我不想在公式中添加要搜索的单词,因为所有单元格和列将包含数百个不同的字符串,并且我正在寻找每个单元格匹配的单词。
谢谢
答案 0 :(得分:1)
未经测试,但应该可以工作:
Private Sub reset_highlighting()
ActiveSheet.Cells.Interior.Color = xlNone
End Sub
Private Sub highlight_d5()
' Call reset_highlighting < remove comment if you dont want to store prev results
Dim lr as Long
lr = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
Dim search_range as Range: Set search_range = Range(Cells(1,1), Cells(lr, 1))
Dim search_value = Range("D5").Value2
For each cell in search_range
If (InStr(Trim(LCase(cell.Value2)), Trim(LCase(search_value))) != 0) Then
cell.Interior.Color = vbYellow
End If
Next cell
End Sub
请注意,您应将
ActiveSheet
替换为Sheets("YourSheetName")
并且可能还想调整您的范围以符合条件 相应地
PS:发表您为将来解决问题所做的努力。在这里没有尝试的问题通常容易被否决,我只是在您是新手的情况下例外了((今天我心情很好)
答案 1 :(得分:1)
尽管您应该至少尝试开始编写某些东西,但是这一工作还是很有趣的,因此我在这里尝试:)
Sub Hightlight()
Dim MyArray() As String
Dim X As Long
Dim C As Range
ActiveSheet.UsedRange.Cells.Interior.Pattern = xlNone 'Clear the hightlighted cells
MyArray() = Split(ActiveCell.Value, " ") 'Get the activecell and split it in array
For X = LBound(MyArray) To UBound(MyArray) 'Loop through your array using .findnext
With ActiveSheet.UsedRange
Set C = .Find(MyArray(X), lookat:=xlPart)
If Not C Is Nothing Then
firstaddress = C.Address
Do
C.Interior.ColorIndex = 37 'color found matched cells
Set C = .FindNext(C)
If C Is Nothing Then
GoTo DoneFinding
End If
Loop While C.Address <> firstaddress
End If
DoneFinding:
End With
Next X
End Sub
此方法的最大优点是它不必经过数千个单元,因此应该相对较快。
我确信某些真正的专家可以更好地清理此代码:)
输入:
输出:
所以....在工作表中添加一个按钮,分配宏,选择一个单元格,然后单击按钮...