[VBA] メッセージの改行(キャリッジリターンとラインフィード)

 今回は MsgBox 関数などで表示されるメッセージを途中で改行する方法を解説します。詳しい事は記事の後半で書くことにして、まずはその方法だけを先に書いておきます。メッセージボックスで改行するときは vbCrLf、セル内で改行するときは vbLf という組み込み定数を使ってください。いちいち使い分けるのが面倒なら vbCrLf で統一してください。「それだけわかればもう十分」という人は、こばと日記 のコーナーにでも立ち寄ってくださいな。「詳しい理由について知りたい」と思う人は以下の記事をお読みください。
 

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

 vbCr は Carriage return(キャリッジリターン)とよばれる組込定数で「左端に戻る」という命令を意味しています。vbLf は Line feed(ラインフィード)の略で「1行下に移動する」という命令です。どちらを使っても結果メッセージを改行することができます。簡単なマクロで試してみましょう。

 '文章を改行します

 Sub NewLine1()

 Dim mystr1 As String
 Dim mystr2 As String

 mystr1 = "こばとは言葉の妖精さんだから"
 mystr2 = "プログラミング言語にも興味があるんだよ"

 MsgBox mystr1 & vbCr & mystr2

 End Sub

 マクロを実行するとメッセージボックスに

 こばとは言葉の妖精さんだから
 プログラミング言語にも興味があるんだよ

というように表示されます。

MsgBox mystr1 & vbCr & mystr2

というコードの vbCr を vbLf に変えて

MsgBox mystr1 & vbLf & mystr2

としても実行結果は全く同じです。
 

Windows の一般的な改行コードは vbCrLf です

 だったら vbCr と vbLf のどちらでも好きなほうを使えばいいじゃん、と思われるかもしれませんが、実は Windows の一般的な改行コードはキャリッジリターンとラインフィードを組合わせた vbCrLf となっているのです。すると VBA でテキストファイルに文章を書き込むときに、vbCr や vbLf のコードでは改行するべきところで改行されないということになってしまいます。なので改行の基本は vbCrLf に統一しておくことをおすすめします。
 

セル内の改行は vbLf を使いましょう

 しかし、Excel のセル内で手動で [Alt] + [Enter] によって改行した場合は、なぜか vbLf が挿入されてしまうのです。理由はわからないし、ちょっとイラッとくるけど、まあとにかく、そのような仕様になっているので仕方ありません。VBA でシートのセルに改行を含んだ文章を入れる場合も vbLf にしておいたほうが無難です。たとえばこんなマクロで試してみましょう。

 'セルに文章を入力します

 Sub NewLine2()

 Dim mystr1 As String
 Dim mystr2 As String

 mystr1 = "セルに文章を入れるときは"
 mystr2 = "改行コードを vbLf にしておきましょ~"

 Range("a1").Value = mystr1 & vbLf & mystr2

 End Sub

 マクロを実行するとセル A1 に

 セルに文章を入れるときは
 改行コードを vbLf にしておきましょ~

と表示されます。実はセル内に vbCrLf を挿入しても問題なく改行されるのですが、そうすると手動で改行した vbLf と入り混じってしまって、ワークシート全体を対象に置換するようなプログラムを書いた時に面倒が生じる可能性があるのです。別にそんなマクロを書く予定はないかもしれませんが、こういうミスにつながりかねない要因はなるべく取り除いておくという姿勢が大切なのです。そういう意味では、プログラマさんって、ある程度神経質な性格じゃないと務まらないのかもしれませんね。
 

ASCII コードの制御文字

 vbCr や vbLf は、もともと ASCII コードの制御文字を組込定数としたものなので、組込定数の代わりに(指定数値を文字列に変換する)Chr 関数を使って改行させることもできます。制御文字に対応する文字コードは以下のようになっています。

組込定数
 vbCr  Chr(13)
 VbLf  Chr(10)
 VbCrLf  Chr(13)+Chr(10)

 ≫ VBA 辞典メニューに戻って他の記事も読んでね~♪

スポンサードリンク
末尾大型広告
末尾大型広告

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください