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の小数以下の演算誤差について
スピルでVBAの何が変わったか
CharactersプロパティとCharactersオブジェクト
ユーザーに絶対に停止させたくない場合のVBA設定
印刷範囲の設定・印刷範囲のクリア
VBAの省略可能な記述について
VBAのVariant型について
VBAのインデントについて


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

変数を考えることはロジックを考える事|エクセル雑感(2021-04-11)
RangeオブジェクトのFor EachとAreasについて|VBA技術解説(2021-04-08)
PropertyのSetはLetでも良い|VBA技術解説(2021-03-31)
エクセル麻雀ミニゲーム|VBAサンプル集(2021-03-09)
VBA100本ノック 100本目:WEBから100本ノックのリストを取得|VBA練習問題(2021-03-03)
VBA100本ノック 魔球編:2桁の最小公倍数|VBA練習問題(2021-02-02)
Select Caseでの短絡評価(ショートサーキット)の使い方|VBA技術解説(2021-01-03)
VBA100本ノック 迷宮編:巡回セル問題|VBA練習問題(2020-12-31)
VBA100本ノック 魔球編:閉領域の塗り潰し|VBA練習問題(2020-12-16)
VBA100本ノック 魔球編:組み合わせ問題|VBA練習問題(2020-12-02)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.Excelショートカットキー一覧|Excelリファレンス
3.RangeとCellsの使い方|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.ひらがな⇔カタカナの変換|エクセル基本操作
8.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
9.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
10.セルに文字を入れるとは(Range,Value)|VBA入門




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


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



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