连接公式中的粗体文本

时间:2018-04-18 08:49:39

标签: excel vba excel-vba excel-formula

在使用连接公式时,我希望能够在句子中使用一两个特定的单词。示例如下所示。

enter image description here

第一句话是使用连接公式。第二句是手动输入和格式化的。有没有办法在连接公式中使用这种格式而不必每次都手动执行?

请注意,这只是一个示例,我可能需要使用它在不同的句子中将三个连续单词的字符串加粗。如果提供了一般规则,我可以继续前进,这将是非常好的!

我对公式有点精通,但从未使用过VBA。但是我怀疑这个问题的解决方案可能只能使用VBA。请考虑是否需要VBA解决方案,因为我需要花费一些时间和精力来启动和理解。

感谢您的时间和帮助。

编辑:

Public Sub ExampleConcatenate()
    Dim str1 As String, str2 As String, str3 As String, str4 As String, str5 As String, str6 As String
    str1 = "First string "
    str2 = "Second string "
    str3 = "Third string"
    str4 = "Fourth string "
    str5 = "Fifth string "
    str6 = "Sixth string"


    Range("A1").Value = str1 & str2 & str3 & str4 & str5 & str6 'concatenate strings

    'format bold starts 1 character after str1 and is as long as str2
    Range("A1").Characters(Start:=Len(str1) + 1, Length:=Len(str2)).Font.Bold = True
End Sub

如何进一步扩展最后一部分以使第四和第六个字符串变为粗体?

2 个答案:

答案 0 :(得分:6)

如果该单元格包含公式,则无法格式化单元格文本中的单个字符 Excel不支持。

解决方法

唯一的解决方法是将该单元格文本写为常量文本(使用VBA)而不是公式(如果符合您的要求)。

然后您可以使用以下内容格式化单个字符:

Range("A1").Characters(Start:=1, Length:=10).Font.Bold = True

因此,要部分格式化字符串,您可以调整以下示例

Public Sub ExampleConcatenate()
    Dim str1 As String, str2 As String, str3 As String
    str1 = "First string "
    str2 = "Second string "
    str3 = "Third string"

    Range("A1").Value = str1 & str2 & str3 'concatenate strings

    'format bold starts 1 character after str1 and is as long as str2
    Range("A1").Characters(Start:=Len(str1) + 1, Length:=Len(str2)).Font.Bold = True
End Sub

对于更多子字符串,使用数组会更容易。

Public Sub ExampleConcatenate()

    Dim SubStrings As Variant
    SubStrings = Array("First string ", _
                       "Second string ", _
                       "Third string ", _
                       "Fourth string ", _
                       "Fifth string ", _
                       "Sixth string")

    Range("A1").Value = Join(SubStrings, "")

    'Note array counting starts with 0 not 1 so "First string" is SubStrings(0)

    'format bold starts 1 character after str1 and is as long as str2
    Range("A1").Characters(Start:=Len(SubStrings(0)) + 1, Length:=Len(SubStrings(1))).Font.Bold = True
    'format sub string 4
    Range("A1").Characters(Start:=Len(SubStrings(0)) + Len(SubStrings(1)) + Len(SubStrings(2)) + 1, Length:=Len(SubStrings(3))).Font.Bold = True
    'format sub string 6
    Range("A1").Characters(Start:=Len(SubStrings(0)) + Len(SubStrings(1)) + Len(SubStrings(2)) + Len(SubStrings(3)) + Len(SubStrings(4)) + 1, Length:=Len(SubStrings(5))).Font.Bold = True

End Sub

答案 1 :(得分:0)

虽然你不能在公式中使文本粗体,但你可以使文本u̲n̲d̲e̲r̲l̲i̲n̲e̲d̲。不需要VBA;这里的魔法是 unicode 特殊字符。

在每个要加下划线的字符后,插入 unicode combining low line 字符 U+0332。您可以从该站点复制粘贴它,或使用 this site 将其应用到您要打印的文本中的每个字符之后。

请参阅下面的示例,将其应用于文本字符串中的任意单词。

Underline in Excel formula

=LEFT(B2,B6)&TEXTJOIN("̲",TRUE,MID(B2,ROW(OFFSET(A1,B6,0,B7)),1))&MID(B2,B6+B7,LEN(B2))

LEFT(B2,B6) 开始返回到第五个单词。类似地,MID(B2,B6+B7,LEN(B2)) 返回第五个单词之后的所有内容。

真正的魔法发生在TEXTJOIN()。此函数在第三个参数中引用的每个元素之间重复第一个参数。请注意,在等式栏中呈现时,下划线与双引号字符组合在一起。第三个参数使用 MID() 返回第五个单词,但每个字母都有一个单独的引用,以便它与 TEXTJOIN() 的组合低行字符组合。通过将数组作为 MID() 的第二个参数传递使用 ROW(OFFSET()) 从第五个单词的开始到结束进行计数,实现按每个字符拆分第五个单词。