使用公式在Excel单元格中设置文本的子集

我已经使用Excel中的公式build立了一个string。 举个例子

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

期望的文本将是:

语言:
英文,西class牙文,德文,法文

(其中粗体文本实际上是一些像红色的颜色)

有没有办法在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 

你的发表的function与工作当且仅当

  • 它是从一个Sub (也就是像其他人提到的那样,而不是一个UDF)

  • 包含在范围InText中的值是string常量。 (这是我答案的要点)

不适用于包含公式的InText范围内的任何单元格。 AFAIK你不能格式化公式返回的string的一部分

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

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

要“投射”公式的输出,以便可以应用文本格式,必须将公式返回的值写入电子表格,然后将格式应用于所写的值。 您可以将值写入包含公式的单元格中(这会擦除公式),也可以将值写入电子表格中的不同位置(这将保留公式,但是您将看到两倍)。

 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")将用string常量replace单元格$ A $ 1中的公式,并将前五个字符的颜色更改为红色。

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

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

你需要使用这个代码:

 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) 

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

在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