Excel拼接两列时,能否自动将其中一列设置为上标格式?
解决Excel拼接列并保留上标格式的问题
方法1:用工作表事件自动生成带格式的内容
普通文本函数(比如CONCAT、TEXTJOIN)只能输出纯文本,没法保留上标格式,所以用VBA工作表事件可以实现自动触发格式设置:
- 右键点击目标工作表的标签(比如Sheet1),选择「查看代码」
- 在VBA编辑器里粘贴这段代码:
Private Sub Worksheet_Change(ByVal Target As Range) Dim rng As Range, cell As Range Dim rowNum As Integer, bText As String, cText As String ' 只监控B列和C列的修改 Set rng = Intersect(Target, Me.Range("B:C")) If rng Is Nothing Then Exit Sub Application.EnableEvents = False ' 防止循环触发事件 For Each cell In rng rowNum = cell.Row bText = Me.Cells(rowNum, "B").Value cText = Me.Cells(rowNum, "C").Value If bText <> "" Or cText <> "" Then With Me.Cells(rowNum, "D") .Value = bText & cText ' 把B列内容设为上标 If bText <> "" Then .Characters(Start:=1, Length:=Len(bText)).Font.Superscript = True End If End With Else Me.Cells(rowNum, "D").ClearContents End If Next cell Application.EnableEvents = True End Sub
- 把文件保存为
*.xlsm格式(启用宏的工作簿) - 之后在B/C列输入或修改内容时,D列会自动生成拼接结果,且B列内容自动变成上标
方法2:自定义函数(适合不想用自动触发的场景)
如果需要手动控制格式生成,可以写个自定义函数:
- 按
Alt+F11打开VBA编辑器,插入新模块,粘贴代码:
Function SuperConcat(bVal As String, cVal As String) As String SuperConcat = bVal & cVal ' 给当前调用函数的单元格设置上标格式 On Error Resume Next With Application.Caller .Characters(Start:=1, Length:=Len(bVal)).Font.Superscript = True End With On Error GoTo 0 End Function
- 在D2单元格输入公式
=SuperConcat(B2,C2),下拉填充即可 - 注意:修改B/C列内容后,可能需要按
F9手动刷新格式
变通方案(无宏)
如果不能用宏,且B列内容长度固定(比如都是1个字符),可以用自定义格式:
- 选中D列,设置单元格自定义格式为
"^"@ - 输入公式
=B2&C2,此时B列内容会以上标显示,但仅适用于固定长度的上标内容,灵活性差
内容的提问来源于stack exchange,提问作者mjdp476
相关产品推荐
相关产品推荐

