4

在 Excel 2007 电子表格中,我想通过突出显示单元格中的部分文本来查找替换。使用 find-replace 会重新格式化整个单元格。

例如,如果单元格包含:

Pellentesque vel massa 坐在 amet magna eleifend placerat。Pellentesque dictum, nibh vitae tincidunt placerat, elit libero tristique tellus, vel imperdiet nulla tortor id diam。Mauris porta blandit 前庭。

我想找到 "Pellentesque" 并将其替换为Pellentesque

这可以在没有 VBE 或公式的情况下完成吗?

4

5 回答 5

8

也许这会适合(确保在运行之前选择不超过必要的单元格,否则这可能需要一段时间):

Sub FormatSelection()

Dim cl As Range
Dim SearchText As String
Dim StartPos As Integer
Dim EndPos As Integer
Dim TestPos As Integer
Dim TotalLen As Integer

On Error Resume Next
Application.DisplayAlerts = False
SearchText = Application.InputBox _
(Prompt:="Enter string.", Title:="Which string to format?", Type:=2)
On Error GoTo 0
Application.DisplayAlerts = True
If SearchText = "" Then
Exit Sub
Else
For Each cl In Selection
  TotalLen = Len(SearchText)
  StartPos = InStr(cl, SearchText)
  TestPos = 0
  Do While StartPos > TestPos
    With cl.Characters(StartPos, TotalLen).Font
      .FontStyle = "Bold"
      .ColorIndex = 3
    End With
    EndPos = StartPos + TotalLen
    TestPos = TestPos + EndPos
    StartPos = InStr(TestPos, cl, SearchText, vbTextCompare)
  Loop
Next cl
End If
End Sub

应该大胆并染上红色。如果重新运行宏,更改不会被覆盖。注释掉 .ColorIndex = 3 如果不改变颜色。

(基于@Skip Intro 对 SO15438731 问题的修正以及来自 SO10455366 答案的一些代码。)

于 2013-06-07T05:11:32.620 回答
4

这对我很有用:

  1. Excel中选定的单元格(我一次选择了1266个-不知道是否真的有任何限制)

  2. 点击复制

  3. 打开一个空白word文件并点击PASTE

  4. 使用 CNTL+H 获取 Find & Replace

  5. 输入要查找的字符和要替换的字符,添加所需的任何格式并选择全部替换(该过程不到 2 秒)

  6. 在 Word 文件中选中 Edit-Select-Select All,然后按住 shift 键并按下左箭头(我认为不这样做会在下一个操作中添加一行)

  7. 返回 Excel 并在备用区域中选择粘贴 - 保留源格式选项

这正是我想要的 Excel。从那里我可以将它移动到任何我想要的地方。

于 2015-07-01T20:52:38.823 回答
1

使用标准查找和替换 CTRL+F 命令执行此操作的绝对最简单的方法是“临时”添加“Calibri 字体”字符 • aka。“黑色子弹点”

像这样: • 样本 •

从插入选项卡 --> 符号 --> Calibri 字体 --> 并在最后)

因此,您可以更轻松地阅读多行 Excel 数据,

并且稍后也很容易将其再次删除回原来的位置,只需再次反转查找和替换即可。

希望这对某人有所帮助,它确实帮助我的眼睛更快地扫描。


旧回应

执行此操作的简单非编程方法是:

  1. 将文本粘贴到 MS Word

  2. 然后在那里运行查找和替换(CTRL + F)(在“更多>>”下的左下角按钮上进行自定义格式更改,然后根据您的需要自定义“格式”) - 然后将完美地完成所有更改.. .

  3. 然后而不是在 Excel 中执行 PASTE SPECIAL(通过主页选项卡 --> 粘贴 --> 选择性粘贴 --> 粘贴为 HTML (以便保留格式)(这可能而且太占用内存并且对任何事情都太慢以上像1000行)

最好将文档从 Word 中简单地“另存为”到 RTF 文件中,然后通过简单的“打开文件”将该文件重新导入 Excel。

Excel 有一个很好的“重复模式单元格结构”识别,但当然,这种解决方法可能无法完美地再现每次所需的单元格分裂,但它应该在大多数情况下保持单元格顺序。

这样做的简单方法就这么多,直到 Microsoft 停止限制“突出显示/加粗”单元格内找到的结果文本的选项,而不是总是加粗整个单元格。

问候马尔科

于 2013-10-13T13:51:33.367 回答
0

@pnuts 的代码有个小bug... 修复版本:

Sub FormatSelection()

Dim cl As Range
Dim SearchText As String
Dim StartPos As Integer
Dim EndPos As Integer
Dim TestPos As Integer
Dim TotalLen As Integer

On Error Resume Next
Application.DisplayAlerts = False
SearchText = Application.InputBox _
(Prompt:="Enter string.", Title:="Which string to format?", Type:=2)
On Error GoTo 0
Application.DisplayAlerts = True
If SearchText = "" Then
Exit Sub
Else
For Each cl In Selection
  TotalLen = Len(SearchText)
  StartPos = InStr(cl.Value2, SearchText)
  TestPos = 0
  Do While StartPos > TestPos
    With cl.Characters(StartPos, TotalLen).Font
      .FontStyle = "Bold"
      .ColorIndex = 3
    End With
    EndPos = StartPos + TotalLen
    TestPos = EndPos + 1
    StartPos = InStr(TestPos, cl.Value2, SearchText)
  Loop
Next cl
End If
End Sub

实际上问题在于这条线TestPos = EndPos + 1- 以前TestPos = TestPos + EndPos

于 2021-12-01T23:44:09.987 回答
-1

要使搜索项大小写不可知,您可以使用:

Sub FormatSelection()

Dim cl As Range
Dim SearchText As String
Dim StartPos As Integer
Dim EndPos As Integer
Dim TestPos As Integer
Dim TotalLen As Integer

On Error Resume Next
Application.DisplayAlerts = False
SearchText = Application.InputBox _
(Prompt:="Enter string.", Title:="Which string to format?", Type:=2)
On Error GoTo 0
Application.DisplayAlerts = True
If SearchText = "" Then
Exit Sub
Else
For Each cl In Selection
  TotalLen = Len(SearchText)
  StartPos = InStr(Ucase(cl), Ucase(SearchText))
  TestPos = 0
  Do While StartPos > TestPos
    With cl.Characters(StartPos, TotalLen).Font
      .FontStyle = "Bold"
      .ColorIndex = 3
    End With
    EndPos = StartPos + TotalLen
    TestPos = TestPos + EndPos
    StartPos = InStr(TestPos, cl, SearchText, vbTextCompare)
  Loop
Next cl
End If
End Sub
于 2015-08-24T05:44:27.113 回答