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

VBA Spc 関数 スペース挿入でPrint位置を調整する

VBA Spc 関数 スペース挿入でPrint位置を調整する

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

スポンサーリンク

Spc 関数とは

Excel VBA の Spc 関数は、指定した数のスペースを挿入するファイル入出力関数です。Print#ステートメントやPrintメソッドと組み合わせて使用されます。指定した数のスペースを挿入することで、出力の位置を調整するために利用されます。

Spc 関数の構文や引数の設定と実際の使い方について具体的に解説していきたいと思います。

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

スポンサーリンク

構文(引数と戻り値)

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

構文

Spc(n)

引数

引数 説明
n【必須】挿入するスペースの数を指定します

※ 0 以上の整数を指定します。
※ 負数を指定するとエラーが発生します。

戻り値

戻り値説明
空白文字
(String)
指定された n 個の半角スペースを挿入します

※ Spc関数の結果そのものを変数に直接格納することはできません。構文エラーになります。
その理由は、Spc関数はPrint#ステートメントやPrintメソッド内で文字列そのものを出力するのではなく、あくまで「出力位置調整」の目的として用いる「制御用表現」だからです。

変数にスペースを格納する必要がある場合には、Space 関数を使います。

Spc 関数の機能と動作
  1. スペースの挿入
    • 引数 n に指定した数だけスペースを挿入します。
    • 例えば、Spc(5)は5つのスペースを挿入します。
    • Printステートメントの中で使用できるつなぎ記号は「;」です。
  2. 出力位置の調整
    • 現在の出力位置と行幅に基づいて、次の出力位置を計算して指定します。
    • 例えば、現在の出力位置が30で行幅が80の場合、Spc(60)を指定すると30+60=90で行幅を超えているため、次の出力位置は次の行の10から開始されることになります。
  3. 注意点:
    • スペースは半角スペースです。
    • プロポーショナルフォントの場合、スペースの幅はフォントの平均幅に基づきます。

解説(使用例)

Spc 関数の基本的な動作と使い方について、サンプルを使って解説します。

Spc 関数サンプル

Spc 関数を使用して出力位置を調整するいろいろな例を紹介します。

基本的な使用例

文字列の間等にスペースを挿入して、結果をDebug.Print に出力する例です。

'■Spc関数サンプル1(基本的な使用例)
Sub Spc_Sample01()
  Debug.Print "123"; Spc(3); "ABC"; Spc(3)
  Debug.Print Spc(3); "456"; Spc(3); "DEF"
End Sub

実行結果は次のとおりです。

フォントがMSゴシックの場合のイミディエイト

上の画像↑はVBEのフォント設定が「MSゴシック」、下の画像↓は「Meiryo UI」の場合です。

フォントが Meiryo UI の場合のイミディエイト

プロポーショナルフォントの場合、スペースの幅はフォントの平均幅に基づいていることがわかりますね。

ファイルに書き込む例

前半は、Spc 関数で二つの文字列間にスペースを挿入し Open ステートメントでファイルに書き込みます。そして後半は、作成したファイルを開いて書き込んだ内容を MsgBox に表示します。

'■Spc関数サンプル2(ファイルへ書き込む例)
Sub Spc_Sample02()
  Dim i As Integer
  Dim fn As Integer
  Dim fContent As String
  Dim line As String
    
  fn = FreeFile  ' 空きファイル番号取得
  Open "C:\VBA_Test\SpcTest.txt" For Output As #fn
  For i = 0 To 5
    Print #fn, "12345"; Spc(i); "ABCDE"
  Next i
  Close #fn

  ' ファイルの開いて書き込んだ内容を確認します
  fn = FreeFile
  Open "C:\VBA_Test\SpcTest.txt" For Input As #fn
  ' ファイルを終焉まで1行ずつ読み込む
  Do While Not EOF(fn)
    Line Input #fn, line  ' 1行読み込む
    ' ファイル内容と改行コードを追記
    fContent = fContent & line & vbCrLf
  Loop
  ' ファイルを閉じる
  Close #fn
  ' MsgBoxでファイル内容を表示
  MsgBox fContent

End Sub

【ポイント】
・13行目までの前半でファイルにデータを書き込んでいます。
・データは「12345」と「ABCDE」の間に Spc(i) を挿入しループ処理でスペースを増加させています。
・15行目以降は、データを書き込んだテキストファイルを開き、すべてを変数に書き出していきます。
・書き出し終わった変数の内容を MsgBox で表示します。

実行すると、次の MsgBox 画像のような結果となりました。

Spc関数サンプル2実行結果のMsgBox画像

行幅に対して出力を調整する例

'■Spc関数サンプル3(行幅に対する出力配置調整例)
Sub Spc_Sample03()
  Dim cWidth As Integer
  '行幅90に3列を均等に配置する
  cWidth = 30 / 3 ' 30 ÷ 3列

  ' ヘッダーの出力
  Debug.Print _
    "ID"; Spc(cWidth - 2); "Name"; Spc(cWidth - 4); _
    Spc(cWidth - 6); "pieces" 'piecesは右寄せにする
    
  ' データの出力
  Dim i As Integer
  For i = 1 To 20 Step 2
    Debug.Print _
      CStr(i); Spc(cWidth - Len(CStr(i))); _
      "ItemNo_" & i; Spc(cWidth - Len("ItemNo." & i)); _
      Spc(cWidth - Len(CStr(i * 10))); CStr(i * 10)
  Next i

End Sub

【ポイント】
・行幅を列数で割って1行の幅を計算しています。
・Len 関数を使って動的にスペース数を調整し、データが揃うようにしています。
・Spc(n)を利用して適切な間隔になるよう計算・調整し、見やすい表を作成します。

実行すると、次のイミディエイト画像のような結果となります。

Spc関数サンプル3(行幅に対する出力配置調整例)イミディエイト

おわりに

VBA の Spc 関数は、Print#ステートメントPrintメソッドで出力位置を調整するために使用される関数です。指定した数のスペースを挿入することで、データの整列やフォーマットを改善できます。

ただし、出力位置の計算や行幅の影響、使用するフォントによって、期待したスペース数と異なる結果になる場合があります。

Spc 関数は、Print#ステートメントやPrintメソッド以外では使用できません。正確なスペースを挿入したい場合や変数への代入を行いたい場合は Space関数を使用する必要があります。

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

VBAの関数一覧はこちらからご参照ください。

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

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

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

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