本ページには広告が含まれています。

Excel VBA Space関数 指定した数のスペースを返す

Excel VBA Space関数 指定した数のスペースを返す

Excel VBAの「Space 関数」について解説します。

スポンサーリンク

Space関数とは

Excel VBA の Space 関数とは、指定した数の半角スペースを連ねた文字列を返す関数です。

文字列の先頭や最後に指定数のスペースを付加するときなどに使います。

書式として固定長の文字列にしたい場合などに、長さが足りない分をスペースで埋めて揃えたりできます。

Space 関数(Visual Basic for Applications リファレンス)

構文(引数と戻り値)

Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。

構文

Space(number)

引数

引数 説明
number【必須】取得するスペースの数値(式)を指定します
※ 負数を指定した場合、実行時エラー ‘5’ となります

戻り値

戻り値 説明
文字列number で指定した数の半角スペースが返ります
number が 0~0.5 の場合、”” 空文字を返します
number が小数だった場合には、端数は四捨五入(0.5未満切り捨て、0.5以上切り上げ) や 五捨五超入(0.5以下切り捨て、0.5超で切り上げ)されるので注意が必要です

解説(使用例)

簡単なサンプルコードを作成して使用例を解説します。

Space関数 サンプル

基本的な Space 関数の動作がわかる簡単なサンプルと固定の長さにする方法のサンプルを見てみましょう。

引数(number)は正の整数で指定します

引数(number)の値が数式で指定される場合、値に小数が含まれていたらどうなるのかを検証してみたいと思います。小数は「切り捨て」「切り上げ」「四捨五入」など、どうなるのでしょうか。

'■引数(number)の値が小数を含む場合の動作確認
Sub Space_Smple01()
  Dim str As String

'▼Spaceのみ[]内に Debug.Print する
  str = Space(0)
  Debug.Print "[" & str & "]0"
  str = Space(0.5)
  Debug.Print "[" & str & "]0.5"
  str = Space(0.5001)
  Debug.Print "[" & str & "]0.5001"
  str = Space(1)
  Debug.Print "[" & str & "]1"
  str = Space(1.5)
  Debug.Print "[" & str & "]1.5"

'▼単語間にspaceを0から順に増やしてみる
  str = "Hello" & Space(0) & "World"
  Debug.Print "[" & str & "]0"
  str = "Hello" & Space(0.4999) & "World"
  Debug.Print "[" & str & "]0.4999"
  str = "Hello" & Space(0.5) & "World"
  Debug.Print "[" & str & "]0.5"
  str = "Hello" & Space(0.5001) & "World"
  Debug.Print "[" & str & "]0.5001"
  str = "Hello" & Space(1) & "World"
  Debug.Print "[" & str & "]1"
  str = "Hello" & Space(1.5) & "World"
  Debug.Print "[" & str & "]1.5"
  str = "Hello" & Space(2) & "World"
  Debug.Print "[" & str & "]2"
  str = "Hello" & Space(2.5) & "World"
  Debug.Print "[" & str & "]2.5"
  str = "Hello" & Space(3) & "World"
  Debug.Print "[" & str & "]3"
  str = "Hello" & Space(3.5) & "World"
  Debug.Print "[" & str & "]3.5"
  str = "Hello" & Space(4) & "World"
  Debug.Print "[" & str & "]4"
  str = "Hello" & Space(4.5) & "World"
  Debug.Print "[" & str & "]4.5"
  str = "Hello" & Space(5) & "World"
  Debug.Print "[" & str & "]5"
  str = "Hello" & Space(5.5) & "World"
  Debug.Print "[" & str & "]5.5"
  str = "Hello" & Space(6) & "World"
  Debug.Print "[" & str & "]6"
  str = "Hello" & Space(6.5) & "World"
  Debug.Print "[" & str & "]6.5"

End Sub

実行結果の イミディエイト 画像がこちらです。

・1~15行目、Space関数の引数(number)に 0 ~ 1.5 まで変動させて指定した結果を [] 内に挟んで Debug.Print で表示させています。

・8行目の Space(0.5) では、小数は繰り上がらず、Space(0) と同じになっています。

・9行目の Space(0.5001) で小数が繰り上がり、Space(1) となりました。これは五捨五超入です。

・14行目を見ると Space(1.5) で小数が繰り上がり、Space(2) とりました。これは四捨五入です。

・18行目以降では、単語間にSpace関数を挟み、引数(number)に 0 ~ 6.5 まで変動させて指定した結果を [] 内に挟んで Debug.Print 表示させています。

・引数(number)が 0,2,4,6 で 五捨五超入 と 1,3,5 で 四捨五入 のように交互で動作が異なっていることが確認できました。number の値を数式で設定する場合、値が小数を含まないようにしないと動作に不具合が発生する可能性がありますね

引数(number) の値は「正の整数」で指定しましょう!

引数(number) の値を特に数式で指定する場合には、値が「正の整数」になるように調整しないと思わぬ不具合が発生するかもしれません!

先頭を半角スペースで埋めて固定長10に揃える

次のサンプルコードで、半角文字と全角文字の違いを確認しましょう。

'■先頭を半角スペースで埋めて固定長10に揃える
Sub Space_Sample02()
  Dim str As String '文字列保存用
  Dim s As String   '結果保存用
  
  '▼半角で文字数とバイト数で比較してみる
  str = "12345"   '文字列が半角
  s = Space(10 - Len(str)) & str
  Debug.Print s   '"     12345"
  s = Space(10 - LenB(str)) & str
  Debug.Print s   '"12345"
  
  '▼全角文字の場合で比較
  str = "あいうえお"  '文字列が全角
  s = Space(10 - Len(str)) & str
  Debug.Print s   '"     あいうえお"
  s = Space(10 - LenB(str)) & str
  Debug.Print s   '"あいうえお"
  
  '▼全角と半角文字が混在している場合
  str = "あい123"   '全角と半角が混在
  s = Space(10 - Len(str)) & str
  Debug.Print s   '"     あい123"
  s = Space(10 - LenB(str)) & str
  Debug.Print s   '"あい123"
  '文字列をShift_JISに変換してバイト数を算出
  s = StrConv(str, vbFromUnicode)
  s = Space(10 - LenB(s)) & str
  Debug.Print s   '"   あい123"
    
End Sub

実行結果のイミディエイト画像です。

・7行目 str = “12345” で、半角の文字列を用意しています。

・8行目は、引数(number) の値を 10 から Len関数で取得した文字数 5 をマイナスして設定しています。
 9行目の Debug.Print で ” 12345″ と先頭に半角スペース5個が付いて表示されたことが確認できます。

・10行目では、LenB関数で取得した値 10 を 10からマイナスしているので Space(0) です。
 11行目の Debug.Print で “12345” とスペースは付加されず表示されました。
 これは、文字は全角半角にかかわらず1文字2バイトだから LenB関数で取得した値は10だったからです。

・14行目 str = “あいうえお” と、全角の文字列を用意しました。

・15行目は、引数(number) の値を 10 から Len関数で取得した文字数 5 をマイナスして設定しています。
 16行目の Debug.Print で ” あいうえお” と先頭に半角スペース5個が付いて表示されましたが全体の長さは15となっており、10を超えてしまいました。

・17~18行目は、半角の時と同様でスペースは付加されずに表示されました。

・21行目 str = “あい123” と、全角半角混在の文字列を用意しました。

・22~25行目で、Len関数 と LenB関数でそれぞれ取得表示してみました。
 23行目に表示された ” あい123″ の長さは、10 を超えた 13 となっています。

・27行目、s = StrConv(str, vbFromUnicode) は文字列を StrConv関数で Shift_JISに変換しています。

・28行目では、LenB関数で Shift_JIS に変換した文字列のバイト数を 10 から引いてスペースを付加しています。

・29行目の結果表示は、” あい123″ です。半角スペース 3 個 + “あい123” で長さは 10 です。

全角と半角文字が混在している場合に長さを揃えるには、半角文字を1バイトとして計算する必要があります。半角文字を1バイトとして計算するには、つぎのように StrConv関数で Shift_JIS に変換します。

Shift_JIS文字列 = StrConv(文字列, vbFromUnicode)

Shift_JISに変換した文字列のバイト数をLenB関数で取得して固定長になるように計算して半角スペースを取得します。書式はつぎのとおりです。

半角スペース文字列 = Space(固定長バイト数 – LenB(Shift_JIS文字列))

 

全角も半角も2バイトで表現されるのは、VBAでは標準でUnicode形式が使われているためです。
だから、文字列を指定してバイト数を取得すると全て 1 文字 2 バイトで取得さます。

おわりに

このように Space 関数は、出力の書式指定や固定長文字列の設定やデータのクリアを行うのに便利です。

Excel VBA「Space 関数」で指定した数の半角スペース文字列を返す方法の解説でした。

単純に半角スペースの文字列を返すのは簡単ですが、固定長の文字列になるようスペースで埋める場合には注意が必要です。

特に、全角文字と半角文字が混在している場合は、半角文字を1バイトとして計算してあげないと長さがうまく揃いません。StrConv関数LenB関数 を組み合わせて文字列のバイト数を取得しましょう。

以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;

VBAの関数一覧はこちらです。

スポンサーリンク
スポンサーリンク

VBAサンプルファイルダウンロードページのご案内

このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。

ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!