【VBA】セルの文字列の一部だけ書式を変更する(位置指定、特定の文字列、数字だけ)

文字列の位置を指定して書式を設定する場合は、Charactersオブジェクトで対象の文字列に書式を設定します。

Charactersは、第一引数で文字列の開始位置、第二引数で対象の文字数を指定すると、引数で指定した範囲の文字列を操作できます。

Range(“セル番地”).Characters(開始位置,文字数)

位置を指定して書式を変更する

位置を指定して書式を設定する場合は、CharactersオブジェクトでFont.Colorプロパティなどに値を設定します。

コード

サンプルコードでは、2から5文字目(4文字分)のフォントやサイズを変更しています。

実行前

実行後

 

 

 

特定の文字列を指定して書式を変更する

特定の文字列を指定して書式を変更する場合は、次の2ステップになります。

  1. InStrでセルの文字列から、検索する文字列を探す
  2. 検索する文字列があったら、その文字列の長さ分だけ書式を変更する

 

InStr関数は、検索対象の文字列の中から、検索する文字列がある位置を返してくれます。

InStr(検索対象の文字列,検索する文字列)

 

つまりInStr関数は、検索する文字列が存在する時は1以上の値を返してくれます。

 

コード

実行前

実行後

解説

検索する文字列が変わる可能性がある場合は、次のコードのようにすると柔軟性が増します。

ポイントとしては、検索する文字列を定数化しているので、検索する文字列に変更がある場合は定数にセットする箇所だけ変更すればOKです。

また、検索する文字列の文字数が変わったとしても、Len関数で文字数を取得しているので、内部の処理はなにも変更する必要がありません。

 

数字だけ書式を変更する

文字列の中の数字だけの書式を変更したい場合は、1文字ずつ数字か調べて書式を設定します。

この1文字ずつ数値か調べる時に、Like演算子を使うと条件文が簡単に書けます。

コード

数値かどうかのチェックをLike “[0-9]”で行っています。

実行前

実行後

数値だけのセルでは文字色の一部を変更できません。
(実際にVBAでなく、エクセルでやってみてください。)

 

なので、VBAでもできないです。

 

まあ、セルの書式を文字列に変更すれば強引にできますが・・・

関連記事

VBAテクニック辞典
成果を出す5つのポイント
VBAテクニック辞典
えくとしょ | 初心者のためのエクセルとVBAの図書館
タイトルとURLをコピーしました