我想写一个VBA函数来突出显示excel单元格中的特定文本。这可能吗?我一直在谷歌搜索,但目前还不清楚。
为了说明问题,我想在一个特定的列中搜索一个文本值(实际上是一个值列表),并用黄色突出显示匹配的文本。
注意:这是我最后做的:
Sub Colors()
Dim searchString As String
Dim targetString As String
Dim startPos As Integer
searchString = "abc"
targetString = Cells(2, 1).Value
startPos = InStr(targetString, searchString)
If startPos > 0 Then
Cells(2, 1).Characters(startPos, Len(searchString)).Font.Color = vbRed
End If
End Sub
7条答案
按热度按时间rryofs0p1#
这是基本原则,我假设定制这个代码不是你所要求的(因为没有提供关于这方面的细节):
小描述,虽然它说明了自己:第一个“2”表示需要着色的第一个字符,第二个“2”表示长度。
au9on6nz2#
这只是为了将来的读者试图突出显示单元格内的特定字符串模式,
(这就是我对这个问题的解释)在本例中,您可以在F1中设置要搜索的字符串
wkyowqbh3#
这是专门针对@t.ztrk的答案,他在第1列中有城市,并在第2列中有用于搜索这些城市的文本。他在这里发布了他的问题:is it possible to find and change color of the text in excel
我从另一个解决方案中借用了这段代码(如果不是原始代码,请见谅):https://stackoverflow.com/a/11676031/8716187
我知道这可能不优雅,但我打了几分钟,以满足用户的需要。如果上面提供的解决方案(1)更灵活或(2)更有效,请提前表示歉意。也为我的C++嵌套循环习惯的养成表示歉意。
@t.ztrk你可以录制一个宏,然后停止它(删除那里的任何内容),或者插入一个按钮控件并将代码粘贴到那里。不确定你对VB的熟悉程度。只要确保在运行宏之前选择了工作表上你想处理的单元格(它应该在任何工作表上运行,并且可以在任何工作簿上工作)。
这是您的测试屏幕截图。x1c 0d1x
干杯-继续学习和应用。-WWC
6mw9ycah4#
在单元格中高亮显示文本的一个问题是,该字符串可能不止一次出现,因此代码应该检查是否还有其他字符串。
yfjy0ee75#
@Jack BeNimble谢谢你的代码,用它在10分钟内成功地高亮显示了一个单元格中的所有数字。我稍微重新组织了一下,首先搜索一行和一个单元格中的所有搜索词,并允许多列。我发现了一个错误,你的高亮文本不喜欢重复55,444,只高亮显示了一个序列中的奇数重复。修改了高亮功能中的一行
这是我修改过的代码。
子编号颜色()
末端子组件
函数HightString(偏移量为整数,搜索字符串为字符串,行数为整数,ingredCol为整数)为整数
结束功能
谢谢Jack Bennble和数据库
vc6uscn96#
功能性方法
为了扩展已经给出的答案,将其放入一个函数中会更有帮助,这样它对任何文本都更灵活。
在我的方法中,我还想控制要突出显示的文本示例,所以我提供了一个
instance
参数,它可以是:0
用于突出显示所有匹配项此外,我认为在应用新的字体颜色之前,为用户提供一个将字体重置为
xlAutomatic
的选项可能会有所帮助。上面的这个函数使用另一个helper函数来查找找到的文本的每个示例的所有起始索引。
zzwlnbp87#
您不需要VBA来执行此操作。您可以使用条件格式。
假设E列中有一组值。您要在单元格B1中输入一个值,并突出显示E列中与该值匹配的单元格。
突出显示E列中的单元格,并应用以下条件格式:
更改颜色以适应。这将对E列中的单元格应用相对条件格式。例如:选择E3并查看条件格式,它应如下所示:
你可以看到公式是如何自我调整的。
(**编辑:**如果要将B1中的值与E列中某个值的子字符串进行匹配,请改用以下条件格式公式:x1月1x)
现在在单元格B1中键入不同的值。如果键入的值与E列中的某个值匹配,则E列中的这些单元格将更改颜色。将单元格B1更改为E列中不存在的值,格式将消失。