セルの文字列は1文字ずつ違う装飾が可能

セルに入力されている文字は、1文字ずつ違うフォントや色などの設定を行うことが出来ます。

ただし1文字ずつ設定できるかどうかには条件があり、セルの表示形式が文字列として認識できる場合に限ります。そのため、数値や会計や日付などの決まった形式の場合は1文字ずつ違う設定を行うことは出来ません。それらの場合はセルの入力値全てに対して同じ装飾をすることになります。

VBAで文字列の一部の文字の設定の取得や変更を行うには、Charactersプロパティを利用します。

Charactersプロパティを使った汎用的な関数を「VBAでセルの指定文字列の色や太さを変更する」で紹介しています。こちらで紹介しているような関数を使うと、以下のように複数ある指定文字列の色や太さを一括で設定することも可能です。

「処理を一定時間ごとに開始します。終了まで待たずに次の処理を開始します。」

処理を一定時間ごとに開始します。終了まで待たずに次の処理開始します。」

また、正規表現を利用する方法については「正規表現で一致するセルの文字に色を付ける」で紹介しています。例えば、「処理(.*?)。」で対象文字列を正規表現で指定すると「処理」で始まり「。」で終わる部分が対象になります。

「処理を一定時間ごとに開始します。終了まで待たずに次の処理を開始します。」

処理を一定時間ごとに開始します。終了まで待たずに次の処理を開始します。


Charactersプロパティ

戻り値のCharactersオブジェクトにはCharactersプロパティ(Start, Length)で取得した文字列の情報が返ります。

同じ名前でややこしいですが、CharactersオブジェクトとCharactersプロパティは別物です。

親オブジェクトにはセル範囲を示すRangeオブジェクトを指定します。対象となるセルは複数選択されていても構いません。

Startは対象となる文字の開始位置を指定します。文字列の一番左の文字を開始位置にする場合は1になります。省略した場合は1とみなされます。

LengthはStartの位置から取得する文字数を指定します。半角文字と全角文字に関わらず1文字は1としてカウントします。省略した場合は開始位置以降の文字を全て対象とします。

Charactersオブジェクトには文字列情報の取得や設定を行うプロパティと、文字列情報の操作を行うメソッドが用意されています。


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

Charactersプロパティ(Start, Length)で取得したCharactersオブジェクトには複数のプロパティがあります。

Charactersオブジェクトは単独では対象の文字に対して処理を行うことができません。そのため各種プロパティを利用して対象の文字に対して処理を行います。

これらの処理を行う、Countプロパティ、Fontプロパティ、Textプロパティ、PhoneticCharactersプロパティについて説明します。


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

先に書きますが、Countプロパティにはバグと思われる挙動があるため、文字数を取得する場合はCountプロパティではなくLen関数(Textプロパティ)として取得しましょう。詳細は後述しています。

一応Countプロパティについて説明します。

Countプロパティの戻り値はLong型の数値です。

多くのサイトではCountプロパティの返却値を「文字数」と書いてありますが、実際に動かしてみるとそうではないことが分かります。

Charactersプロパティには前述した通り、StartとLengthの引数がありますが、これらを設定した場合と省略した場合でCountプロパティの値が異なります。省略した場合は文字数を返し、設定した場合はStartと同じ値を返します。

以下は正しく文字数を取得できる場合とそうでない場合のコードです。

実行結果

個人的にはこれはバグだと考えています。正しく文字数を取得したい場合は、以下のようにLen関数を使ってTextプロパティの文字数を取得します。

Countプロパティのバグについては「CharactersオブジェクトのCountプロパティのバグ回避方法」に詳細を書いています。


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

Fontプロパティの戻り値はFontオブジェクトです。Charactersオブジェクトの対象文字に設定されているフォントの各設定値の取得や設定を行うことが出来ます。

Fontオブジェクトでは扱う内容が複数あります。詳細については以下をご参照ください。

簡単なサンプルは以下になります。

実行結果




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

Textプロパティの戻り値はString型の文字列になります。

Charactersオブジェクトで対象となる文字列の取得および設定を行います。

実行結果

このように、Textプロパティへの設定は元のCharactersオブジェクトの文字列の長さに関係なく設定されます。

上のサンプルではCharactersオブジェクトには2文字が入っていますが、Textプロパティで6文字設定しても問題なく処理されます。


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

PhoneticCharactersプロパティはふりがなを取得、設定するプロパティです。

Excelでのふりがなの設定は、ホームタブ→フォント→ふりがなの表示/非表示 で行うことが出来ます。

PhoneticCharactersプロパティの戻り値は文字列になります。

実行結果



Charactersオブジェクトのメソッド

CharactersオブジェクトのメソッドにはInsertメソッドとDeleteメソッドがあります。

Charactersオブジェクト.Insertメソッド

Insertという名前ですが、実際の処理は指定位置の文字列の置換(Replace)になります。

Insertメソッドは設定のみ行います。取得は出来ません。

StringにはCharactersオブジェクトで対象となっている文字列部分を書き換える文字列を指定します。

実行結果



Charactersオブジェクト.Deleteメソッド

指定部分の文字列を削除します。

Deleteメソッドは削除のみ行います。取得は出来ません。

実行結果