在使用连接公式时,我希望能够在句子中使用一两个特定的单词。示例如下所示。
第一句话是使用连接公式。第二句是手动输入和格式化的。有没有办法在连接公式中使用这种格式而不必每次都手动执行?
请注意,这只是一个示例,我可能需要使用它在不同的句子中将三个连续单词的字符串加粗。如果提供了一般规则,我可以继续前进,这将是非常好的!
我对公式有点精通,但从未使用过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
如何进一步扩展最后一部分以使第四和第六个字符串变为粗体?
答案 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 将其应用到您要打印的文本中的每个字符之后。
请参阅下面的示例,将其应用于文本字符串中的任意单词。
=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())
从第五个单词的开始到结束进行计数,实现按每个字符拆分第五个单词。