スポンサードリンク

VBAでの改行の方法

VBAでの改行の方法

メッセージボックス(msgbox)で表示する文章が長くなってくると、見やすくするために改行を行いたときがあります。

VBAには改行を表現が何種類か用意されています。

それぞれの違いを交えながら紹介したいと思います。

改行表現一覧

定数 キャラクター・コード 意味
vbCr Chr(13) キャリッジ・リターン。古いMac OS
vbLf Chr(10) ライン・フィード。Unix系、新しいMac OS
vbCrLf Chr(13)、Chr(10) キャリッジ・リターン/ラインフィード
Windows
vbNewLine Chr(13)、Chr(10)またはChr(10) 実行中のOSに応じた標準の改行文字を返す

僕は今まではvbCrLfを使用していました。

ところでこのvbCr(キャリッジ・リターン)とvbLf(ライン・フィード)とは何なんでしょうか?

キャリッジ・リターンとライン・フィード

wikipedia先生によると元々の由来は

これらの用語はタイプライターが由来である。タイプライターでは印字装置は固定され、紙の方が上下左右に移動することで、文字送りや行送りが行われる。英語などの左横書きにおける「キャリッジリターン」とは、紙を固定して移動する装置(キャリッジ)を元の位置に戻す(リターン、つまり紙の左端に印字装置が来る)ことである。「ラインフィード」とは紙を必要な行(ライン)だけ上に送る(フィード、つまり下の行に印字装置が来る)ことである。

プログラム的にはこんな感じ。

・キャリッジ・リターン⇨カーソルを先頭に戻す

・ライン・フィード⇨カーソルを下の行の同じ位置に移動 f:id:ExcelLover:20180823171801j:plain

2つ合わせて改行と同じ意味になります。

では実際にExcel上で使用してみるとどうなるのでしょうか

Excelでの表示の違い

Sub 改行()
'セル代入
     Range("B2").Value = "AAA" & vbCr & "BBB"
     Range("B3").Value = "AAA" & vbLf & "BBB"
     Range("B4").Value = "AAA" & vbCrLf & "BBB"
     Range("B5").Value = "AAA" & vbNewLine & "BBB"
     
'メッセージボックス
     MsgBox "AAA" & vbCr & "BBB"
     MsgBox "AAA" & vbLf & "BBB"
     MsgBox "AAA" & vbCrLf & "BBB"
     MsgBox "AAA" & vbNewLine & "BBB"
End Sub

上記コードの実行結果が下記です。

f:id:ExcelLover:20180823172854j:plain

メッセージボックスでは4つ全てのコードが実際に改行されていますが、セルに書き込むとvbCrのみ改行されていません。

これはキャリッジ・リターンの本来の働きをしているのかなと推測します。

他の3つについては同じようにセルに書き込んでも改行されていますが、vbLfとvbCrLf・vbNewLineでは少し中身が異なっています。

D列の数値を見て頂くとわかりやすいですが、vbCrLf・vbNewLineについては改行コードが2文字(13、10)入力されています。

一方vbLfと手入力で改行した場合は改行コードが1文字(10)だけ入力されています。

手入力との整合性を取ろうと思うとVBA上で使用するのは

vbLf を使用すれば良いのではないでしょうか。

VBAのコード自体の改行方法

ちなみにVBAのコード自体の改行方法は

     MsgBox "AAABBB" _
          , vbInformation

改行したい位置で「 _(半角スペース・アンダーバー)」で改行できます。

まとめ

今回記事をまとめるにあたって調べていて、改行コード自体も文字数に数えられるということにちょっとびっくりしました。

文字数をキーにした仕組みを作るときに詰まりそうなネタですので覚えておくと助かりそうな気がします。

例によって偉大なる先輩達を参考に

thom.hateblo.jp

www.relief.jp

[asin:4797396989:detail]