私は退屈していて、教える気分になっているので、ここに長い「答え」があります。これは、将来これらのことを自分で理解する方法についても少し説明しています:)
セルに入力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 文字、次に上付き文字を適用した 3 文字、そして最後の 3 文字です。
他に変更を加えていないため、これのほとんどすべてがデフォルトのプロパティであるため、次のように修正できます。
Sub Macro2()
With ActiveCell.Characters(Start:=4, Length:=3).Font
.Superscript = False
End With
End Sub
これには 2 つの重要な部分があることがわかります。最初の部分は、どの文字をフォーマットするかを指定する方法です。これは、セルの を参照することによって行われ.Characters
ます。
ActiveCell.Characters(Start:=4, Length:=3).Font
したがって、このマクロは、文字列「abc123def」または「123」の 4 ~ 6 番目の文字を参照していることがわかります。
.Font.Superscript
次の明らかな部分は、プロパティ isを割り当てることですTrue
。
これを一般化して、どこにでも適用できるようにします。Start
上記のコードは、引数と引数が「ハードコード」されていLength
ます。動的にする必要があります。これを行う最も簡単な方法は、一度に 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