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

ExcelマクロVBAの問題点と解決策、VBAの技術的解説
公開日:2020-03-31 最終更新日: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技術解説」の記事

オブジェクト変数とは何か

・そもそも変数とは何か ・変数の入れ物としての大きさは ・オブジェクト変数にオブジェクトは入っていない ・オブジェクト変数のメモリアドレス ・Is演算子によるオブジェクトの比較 ・TypeOf演算子 ・オブジェクト変数を使う時の注意点 ・オブジェクト変数の最後に
VBAの小数以下の演算誤差について
・小数以下の演算誤差とは ・小数以下の演算誤差を実際のVBAで確認 ・データ型で小数以下の演算誤差に対応 ・小数以下の演算誤差にデータ型以外で対応する ・VBAの小数以下の演算誤差の最後に
スピルでVBAの何が変わったか
・Rangeオブジェクトに追加されたプロパティ ・セルに数式を設定する場合 ・1次元配列を返すユーザー定義関数 ・2次元配列を返すユーザー定義関数 ・JAG配列を返すユーザー定義関数 ・スピルのVBAでの活用について
CharactersプロパティとCharactersオブジェクト
ユーザーに絶対に停止させたくない場合のVBA設定
ユーザー操作によりマクロVBAが実行中に停止させられてしまう場合があります。再実行可能であれば問題ありませんが、途中で強制停止された場合のデータ保証が出来ないと言った場合もあるでしよう。マクロ実行でも、以下のキーボード操作でVBAは停止できてしまいます。
印刷範囲の設定・印刷範囲のクリア
・印刷範囲の設定 ・印刷範囲の取得 ・印刷範囲のクリア
VBAの省略可能な記述について
・変数の宣言 ・変数宣言のデータ型 ・Application.ScreenUpdating = True : Application.DisplayAlerts = True ・Applicationのプロパティ ・Applicationのメソッド ・Range.Value ・プロシージャーのCall ・メソッドのCall ・Let ・Next 変数 ・Step 1 ・引数が無い場合の() ・名前付き引数 ・メソッドの規定値 ・組み込み列挙 ・関数のモジュール名 ・コレクションのItem ・VBAの省略可能な記述の最後に
VBAのVariant型について
・Variant型変数のデータ型を調べる ・Variant型変数のメモリアドレス ・Variant型どうしの算術演算 ・Variant型どうしの比較演算 ・RangeのValueプロパティの比較 ・ユーザー定義型(Type)とバリアント(Variant)変数 ・Variant型の配列 ・配列をVariant型の仮引数に渡す ・RangeオブジェクトをVariant型の仮引数に渡す
VBAのインデントについて
・VBAのインデントの模範 ・VBAのブロックについて ・VBAのインデントの具体例 ・インデントの最後に
VBAの演算子まとめ(演算子の優先順位)
・演算子の優先順位 ・算術演算子 ・比較演算子 ・論理演算子 ・連結演算子 ・単項演算子
列幅不足による###表示や指数表示を判定する
・Range.Textブロバティ ・列幅不足を判定するVBA ・セル幅不足を判定するVBAの使用例


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

エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.ひらがな⇔カタカナの変換|エクセル基本操作
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.繰り返し処理(For Next)|VBA入門
6.RangeとCellsの使い方|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.並べ替え(Sort)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




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


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


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