我很无聊,处于教学状态,所以,这里有一个很长的“答案”,它也解释了一些关于你将来如何为自己解决这些问题的问题:)
我输入abc123def
了一个单元格,并使用宏记录器录制了一个宏。
如果您不知道正确的语法是什么,那么 您应该始终从这里开始。
无论如何,我选择了这个单元格的数字部分,然后右键单击,格式化单元格,将字体更改为上标。
这是宏记录器给我的。这是很多代码。幸运的是,它有很多垃圾。
Sub Macro2()
With ActiveCell.Characters(Start:=1, Length:=3).Font 'Applies to the first 3 characters
.Name = "Calibri"
.FontStyle = "Regular"
.Size = 11
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.ThemeFont = xlThemeFontMinor
End With
With ActiveCell.Characters(Start:=4, Length:=3).Font 'Applies to the middle 3 characters
.Name = "Calibri"
.FontStyle = "Regular"
.Size = 11
.Strikethrough = False
.Superscript = True
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.ThemeFont = xlThemeFontMinor
End With
With ActiveCell.Characters(Start:=7, Length:=3).Font 'Applies to the last 3 characters
.Name = "Calibri"
.FontStyle = "Regular"
.Size = 11
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.ThemeFont = xlThemeFontMinor
End With
End Sub
它代表的是三个格式块:第一个是没有更改的前 3 个字符,然后是我们应用上标的 3 个字符,然后是最后三个字符。
几乎所有这些都是默认属性,因为我没有进行其他更改,所以我可以将其修改为:
Sub Macro2()
With ActiveCell.Characters(Start:=4, Length:=3).Font
.Superscript = False
End With
End Sub
现在我们可以看到这有两个重要部分。第一部分是如何指定要格式化的字符。这是通过引用单元格的.Characters
:
ActiveCell.Characters(Start:=4, Length:=3).Font
所以我们可以看到这个宏引用了字符串“abc123def”或“123”中4-6位的字符。
接下来,显而易见的部分是分配.Font.Superscript
属性 is True
。
现在你想概括它,以便你可以在任何地方应用它。上面的代码是“硬编码”的Start
andLength
参数。我们需要让它动态化。最简单的方法是一次输入 1 个字符,并检查它是否为数字,如果是,则应用上标。
Sub ApplySuperscriptToNumbers()
Dim i As Long
Dim str As String
Dim rng As Range
Dim cl As Range
'## Generally should work on any contiguous "Selection" of cell(s)
Set rng = Range(Selection.Address)
'## Iterate over each cell in this selection
For Each cl In rng.Cells
str = cl.Value
'## Iterate over each character in the cell
For i = 1 To Len(str)
'## Check if this character is numeric
If IsNumeric(Mid(str, i, 1)) Then
'## Apply superscript to this 1 character
cl.Characters(Start:=i, Length:=1).Font.Superscript = True
End If
Next
Next
End Sub