Excel VBAの「String 関数」について解説します。
String 関数とは
Excel VBA の String 関数とは、指定した文字コードまたは文字列の先頭文字を指定した回数並べた文字列で返す関数です。
簡単に言えば、文字を指定した数で並べて返すということです。空白を特定の文字で埋めたい時に使用します。
Space 関数は半角スペースを返しますが、String 関数なら「スペース文字」だけでなく「任意の文字」を引数で指定することができます。
String 関数(Visual Basic for Applications リファレンス)
構文(引数と戻り値)
Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。
構文
String(number, character)
引数
引数 | 説明 |
---|---|
number | 【必須】文字をいくつ並べるかを指定します ※ 長整数型 (Long)の数値(式)で指定します |
character | 【必須】文字コードまたは文字列(式)を指定します ※ 指定した文字列の最初の文字が使用されます |
戻り値
戻り値 | 説明 |
---|---|
文字列 | character で指定した文字(文字列の先頭文字)を、 number で指定した回数並べた文字列を返します |
※ number が小数だった場合には、端数は四捨五入(0.5未満切り捨て、0.5以上切り上げ) や 五捨五超入(0.5以下切り捨て、0.5超で切り上げ)されるので注意が必要です
■引数(number)の値に小数がある場合の動作確認は、Space 関数で行っていますので参照願います。
引数(number) の値は「正の整数」で指定しましょう!
引数(number) の値を特に数式で指定する場合には、値が「正の整数」になるように調整しないと思わぬ不具合が発生するかもしれません!
解説(使用例)
簡単なサンプルコードを作成して使用例を解説します。
String 関数 サンプル
String 関数の動作がわかる簡単なサンプルと固定の長さにする方法のサンプルを見てみましょう。
指定した数の文字を取得する
'■指定数の文字を取得するサンプル
Sub String_Smple01()
Dim j As Integer
'▼文字列から文字を取得する
Debug.Print String(3, "/")
Debug.Print String(5, "kurumico")
'▼文字を文字コードで指定する
'Asc関数で(文字列)の先頭文字の文字コードを取得する
j = Asc("kurumico")
Debug.Print j
Debug.Print String(10, j)
Debug.Print String(10, Asc("/"))
End Sub
実行結果の イミディエイト 画像がこちらです。
・3行目、Asc関数で取得した文字コードを保存するための変数 j を宣言しています。
・6行目、String 関数で 文字 “/” を 3 取得するように指定しています。
・7行目、String 関数で 文字列 “kurumico” の先頭文字 “k” を 3 取得するように指定しています。
・11行目、Asc関数で引数 (“kurumico”) を指定しています。Asc関数は、先頭文字 “k” の文字コードを取得して変数 j に代入しています。そして、11行目で変数 j の値「107」をイミディエイトに表示させています。
・13行目は、String 関数に文字コード j を 10 取得するように指定しています。
・14行目は 13行目と同じですが、変数ではなく直接引数に Asc関数を指定した記述になっています。
全/半角混在している文字列を固定長に揃えるサンプル
既定では全角/半角ともに1文字は2バイトです。半角文字は全角文字の半分のサイズなので、1バイトとして計算してあげないとうまく長さを揃えることができません。次のサンプルコードでは、半角文字と全角文字が混在している場合でも長さを揃えることができます。
'■全/半角が混在している文字列の先頭を
' 指定文字で埋めて固定長「10」に揃える
Sub String_Sample02()
Dim str As String '文字列保存用
Dim sc As String 'Shift_JIS用
Dim s As String '結果表示用
str = "あい123" '全角と半角が混在
'文字列をShift_JISに変換して変数にする
sc = StrConv(str, vbFromUnicode)
'▼半角スペースで埋める
s = String(10 - LenB(sc), " ") & str
Debug.Print s '" あい123"
'▼半角アンダーバーで埋める
s = String(10 - LenB(sc), "_") & str
Debug.Print s '"___あい123"
'▼文字コードでアスタリスクを指定
s = String(10 - LenB(sc), Asc("*")) & str
Debug.Print s '"***あい123"
End Sub
実行結果のイミディエイト画像です。
・7行目 str = “あい123” と、全角半角混在の文字列を変数に代入しました。
・10行目、sc = StrConv(str, vbFromUnicode) は文字列を StrConv関数で Shift_JISに変換しています。
▼半角スペースで埋めて長さを揃えます
・13行目では、LenB関数で Shift_JIS に変換した文字列のバイト数を 10 から引いてスペースを付加しています。
・14行目の Debug.Print で ” あい123″ です。半角スペース 3 個 + “あい123” で長さは 10 になっています。
▼半角アンダーバーで埋めて長さを揃えます
・17行目では、13行目で指定した半角スペース ” ” を半角アンダーバー “_” に変えただけです。
・18行目の Debug.Print は “___あい123” です。半角アンダーバー 3 個 + “あい123” で長さは 10 です。
▼文字コードでアスタリスクを指定します
・21行目では、Asc 関数で Asc(“*”) と半角アスタリスクを指定しています。Asc(“*”) の値は 42 です。
・22行目の Debug.Print は “***あい123” です。半角アスタリスク 3 個 + “あい123” で長さは 10 です。
Space 関数の記事でも、全/半角が混在している文字列を固定長に揃えるサンプルを解説していますので、よろしければあわせてご参照ください。
おわりに
VBAの関数一覧はこちらです。
VBAサンプルファイルダウンロードページのご案内
このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。
ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!
Excel VBA String 関数で「指定した文字列の先頭文字 または 文字コードの文字」を「指定数繰り返した文字列」にして返す方法について解説しました。
Space 関数は半角スペース限定でした。String 関数の場合は「半角スペース」も含む「文字」または「文字コード」を指定できます。
引数には 2文字以上の文字列で指定することができますが、その場合は「先頭文字」が指定されたことになります。
以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;