Charactersで文字列中の一部の文字を加工する

vbacharactereyecatcha

エクセルVBA Characterプロパティについて説明します。
文字列の中の文字毎に書式設定や加工をすることが出来ます。
見栄えのする書面の作成にも有用です。

こんにちは、じゅんぱ店長(@junpa33)です。

セルに入力された文字列の加工や設定は「Fontプロパティ」が本道です。

けれども、

「文字列の一部分の文字だけを加工・設定することは出来ますか?」

悩める君

じゅんぱ店長

「出来ません。」

Charactersプロパティを使えば可能になります。

文字列の一部を加工できるCharactersプロパティの書き方

vbacharacters012

Charactersプロパティの構文

記述方法

オブジェクト.Characters (Start, Length)

Start

  •  省略可能です。
  •  Variant型で指定します。
  •  返す先頭文字を指定します。 この引数に 1 を指定するか、省略すると、このプロパティは先頭文字から始まる文字列範囲を返します。

Length

  •  省略可能です。
  •  Variant
  •  返す文字数を指定します。 この引数を省略すると、引数 Start により指定された文字より後にある、文字列の残りの部分を返します。

このCharacters構文により取得された値(Caractersオブジェクト)に対して、利用できるメソッドとプロパティがあります。

Charactersオブジェクトのメソッドとプロパティの使い方

名称説明
メソッドDelete文字列中の一部の文字を削除する
Insert文字列中の一部の文字を置き換える。挿入する。
プロパティCaption文字列中の一部の文字を表示する。取り出す。
Count文字列の文字数を数える。
Text文字列中の一部の文字を置き換える。取り出す。
Font文字列中の一部の文字の書式設定をする。

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

Deleteメソッド

Charactersメソッドで取得したCharactersオブジェクトを削除します。

記述方法

オブジェクト.Characters (Start, Length).Delete

コード
Sub charactersの利用1()
  Range("B3").Value = "大阪府東大阪市"
  Range("B3").Characters(4, 1).Delete
End Sub

「東」が削除されました。

コード実行前
vbacharacters001

コード実行後vbacharacters002

Insertメソッド

Charactersメソッドで取得したCharactersオブジェクトの前に文字を挿入または置換えします。

記述方法

オブジェクト.Characters (Start, Length).Insert(“string”)

≪挿入する場合≫

Lengthを”0″にする

コード
Sub charactersの利用2()
  Range("B3").Value = "JR横浜駅"
  Range("B3").Characters(3, 0).Insert ("新")
End Sub

「横」の前に「新」が挿入されます。

コード実行前
vbacharacters003

コード実行後
vbacharacters004

≪置換える場合≫

Lengthを”1″(1以上)にする

コード
Sub charactersの利用3()
  Range("B3").Value = "JR横浜駅"
  Range("B3").Characters(3, 1).Insert ("新")
End Sub

「横」の代わりに「新」が置換えられます。

コード実行前
vbacharacters003

コード実行後
vbacharacters005

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

Captionプロパティ

Charactersメソッドで取得したCharactersオブジェクトの文字列を表す文字列型 (String) の値を返します。

記述方法

オブジェクト.Characters (Start, Length).Caption

コード
Sub charactersの利用4()
    Dim Word As String
        Range("B3").Value = "桃栗3年柿8年"
        Word = Range("B3").Characters(2, 1).Caption
        Range("B5").Value = Word
End Sub

取得した値「栗」を表示しました。

コード実行前
vbacharacters006

コード実行後
vbacharacters007

Countプロパティ

Charactersメソッドで取得したCharactersオブジェクトの文字数を長整数型 (Long) の値で返します。

記述方法

オブジェクト.Characters (Start, Length).Count

コード
Sub charactersの利用5()
    Dim Wordc As String
        Range("B3").Value = "桃栗3年柿8年"
        Wordc = Range("B3").Characters.Count
        Range("B5").Value = Wordc
End Sub

文字数を「7」と返しました。

コード実行前
vbacharacters006

コード実行後
vbacharacters008

Textプロパティ

Charactersメソッドで取得したCharactersオブジェクトの文字列の表示や設定加工します。

≪表示する場合≫

記述方法

オブジェクト.Characters (Start, Length).Text

コード
Sub charactersの利用6()
    Dim Wordt As String
        Range("B3").Value = "桃栗3年柿8年"
        Wordt = Range("B3").Characters(1, 4).Text
        Range("B5").Value = Wordt
End Sub

「桃栗3年」を表示しました。

コード実行前
vbacharacters006

コード実行後
vbacharacters009

≪設定変更する場合≫

記述方法

オブジェクト.Characters (Start, Length).Text = “string”

コード
Sub charactersの利用7()
        Range("B3").Value = "桃栗3年柿8年"
        Range("B3").Characters(1, 4).Text = "柿8年"
End Sub

「桃栗3年」が「柿8年」に変更されました。

コード実行前
vbacharacters006

コード実行後
vbacharacters010

Fontプロパティ

Charactersメソッドで取得したCharactersオブジェクトの文字列からFontオブジェクトを取得します。

記述方法

オブジェクト.Characters (Start, Length).Font

Fontプロパティで文字列の書式設定を行います。

Fontプロパティについては詳しくはこちらを参考にしてください。

vbafontsyseyecatcha Fontプロパティで文字装飾操作をする

コード
Sub charactersの利用8()
        Range("B3").Value = "桃栗3年柿8年"
        With Range("B3").Characters(1, 2).Font
            .Bold = True
            .ColorIndex = 46
        End With
End Sub

「桃栗」が太字でオレンジ色に変わりました。

コード実行前
vbacharacters006

コード実行後
vbacharacters011

Charactersプロパティで文字の加工と設定のまとめ

vbacharacters013

「Character」を使えば、セル入力された文字列に「個性」を持たせることが出来ます。

たくさん準備されているプロパティでいろんな個性を作り出すことが出来ます。

けれども実際に、資料や帳票を作成する場合での、見栄えの良い資料作りとか、あるいは

入力された文字データの一部を修正することがあった場合を考えてみます。

実は、実際の仕事作業では、エクセルシート上でカーソルを動かして”チョイチョイ”と作業するだけでしょう。

その場その場の校正・校閲的な作成資料の見直しでは、その方が速そうです。

ですので、

「Character」の使い方としては、定型的な設定(装飾)で汎用的に使えるマクロとして、

VBAコードを組み立てることが必要だと考えます。

例えば、

まとめ記事

ブログ記事によくある「タイトル」や「見出し」で、最初の1文字を大きくするVBAコードなど。

エクセルVBAを独学で学ぶための参考記事

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

エクセルVBAの独習には動画学習という方法もあります。 目と耳両方を使って学習することでさらに勉強効率を上げることもできると思います

改訂新版 てっとり早く確実にマスターできるExcel VBAの教科書
定番参考書の改定新版が、動画付きになりもっと分かり易くなった
vbastudy022a
vbastudy023a

電子書籍版「改訂新版 てっとり早く確実にマスターできるExcel VBAの教科書」をamazonで見てみる

(著者)大村あつし
(出版社)技術評論社
(税込価格)2,508円(本体2,280円+税)

30冊を超えるExcelのマクロやVBAの解説書を執筆してきた著者による考え抜かれた本書の内容と構成。
独創的な解説手法で必ずExcel VBAが理解できます!
初級からの参考書ですが、より実践的切り口での解説をしています。
QRコードから操作の流れを動画(無音です)で確認することもできるようになりました。
文章解説と動画との関係性は、主は文章での解説、サポートが動画になります。

vbabgcoloreyecatch セルの背景色を2クリックで他範囲にも展開できるマクロ vbasorteyecatch データの並び替え VBA新旧のSortを実データで実証 vbacellsprotecteyecatch 「セルの保護」の設定VBAを最速理解 vbacellspaint_gradteyecatch 「グラデーションの塗りつぶし」のセルを設定する cellspaintpatterneyecatch 「塗りつぶしの網掛け」VBAを最速理解 vbacellspaintbackeyecatch 「塗りつぶし」背景色をVBAで記述する vbacellsbordereyecatch 「罫線」のVBAを最速理解 vbacellsfonteyecatch 「フォント」の操作を最速理解する エクセルVBA vbacellsplacementeyecatch 「配置」を最速理解する エクセルVBA vbacellssyoshikieyecatch 「表示形式」をVBAコード的に最速理解する VBAcellareaeyecatch セルの範囲選択と設定は14のツールで対応する vbaendpropertyeyecatch Endプロパティで上下左右の最終セルを取得 vbaentirecolumneyecatch EntireColumnとColumnの使い方 vbaentireroweyecatch EntireRowとRowプロパティの違い vbacolumnseyecatch Columnsプロパティの列指定で参照する vbaunioneyecatch UnionとRangeの一括選択の働きを比較 vbaresizeeyecatch Resizeプロパティでセル範囲をサイズ変更 vbarangevscellseyecatch Range VS Cells !VBAで使えるのはどっち vbausedrangeeyecatch UsedRangeプロパティの使い方のコツ vbaborder1eyecatch Bordersの/位置/線種/太さ/色/と<外枠だけの罫線>の設置 vbarowseyecatch Rowsプロパティの働きと関連のメソッド vbadeleteeyecatch セルの編集 DeleteとClearの使い分け 削除とクリアの違い vbacurrentregioneyecatch CurrentRegionは連続データをまとめて掴む SpecialCellseyecatch SpecialCellsメソッドはセル検索し選択する vbacharactereyecatcha Charactersで文字列中の一部の文字を加工する vbafontsyseyecatcha Fontプロパティで文字装飾操作をする vbajyufukueyecatch エクセルVBA 同じ項目をまとめる(重複データの整理)コード作成 vbafindeyecatch001 Findメソッドでの検索の方法とコード組み立てのコツ vbalastcelleyecatch データ入力済セルの最終行番号を取得する vbaoffseteyecatch Offsetプロパティは指定範囲を移動させる

エクセルVBA最速理解で必要な知識を集めよう!

今回の記事はここまでです。   最後までご覧いただき有難うございました。

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。