t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

VBA Spc関数の落とし穴とSpace関数について

VBAで任意のスペースを挿入する関数がSpace関数である。
次のように使用する。

Sub test()
    Debug.Print "a"; Space(5); "b"
End Sub

結果

a     b

似たような関数に、Spc関数がある。(実はさっき知った)
上記のコードをSpc関数に書き換えても、通常はうまく動作する。

Sub test()
    Debug.Print "a"; Spc(5); "b"
End Sub

ただ、Spc関数というのはちょっとクセがあって、普通の文字列を返す訳では無いようだ。www.vba-ie.net

基本的にDebug.Printや、ファイル出力時のPrint命令でしか使えず、変数への代入は構文エラーになる。

Dim s As String: s = Space(5) 'OK
Dim s As String: s = Spc(5) '構文エラー

また、Debug.PrintでもAnd連結はできず、セミコロンでの連結になる。

さらに、VBEのエディタでプロポーショナルフォントを設定していると、なぜかSpc関数がDebug.Printで機能しない。
Spc(5)としてもまったくスペースが入らなくなるのだ。

ちなみに私はエディタでメイリオを使っているので機能しなかった。
MSゴシックに直したらOK。MS PゴシックはNG。

Spcは何かとクセのある関数だ。
Space関数がある以上、その存在価値は謎であるが、解説を読むと、プロポーショナルフォントでテキストファイルへ出力するときに特殊なことができそうなにおいはする。

まあ、通常の用途ではSpace関数を用いるのが良いと思う。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。