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 ・・・新着記事一覧を見る

VBA100本ノック 18本目:名前定義の削除|VBA練習問題100(11月6日)
VBA100本ノック 17本目:重複削除(ユニーク化)|VBA練習問題100(11月6日)
VBA100本ノック 16本目:無駄な改行を削除|VBA練習問題100(11月5日)
VBA100本ノック 15本目:シートの並べ替え|VBA練習問題100(11月4日)
VBA100本ノック 14本目:社外秘シート削除|VBA練習問題100(11月3日)
VBA100本ノック 13本目:文字列の部分フォント|VBA練習問題100(11月1日)
VBA100本ノック 12本目:セル結合を解除|VBA練習問題100(10月31日)
VBA100本ノック 11本目:セル結合の警告|VBA練習問題100(10月30日)
VBA100本ノック 10本目:行の削除|VBA練習問題100(10月29日)
VBA100本ノック 9本目:フィルターコピー|VBA練習問題100(10月28日)


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

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




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


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



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