セルの文字の一部のフォントや文字を操作する方法
今回の目標
この記事では、セルの特定の文字範囲の操作をする方法を解説します。 例えば、セルA1の「12345」の「23」のフォントを変えたり、文字自体を削除します。
目標リスト
- セル内の特定位置の文字のフォントを設定する。
- セル内の特定位置の文字を削除する。
- セル内の特定位置に文字を挿入する。
Characters プロパティについて
Characters プロパティ
Charactersプロパティは、セル(Range)の中の特定の文字範囲を表す Charactersオブジェクトを返すプロパティです。
このオブジェクトを通じて、指定した部分文字列のフォントや色などを変更できます。
なお、Charactersプロパティ自体は値を直接返さないため、 .Characters(開始位置, 文字数).Text や .Font など、続くプロパティを指定して利用します。
開始位置は、1を基点としています。0を指定した場合でも多くの環境で 1として処理されますが、移植性を考慮して 1を明示的に指定することを推奨します。
Characters プロパティの構文
セルA1の1文字目から3文字を太字にするプログラムです。
Range("A1").Characters(1, 3).Font.Bold = True
セル内の一部の文字フォントを設定する
セル内の一部の文字フォントを設定するには、Charactersプロパティに続けて、Font プロパティを使用します。
Charactersの第1引数に「開始位置」、第2引数に「文字数」を指定します。
この指定範囲に対して、Font プロパティなどを使ってフォントの種類・色・サイズを変更できます。
サンプルコード
Sub CharactersSample2()
With Range("A1")
.Value = "ExcelVBA"
' .Characters(0, 2).Font.Bold = True でも同じ結果になる
.Characters(1, 2).Font.Bold = True
.Characters(4, 2).Font.Color = RGB(80, 200, 120)
.Characters(6, 3).Font.Italic = True
End With
End Sub
(下の画像のようになります)
※ 「Ex」が太字に、「el」が緑色に、「VBA」が斜体になります。
セル内の一部の文字を取得する
セル内の一部の文字を取得するには、Charactersプロパティに続けて、Text プロパティを使用します。
Charactersの第1引数に「開始位置」、第2引数に「文字数」を指定し、その後ろに Textプロパティを付けることで、指定範囲の文字列を取得できます。
なお、「Range("A1").Characters.Text」と書くと、セルA1の全文字列を取得します。
ただし、セルの内容が数値や日付などの文字列以外の場合、.Characters.Text ではエラーが発生します。その場合は、Mid関数 を使用して文字列を取り出しましょう。
サンプルコード
Sub CharactersSample1()
With Range("A1")
.Value = "ExcelVBA"
' 1文字目から、3文字を取得する
Debug.Print .Characters(1, 3).Text
End With
With Range("A2")
.Value = "ExcelVBA"
' 4文字目から、4文字を取得する
Debug.Print .Characters(4, 4).Text
End With
End Sub
Exc
elVB
セル内に文字を挿入する
セル内に文字を挿入するには、Charactersプロパティに続けて、Insert メソッドを使用します。
Charactersの第1引数には「挿入を開始する位置」、第2引数に「第1引数の位置から削除する文字数(0なら削除なし)」を指定します。
たとえば .Characters(6, 0).Insert "★" と書くと、6文字目の直後に★を挿入します。
サポートが終了したバージョンのExcelなど、環境によっては動作しない場合があります。
サンプルコード
Sub CharactersSample3()
With Range("A1")
.Value = "ExcelVBA"
.Characters(3, 0).Insert "★"
Debug.Print .Value
End With
With Range("A2")
.Value = "ExcelVBA"
.Characters(3, 2).Insert "★"
Debug.Print .Value
End With
End Sub
Ex★celVBA
Ex★lVBA
セル内の文字の一部を削除する
セル内の文字の一部を削除するには、Charactersプロパティに続けて、Delete メソッドを使用します。
Charactersの第1引数に「削除を開始する位置」、第2引数に「削除する文字数」を指定します。
たとえば .Characters(2, 3).Delete と書くと、2文字目から3文字分が削除されます。
サポートが終了したバージョンのExcelなど、環境によっては動作しない場合があります。
サンプルコード
Sub CharactersSample4()
With Range("A1")
.Value = "ExcelVBA"
.Characters(1, 2).Delete
Debug.Print .Value
End With
With Range("A2")
.Value = "ExcelVBA"
.Characters(2, 3).Delete
Debug.Print .Value
End With
End Sub
cel VBA
El VBA
セル内の文字数をカウントする
Charactersプロパティに続けて、Count プロパティを使用します。
引数の指定は不要です。
サンプルコード
Sub CharactersSample5()
With Range("A1")
.Value = "ExcelVBA"
Debug.Print "A1の文字列→" & .Value
Debug.Print "A1の文字数→" & .Characters.Count
End With
With Range("A2")
.Value = "地道に学ぶExcelVBA"
Debug.Print "A2の文字列→" & .Value
Debug.Print "A2の文字数→" & .Characters.Count
End With
End Sub
A1の文字列→ExcelVBA
A1の文字数→8
A2の文字列→地道に学ぶExcelVBA
A2の文字数→13
注意点
Charactersプロパティに引数を指定してしまうと(例:Characters(0, 2).Count)、文字の長さに関係なく、第一引数の数値を返します。
引数を指定しないよう、注意しましょう。
なお、文字列の途中から部分的に文字数を求めたい場合は、Mid関数 で抽出した文字列に Len関数 を組み合わせましょう。
例:Len(Mid(Range("A1"), 3, 5))
サンプルコード
Sub CharactersSample5_BAD()
With Range("A1")
.Value = "ExcelVBA"
Debug.Print "A1の文字列→" & .Value
'Characters(0, 2).Text は、"Ex" の 2文字
Debug.Print "Characters(0, 2).Count→" & _
.Characters(0, 2).Count
'Characters(3, 1).Text は、"c" の 1文字
Debug.Print "Characters(3, 1).Count→" & _
.Characters(3, 1).Count
'Characters(3, 4).Text は、"cel " の 4文字
Debug.Print "Characters(3, 4).Count→" & _
.Characters(3, 4).Count
End With
End Sub
A1の文字列→ExcelVBA
Characters(0, 2).Count→0
Characters(3, 1).Count→3
Characters(3, 4).Count→3
