Excel 2016 - 使用 VBA 合并单元格并格式化部分文本

Excel 2016 - 使用 VBA 合并单元格并格式化部分文本

我在 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

相关内容