【问题标题】:Format a subset of text in Excel Cell Using Formula使用公式格式化 Excel 单元格中的文本子集
【发布时间】:2013-02-14 06:58:28
【问题描述】:

我已经使用 Excel 中的公式构建了一个字符串。举个例子

单元格 C3 包含文本“语言”
单元格 C4 =“英语、西班牙语、德语、法语”
我的论坛 = C3 & ":" & CHAR(10) & C4

所需的文本是:

语言:
英语、西班牙语、德语、法语

(粗体文本实际上是某种颜色,例如红色)

有没有办法在 Excel 中执行此操作(更改部分文本格式)。

我已经尝试了一个公式...(不工作)

Function formatText(InText As Range)

'Set font color
  InText.Characters(1.5).Font.Color = Red
   'InText.Characters((InStr(1, ":", InText) + 1), (Len(InText) - InStr(1, ":", InText))).Font.ColorIndex = 3
End Function

【问题讨论】:

  • +1 有趣的问题/应用程序的不足

标签: excel string-formatting vba


【解决方案1】:

关于 Hightower 的问题,“如何将公式输出转换为字符串以便应用文本格式?”

要“转换”公式的输出以便应用文本格式,您必须将公式返回的值写入电子表格,然后将格式应用于您写入的值。您可以将值写入包含公式的单元格(这将删除公式),或者您可以将值写入电子表格中的不同位置(这将保留公式,但随后您将看到双倍)。

Sub Cell_Format(InText as Range)
  InText.formula = cstr(InText.value)  ' converts result of formula into a string literal   
    'or: InText.offset(0,1).formula = cstr(InText.value) -- writes the value in the cell next to InText
  InText.characters(1, 5).font.color = vbRed
End Sub

然后Cell_Format range("$A$1") 会将单元格$A$1 中的公式替换为字符串常量,并将前五个字符的颜色更改为红色。

如果要对大于一个单元格的范围执行此操作,请将此代码添加到上面:

Sub Range_Format(InText as Range)
  For each c in InText
    Cell_Format(c)
  Next
End Sub

【讨论】:

    【解决方案2】:

    您发布的功能与工作当且仅当

    • 它是从 Sub 调用的(即,正如其他人提到的,不是作为 UDF)

    • InText 范围内包含的值是字符串常量。 (这是我回答的重点)

    将不起作用范围 InText 中包含公式的任何单元格。 AFAIK 你不能格式化公式返回的字符串的 part

    顺便说一句,我很想被证明是错误的!

    【讨论】:

    • +1!很想证明你错了,但只有事先将公式更改为一个值,它才会起作用。否则,它会将颜色应用于所有单元格。 :-(
    • 是的.. 我明白你在说什么......那么,你将如何将公式输出转换为字符串以便应用文本格式?
    【解决方案3】:

    您不能在 Excel 界面中直接调用下面的 UDF。为此,您将使用事件,因为 UDF 无法更改单元的物理特性。有关更多详细信息,您可以阅读此链接。 http://support.microsoft.com/kb/170787

    Function formatText(InText As Range)
    
    'Set font color
      InText.Interior.Color = vbRed
       'InText.Characters((InStr(1, ":", InText) + 1), (Len(InText) - InStr(1, ":", InText))).Font.ColorIndex = 3
    End Function
    

    【讨论】:

      【解决方案4】:

      您需要使用此代码:

      InText.Characters(1,5).Font.Color = RGB(255, 0, 0)
      

      如果你想让它变得灵活,以便只有(完全)第二行是红色的,请使用以下代码:

      InText.Characters(Instr(InText, vbCr)+1, Len(InText)-Instr(InText, vbCr)).Font.Color = RGB(255, 0, 0)
      

      请注意,您的函数需要从 VBA 调用,即您不能将其用作用户定义的函数! UDF 只能返回结果,不能修改单元格!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-18
        • 1970-01-01
        • 2013-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多