文字列の連結、分割、抽出など、文字列操作って使うことがよくありますよね?
VBAでも様々な関数が用意されています。
この記事では、文字列の操作に関して
- 長さ
- 置換
- 結合
- 分割
- 抽出
- 挿入
- 変換
- 比較
- 削除
それぞれ関数を使い方について解説していきます。今回は文字列を操作する方法について、使い方をわかりやすく解説します!
文字列操作関数一覧
文字列を操作する関数について表にまとめました。
名前 | 説明 |
---|---|
CStr | 指定した値を文字列型(String)に変換 |
Format | 値を指定した書式で文字列型(String)に変換 |
InStr/InStrB | 文字列を検索し見つかった最初の位置を返す |
InStrRev | 文字列の後ろから指定の文字列を検索し、最初に見つかった位置を返す |
Join | 文字列の配列を区切り文字で結合して返す |
Lcase | 指定した文字列内のアルファベットを大文字から小文字に変換 |
Left/LeftB | 文字列の先頭から指定した文字数分の文字列を返す |
Len/LenB | 文字列の文字数を返すまたは構造体など型のサイズを返す |
Ltrim | 文字列の先頭のスペースを取り除いて返す |
Mid/MidB | 文字列の指定した位置から文字数分の文字列を返す |
Replace | 文字列を置換 |
Right/RightB | 文字列の最後から指定した文字数分の文字列を返す |
Rtrim | 文字列の最後のスペースを取り除いて返す |
Split | 区切り文字で区切られた文字列を配列にして返す |
StrComp | 文字列を比較 |
StrConv | 文字列を大文字や全角、ひらがななどに変換して返す |
Trim | 文字列の先頭と最後の空白を取り除いて返す |
Ucase | 指定した文字列内のアルファベットを小文字から大文字に変換 |
Val | 文字列を適切な数値型(Integerなど)に変換して返す |
これらの関数について解説していきます!
長さ(Len)
文字数を取得するには、Len関数を使用します。バイト数を取得したい場合には、LenB関数を使います。
VBAでは半角文字でも全角文字でも1文字のバイト数は2バイトで同じです。C言語などとは違い、VBAでは全角半角混在文字列でも文字数の数え方を必要はありません。
Len関数は以下のように記述して使用します。
Len(文字列)
Len関数の使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。
置換(Replace)
Replace関数はある文字列の中から指定の文字列を置き換える場合に使います。Replace関数は以下のように記述します。
Replace(expression, find, replace[, start[, count[, compare]]])
引数の中で「[ ]」で囲まれた部分は省略することができます。引数の指定について表にまとめました。
引数 | 定数(値) | 説明 |
---|---|---|
expression | ー | 置換する文字列を含む文字列 |
find | ー | 検索する文字列 |
replace | ー | 置換する文字列 |
start | ー | 検索開始位置を指定 |
count | ー | 置換する文字列数を指定 省略の場合、すべて置換 |
compare | vbBinaryCompare(0) | バイナリモードで比較 大文字と小文字を区別する |
vbTextCompare(1) | テキストモードで比較 大文字と小文字を区別せず |
Replace関数の使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。
結合(Join)
文字列を高速で結合する方法
文字列を結合する場合は「&」記号を使って結合するのが一般的ですが、文字列の数が多くなると処理に時間がかかります。
そこで高速に処理するために、Join関数を使う方法があります。Join関数では、結合する大量の文字列を配列に格納して、その配列の要素を全て結合することで高速に処理することができます。
Join関数は以下のように記述します。
Join(sourcearray[,delimiter])
「[ ]」内の記述は省略することができます。
Join関数は、指定した配列内の要素を全て結合した文字列を返します。引数sourcearrayには、配列を指定します。引数delimiterには、結合する要素を区切るための文字を指定します。
Join関数の使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。
分割(Split)
指定文字を区切り文字として、文字列を分割する場合にSplit関数を使用します。Split関数は分割したそれぞれの文字列を一次元配列に格納します。
Split関数は以下のように記述します。
Split(分割元の文字列名, 区切り文字)
Split関数の使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。
抽出・挿入(Left、Mid、Right、InStr)
文字列を抽出したり、挿入する場合はLeft、Mid、Right、InStrなどの関数を組み合わせて使います。
抽出する方法
文字列を抽出する方法については、こちらで詳しく解説していますので、ぜひ参考にしてください。
挿入する方法
文字列を挿入するために、抽出した文字列を「&」記号を使って結合する方法をご紹介します。
Sub macro1() Dim str As String, del As String str = "SamuraiSchool" del = "School" MsgBox Left(str, InStr(str, del) - 1) & " Engineer " & Mid(str, InStr(str, del)) End Sub
実行結果:
このサンプルコードでは、InStr関数で指定した文字列”School”の位置を検索し、Left関数とMid関数で文字列をそれぞれ抽出しています。抽出した文字列と挿入したい文字列を「&」記号を使って結合しています。
変換(CStr、Val、LCase、Format、StrConv)
文字列の変換は何に変換するかによって使用する関数が違ってきます。
数値と文字列の変換
数値から文字列に変換する場合はCstr関数を使います。文字列から数値に変換する場合はVal関数を使います。
サンプルコードで確認しましょう。
Sub macro2() Dim price As Integer, new_price As Integer, str_price As String price = 100 str_price = CStr(price) '数値を文字列に変換 new_price = Val(str_price) * 1.1 '文字列を数値に変換 MsgBox "元の価格は" & str_price & "円" & vbCrLf & _ "新しい価格は" & new_price & "円" End Sub
実行結果:
このサンプルコードでは、CStr関数を使ってInteger型の数値を文字列に変換しています。そして、Val関数を使って文字列を数値型に変換して計算を実行しています。
なお「&」記号を使って文字列と数値を結合する場合、明示的にCStr関数を使わず数値のままでも、暗黙的に文字列に変換されるので結合することが可能です。またVal関数は文字列をDouble型に変換します。
大文字と小文字の変換
大文字に変換する場合はUCase関数を、小文字に変換する場合はLCase関数を使用します。
UCase、LCaseの使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。
日付型と文字列の変換
日付型(Date型)を文字列に変換する場合には、Format関数を使用します。表示形式を設定することができて便利です。
Format関数の使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。
また日付型(Date型)の扱い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。
半角文字と全角文字の変換
半角文字と全角文字を変換する場合、StrConv関数を使用します。
StrConv関数は以下のように記述します。
StrConv(string, conversion)
引数stringには、変換する文字列を指定します。引数conversionには、変換の種類を指定します。引数conversionには以下の定数を指定します。
定数 | 値 | 説明 |
---|---|---|
vbUpperCase | 1 | 文字列を大文字に変換 |
vbLowerCase | 2 | 文字列を小文字に変換 |
vbProperCase | 3 | 文字列の各単語の先頭の文字を大文字に変換 |
vbWide | 4 | 文字列内の半角文字を全角文字に変換 |
vbNarrow | 8 | 文字列内の全角文字を半角文字に変換 |
vbKatakana | 16 | 文字列内のひらがなをカタカナに変換 |
vbHiragana | 32 | 文字列内のカタカナをひらがなに変換 |
vbUnicode | 64 | 文字列をUnicodeに変換 |
vbFromUnicode | 128 | 文字列をUnicodeからシステムの既定のコードページに変換 |
StrConv関数を使えば、大文字と小文字の変換も可能です。ここでは、半角文字と全角文字の変換についてご紹介します。
Sub macro3() Dim str As String, w_str As String, n_str As String str = "Hello" w_str = StrConv(str, vbWide) '全角文字に変換 n_str = StrConv(w_str, vbNarrow) '半角文字に変換 MsgBox w_str & vbCrLf & n_str End Sub
実行結果:
ひらがなとカタカナの変換
ひらがなとカタカナを変換する場合もStrConv関数を使います。第2引数の定数を指定することで変換できます。
サンプルコードで確認しましょう。
Sub macro4() Dim str As String, k_str As String, h_str As String str = "さむらい" k_str = StrConv(str, vbKatakana) 'カタカナに変換 h_str = StrConv(k_str, vbHiragana) 'ひらがなに変換 MsgBox k_str & vbCrLf & h_str End Sub
実行結果:
比較(StrComp)
2つの文字列が同じか、そうでないか比較するにはStrComp関数を使用します。
StrComp関数は以下のように記述します。
StrComp(string1,string2[,compare])
引数の「[ ]」内は省略可能です。引数string1には、比較する一方の文字列を指定します。引数string2には、比較するもう一方の文字列を指定します。引数compareには、文字列の比較モードを指定します。
0の場合はバイナリーモードでの比較となり、大文字と小文字を区別します。1の場合はテキストモードでの比較となり、大文字と小文字の区別をしません。
サンプルコードで確認しましょう。
Sub macro5() Dim str1 As String, str2 As String str1 = "HELLO" str2 = "hello" MsgBox StrComp(str1, str2, 0) & vbCrLf & _ StrComp(str1, str2, 1) End Sub
実行結果:
このサンプルコードでは、大文字と小文字の文字列をStrComp関数を使って比較しています。
バイナリーモードで大文字と小文字を区別する場合は-1を返しています。テキストモードで大文字と小文字を区別しない場合は0を返しています。
削除(Replace、Trim、LTrim、RTrim)
削除する関数には大きく分けて2種類の関数があります。文字列を指定して削除する関数と、半角スペースを削除する関数です。
それぞれの関数についてみていきましょう。
Replaceで削除する方法
文字列を指定して削除する場合は、Replace関数を使います。Replace関数で文字列を指定して、その文字列を空文字に置換することで削除します。
Replace関数を使って文字列を削除する方法については、こちらで詳しく解説しています。ぜひ参考にしてください。
Trim、LTrim、RTrimで削除する方法
半角スペースを削除する場合は、Trim、LTrim、RTrimなどの関数を使います。
Trim、LTrim、RTrim関数の使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。
まとめ
ここでは、文字列を操作する方法について説明しました。ここでご紹介した関数を使うことで、置換、結合、分割、変換、比較などの文字列操作が可能になります。
使いこなすことができるように、この記事を何度も参考にして下さいね!