【问题标题】:How to find and replace part of a cell with formatted text如何使用格式化文本查找和替换部分单元格
【发布时间】:2013-06-02 14:08:08
【问题描述】:

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

例如,如果单元格包含:

Pellentesque vel massa sat amet magna eleifend placerat。佩伦特斯克 格言,nibh vitae tincidunt placerat,elit libero tristique Tellus, vel imperdiet nulla tortor id 直径。 Mauris porta blandit 前庭。

我想找到“Pellentesque”并将其替换为 Pellentesque

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

【问题讨论】:

  • 我觉得没有vba是不行的
  • 我认为您将需要使用 VBA - 请参阅 HERE 以获取执行此操作的代码。
  • @Cheran 感谢您的格式化。该网站总是要求标题作为一个问题...您为什么要更改为声明?

标签: excel excel-2007 vba


【解决方案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(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 答案的一些代码。)

【讨论】:

  • 代码有一个小bug...查看下面的答案
【解决方案2】:

这对我来说非常有用:

  1. Excel中选中的单元格(我一次选择了1266个——不知道有没有限制)

  2. 点击复制

  3. 打开一个空白word文件,点击粘贴

  4. 使用 CNTL+H 进行查找和替换

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

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

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

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

【讨论】:

【解决方案3】:

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

像这样: • 样本 •

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

这样你可以让眼睛更容易 读取多行excel数据,

以后也很容易将其重新恢复为原始状态 只需再次反转查找和替换。

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


旧响应

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

  1. 将文本粘贴到 MS Word 中

  2. 然后在此处运行查找和替换 (CTRL+F)(在“更多>>”下的左下角按钮更改自定义格式,然后根据您的需要自定义“格式”)- 然后就可以了所有的变化都完美...

  3. 然后而不是在 Excel 中执行 PASTE SPECIAL(通过主页选项卡 --> 粘贴 --> 选择性粘贴 --> 粘贴为 HTML(以便保留格式)(这可以而且太内存了对于 1000 行以上的内容来说,密集且太慢)

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

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

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

问候 马尔科

【讨论】:

    【解决方案4】:

    @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

    【讨论】:

      【解决方案5】:

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

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-26
        • 1970-01-01
        • 2017-09-04
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 2020-09-20
        相关资源
        最近更新 更多