はじめに
前回の続きで文字列関数を説明します。今回は、スペースの削除(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個のみ置換しました。以下の図は、実行イメージ図です。