我在 Excel 2016 中合并两个单元格
=E2&" - "&F2
现在,单元格 E2 中的文本为正常 - 单元格 F2 中的文本为大胆的
但是,合并单元格时,整个文本都是正常的。
如果您在单元格中写入内容,则可以选择将部分文本加粗。因此,一个单元格中可以有两种格式 - 但是合并时呢?
附加信息:
研究完这个问题后,我认为需要一些 VBA 脚本。如果您能帮忙编写一个脚本,该脚本读取第一部分的长度,然后将文本的最后一部分加粗,那么应该可以做到。但是完整的公式是:=IF(Plan!F2<>"";Plan!E2&" - "&Plan!F2;Plan!E2)
我目前拥有的 VBA 函数是:
Function boldIt(navn As String, ekstra As String)
Dim ln1 As Integer
Dim ln2 As Integer
ln1 = Len(navn)
ln2 = Len(navn) + Len(ekstra)
If (ln1 = ln2) Then
boldIt = navn
Else
boldIt = navn & " - " & ekstra
boldTxt ln1, ln2
End If
End Function
Public Sub boldTxt(startPos As Integer, charCount As Integer)
With ActiveCell.Characters(Start:=startPos, Length:=charCount).Font
.FontStyle = "Bold"
End With
End Sub
该函数获取我想要合并的两个文本单元格的内容,
文本合并正确,并调用子函数(使用 msgBox 测试),
但是,文本没有像我预期的那样加粗
答案1
我没有 Excel 2016 来测试,我所知道的是:
截至 Excel 2013:
在 Excel 中合并单元格时,您只会合并单元格的“空间”,而不会合并其他内容。
内容、格式、边框、填充... 只会保留第一个单元格的内容,而其他所有单元格的内容都会丢失。
这是设计使然。
在 Excel Online 中:
您只能合并最多一个单元格包含信息的范围,在这种情况下,格式也能正确传输。
答案2
我用 Sub 做到了 :-)
此 Sub 循环遍历列,获取两个单元格的字符串,组合字符串并将其添加到目标单元格,同时将第二个单元格的文本加粗
感谢 Máté Juhász 的指点!
Sub boldIt()
Dim pos_bold As Integer
Dim celltxt As String
For i = 2 To 200000
' first cell will always be populated - if not - exit
If (Range("Plan!E" & i).Value = "") Then Exit For
' if second cell is empty - take only first cell as normal txt
If (Range("Plan!F" & i).Value = "") Then
Range("Kalender!F" & i).Value = Range("Plan!E" & i).Value
Else
' calculate start of bold text
pos_bold = Len(Range("Plan!E" & i).Value) + 1
' create the string
celltxt = Range("Plan!E" & i).Value & " - " & Range("Plan!F" & i).Value
' add string to field and add bold to last part
With Worksheets("Kalender").Range("F" & i)
.Value = celltxt
.Characters(pos_bold).Font.Bold = True
End With
End If
Next i
End Sub