はじめに

前回の続きで文字列関数を説明します。今回は、スペースの削除(LTrim、RTrim、Trim)、文字列の操作(Replace、Join、Split)、文字コード(Asc、Chr)、文字入力(InputBox)について説明したいと思います。

ゼロからはじめるVBA - 基本編
ゼロからはじめるVBA - VBA事始め編
ゼロからはじめるVBA - セル操作編
ゼロからはじめるVBA - 条件による分岐編
ゼロからはじめるVBA - 繰り返し処理編
ゼロからはじめるVBA - ユーザーフォーム編
ゼロからはじめるVBA - マクロの記録を使った例題編
ゼロからはじめるVBA - 数値関数編
ゼロからはじめるVBA- 文字列関数編(1)

スペースの削除

文字列の前後にスペースが入っているために、文字の検索でうまく見つけられなかったり、文字の長さが違ったり、ということは良くあることです。VBAには文字列の前後のスペースを削除してくれる関数があります。全角、半角どちらのスペースも削除してくれます。文字列の先頭のスペースを削除してくれるLTrim関数、文字列の末尾のスペースを削除してくれるRTrim関数、先頭と末尾のスペースを削除してくれるTrim関数があります。もちろん文字列の中にあるスペースは、「作成者が意図的に入れている」としてスペースの削除はおこないません。

LTrim関数

文字列の先頭のスペースを削除します。文字列変数sの先頭のスペースを削除する場合「LTrim(s)」と書きます。

RTrim関数

文字列の末尾のスペースを削除します。文字列変数sの末尾のスペースを削除する場合「RTrim(s)」と書きます。

Trim関数

LTrim関数とRTrim関数をまとめたものです。先頭と末尾のスペースを削除してくれます。文字列変数sの先頭と末尾のスペースを削除する場合「Trim(s)」と書きます。

例題

上記3個の関数をまとめて例題を書いてみましょう(以下本稿で解説するリストはsample.lzhの中に入っています。)。

[リスト1]Rei_Trim(文字列関数.xlsm)

Sub Rei_Trim()
    s = "    空白削除関数    "
    MsgBox ("【" & LTrim(s) & "】")
    MsgBox ("【" & RTrim(s) & "】")
    MsgBox ("【" & Trim(s) & "】")
End Sub

実行画面です。見比べてみてください。

図1:空白削除関数例題実行画面

文字列の操作

文字列に変化を加えて処理したい時、文字列の操作関数が役に立ちます。文字列の一部の文字列を入れ替えたい時のReplace関数や、複数の文字列をつなげたい時のJoin関数、文字列を指定した文字で切り分けるSplit関数の説明をしたいと思います。

Replace関数

文字列の一部の文字を入れ替えたい時に使用します。以下構文です

[構文]Replace関数

Replace(expression,find,replace[,start[,count[,compare]]])

構文のカッコにカンマ区切りで表しているのが引数です。[]で囲まれているものは省略可能であることを表します。

引数 概要
expression 置換したい元の文字列を指定
find 検索したい文字列を指定
replace 置換する文字列
start (省略可)exipession内の検索開始位置を指定、省略すると1文字目から検索
count (省略可)置換したい文字列数を指定、省略するとすべて置換
compare (省略可)文字列の評価のモード、省略するとテキストモード

Replace関数の引数の説明

compareの設定値について補足します。

定数 説明
vbBinaryCompare 0 バイナリーモードで比較
vbTextCompare 1 テキストモードで比較

引数compareの値の説明

バイナリーモードでの比較は大文字/小文字の区別があります。もし検索文字列を「AB」にした場合「AB」は見つけますが、「ab」は無視されます。テキストモードでの比較は大文字/小文字の区別がありません。「AB」で検索して、「AB」も「ab」も、もちろん「Ab」も「aB」もみつけます。以下に例題を示します。

[リスト2]Rei_Replace(文字列関数.xlsm)

Sub Rei_Replace()
    s = "CBAORABKA"
    a = Replace(s, "A", "Z")        '(1)結果:CBZORZBKZ
    MsgBox (a)

    b = Replace(s, "A", "Z", 4)     '(2)結果:ORZBKZ
    MsgBox (b)

    c = Replace(s, "A", "Z", 1, 2)  '(3)結果:CBZORZBKA
    MsgBox (c)
End Sub

元の文字列を"CBAORABKA"にしました。「A」を「Z」に置換してみましょう。(1)はすべて置換します。(2)は4文字目からの指定なので、戻ってくる文字列も4文字目からです。(3)は、1文字目から2個のみ置換しました。以下の図は、実行イメージ図です。

図2:Replace関数イメージ図