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

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

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技術解説」の記事

Colorプロパティの設定値一覧
VBAを定型文で覚えよう
VBAこれだけは覚えておきたい必須基本例文10
エクセルVBAでのシート指定方法
文字列結合&でコンパイルエラーになる理由
手動計算時の注意点と再計算方法
VBAの用語について:ステートメントとは
オブジェクト変数とは何か
VBAの少数以下の演算誤差について
スピルでVBAの何が変わったか
CharactersプロパティとCharactersオブジェクト


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

COUNTIF関数の結果は?(ツイッターお題)|エクセル雑感(5月30日)
エクセル&VBA オンライン講座|エクセル セミナー(5月29日)
アルファベットの26進(ツイッターお題)|エクセル雑感(5月19日)
VBAが消えてしまった!マクロが壊れて動かない!|エクセル雑感(5月8日)
時間に関する関数の扱い方(ツイッター投稿)|エクセル雑感(5月6日)
文字列のセルだけ結合(ツイッターのお題)|エクセル雑感(5月5日)
表示形式.言語設定|エクセル入門(5月1日)
GoogleスプレッドシートをExcelにインポートする|VBAサンプル集(4月28日)
ツイッターのお題「CSV編集」|エクセル雑感(4月25日)
プログレスバーを自作する|ユーザーフォーム入門(4月18日)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.とにかく書いてみよう(Sub,End Sub)|VBA入門
10.マクロはどこに書くの(VBEの起動)|VBA入門




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


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



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