VBA技術解説
CharactersプロパティとCharactersオブジェクト

ExcelマクロVBAの問題点と解決策、VBAの技術的解説
最終更新日:2020-09-09

CharactersプロパティとCharactersオブジェクト


セルの文字列やオートシェイプの文字列の一部のフォントを変更する場合、Charactersを使います。


Charactersプロパティは、Charactersオブジェクトを返します。
複数形の名称でもあり、コレクションのようにも見えてしまいますがコレクションではありません。

CharactersプロパティとCharactersオブジェクトについて少し詳しく見てみましょう。

Charactersプロパティ

テキスト内の文字の範囲を表すCharactersオブジェクトを返します。
Charactersオブジェクトを使用して、テキスト文字列内の文字の書式を設定できます。

オブジェクト.Characters (Start, Length)

名前 必須/オプション データ型 説明
Start 省略可能 Variant 返す先頭文字を指定します。
この引数に1を指定するか、省略すると、このプロパティは先頭文字から始まる文字列範囲を返します。
Length 省略可能 Variant 返す文字数を指定します。
この引数を省略すると、引数Startにより指定された文字より後にある、文字列の残りの部分を返します。

引数をすべて省略した場合は、文字列全体のCharactersオブジェクトを返します。

Charactersプロパティをメンバーに持つオブジェクト

Rangeオブジェクト
Range.Characters
Shapeオブジェクト
Shape.TextFrame.Characters
Shape.TextFrame2.TextRange.Characters
ShapeRangeオブジェクトも同様です。

Charactersオブジェクト

オブジェクトに含まれる文字列の文字を表します。
Charactersオブジェクトを使用すると、フルテキスト文字列に含まれる文字シーケンスを変更できます。

メソッド

Delete オブジェクトを削除します。
Insert 選択されている文字列の前に文字列を挿入します。

プロパティ

Application オブジェクトを作成した Application オブジェクトを返します。
Caption 指定された範囲の文字列を表す文字列型 (String) の値を返します。
Count 文字数を表す長整数型 (Long) の値を返します。
Creator このオブジェクトを作成したアプリケーションを示す、32 ビットの整数値を返します。
Font 指定したオブジェクトのフォントを表すFontオブジェクトを取得します。
Parent 親オブジェクトを返します。
PhoneticCharacters 指定したCharactersオブジェクトのルビ文字列を設定または返します。
値の取得および設定が可能です。
※Rangeオブジェクトのみ
Text 指定されたオブジェクトのテキストです。
値の取得および設定が可能です。

RangeオブジェクトでValue値が文字列以外(数値、日付等)の場合は、Textプロパティはエラーとなります。

VBA マクロ Charactersプロパティ Charactersオブジェクト

Charactersオブジェクトはコレクションではありません。
CharactersオブジェクトにはデフォルトプロパィもItemプロパティもありません。
したがって、For...Eachで文字列を処理することはできません。
文字列の一部を扱う為には、Charactersプロパティに引数を指定したCharactersオブジェクトを操作します。

CharactersプロパティとCharactersオブジェクトの使用例

文字列の一部のフォントを変更する

With Range("A1").Characters(3, 2).Font
  .Name = "MS Pコジック"
  .Size = 14
  .Color = RGB(255, 0, 255) 'vbMagenta
  .Bold = True
  .Italic = True
End With

VBA マクロ Charactersプロパティ Charactersオブジェクト

VBA マクロ Charactersプロパティ Charactersオブジェクト


以下では、文字位置が分かり易いように"12345"のようなサンプルとしています。
セルには、数値としてではなく文字列として数字が入っているものとして理解してください。

文字列の一部を同じ文字数で置換する

Range("A1").Characters(3, 1).Text = "A"

"12345" → "12A45"

文字列の一部を多い文字数で置換する

Range("A1").Characters(3, 1).Text = "AB"

"12345" → "12AB45"

文字列の一部を削除する

Range("A1").Characters(3, 1).Text = ""

Range("A1").Characters(3, 1).Delete

"12345" → "1245"
上記2例はどちらも3文字目が削除されます。

文字列の途中に文字を挿入する

Range("A1").Characters(3, 0).Text = "C"

Range("A1").Characters(3, 1).Insert ("C")

"12345" → "12C345"
上記2例はどちらも3文字目に"C"が挿入されます。

文字列の最後に文字を追加する

Range("A1").Characters(10, 1).Text = "E"

"12345" → "12345E"
第2引数の数値は、実際の文字列数より大きければいくつを指定していも構いません。
上記の場合は、6以上の数値であれば同じ結果になります。

Charactersオブジェクトをオブジェクト変数に代入

Dim cs As Characters
Set cs = Range("A1").Characters(4, 1)
cs.Text = "D"

"12345" → "123D5"
データ型は、
Characters
Object
Variant
いずれでも構いません。

Shapeオブジェクトの場合

Dim sp As Shape
Set sp = ActiveSheet.Shapes(1)
sp.TextFrame.Characters(2, 1).Text = "B"

Dim sp As Shape
Set sp = ActiveSheet.Shapes(1)
sp.TextFrame2.TextRange.Characters(2, 1) = "B"
※TextRange.CharactersはTextプロパティを省略できます。

"12345" → "1B345"
上記2例はどちらでも同じく、2文字目を"B"に置換します。

ShapeRangeオブジェクトの場合

Dim sp As Shape
Set sp = ActiveSheet.Shapes(1)
Dim sr As ShapeRange
Set sr = ActiveSheet.Shapes.Range(sp.Name)
sr.TextFrame.Characters(3, 1).Text = "C"

"12345" → "12C45"
このVBAの場合、ShapeRangeで処理することに意味はありません。
あくまで、ShapeRangeでもCharactersが使えることのサンプルです。
ただし、
ShapeRangeに複数のShapeが格納されている場合はCharactersプロパティはエラーとなります。



同じテーマ「マクロVBA技術解説」の記事

オブジェクト変数とは何か
VBAの小数以下の演算誤差について
スピルでVBAの何が変わったか
CharactersプロパティとCharactersオブジェクト
ユーザーに絶対に停止させたくない場合のVBA設定
印刷範囲の設定・印刷範囲のクリア
VBAの省略可能な記述について
VBAのVariant型について
VBAのインデントについて
VBAの演算子まとめ(演算子の優先順位)
列幅不足による###表示や指数表示を判定する


新着記事NEW ・・・新着記事一覧を見る

列全体を指定する時のRangeとColumnsの違い|ツイッター出題回答 (2023-09-24)
シートのActiveXチェックボックスの指定方法|ツイッター出題回答 (2023-09-24)
ByRef引数の型が一致しません。|ツイッター出題回答 (2023-09-22)
シートコピー後のアクティブシートは何か|ツイッター出題回答 (2023-09-19)
Excel関数の引数を省略した場合について|ツイッター出題回答 (2023-09-14)
セル個数を返すRange.CountLargeプロパティとは|VBA技術解説(2023-09-08)
記号を繰り返してグラフ作成(10単位で折り返す)|ツイッター出題回答 (2023-08-28)
シートを削除:不定数のシート名に対応|VBAサンプル集(2023-08-24)
ランクによりボイントを付ける(同順位はポイントを分割)|ツイッター出題回答 (2023-08-22)
OneDrive使用時のThisWorkbook.Pathの扱い方|VBA技術解説(2023-07-26)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.繰り返し処理(For Next)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.マクロとは?VBAとは?VBAでできること|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
10.条件分岐(IF)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ