『Excel VBA 表計算とプログラミング学習サイト』では、アフィリエイトプログラムを利用して商品を紹介しています。

【VBA】キャリッジリターンvbCr, ラインフィードvbLfで改行

今回は VBA の MsgBox 関数などで表示されるメッセージを途中で改行する方法を解説します。詳しい事は記事の後半で書くことにして、まずはその方法だけを先に書いておきます。メッセージボックスで改行するときは vbCrLf、セル内で改行するときは vbLf という組み込み定数を使ってください。いちいち使い分けるのが面倒なら vbCrLf で統一してください。

【VBA】キャリッジリターンvbCrとラインフィードvbLf

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

'[VBA] vbCr(キャリッジリターン)のサンプルコード
Sub vbCr_Test()
  Dim mystr1 As String
  Dim mystr2 As String
  mystr1 = "こばとは言葉を扱うAIだから"
  mystr2 = "プログラミング言語にも興味があるんだよ"
  'vbCrで改行を入れて文字列を連結する
  MsgBox mystr1 & vbCr & mystr2
End Sub

'vbCr_Testの実行結果:
'こばとは言葉を扱うAIだから
'プログラミング言語にも興味があるんだよ

vbCr_Test() の

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 にしておいたほうが無難です。たとえばこんなマクロで試してみましょう。

'[VBA] vbLf(ラインフィード)のサンプルコード
Sub vbLf_Test()
  Dim mystr1 As String
  Dim mystr2 As String
  mystr1 = "セルに文章を入れるときは"
  mystr2 = "改行コードをvbLfにしておきましょう"
  Range("a1").Value = mystr1 & vbLf & mystr2
End Sub
'vbLf_Testの実行結果:
'セルに文章を入れるときは
'改行コードをvbLfにしておきましょう

実はセル内に vbCrLf を挿入しても問題なく改行されるのですが、そうすると手動で改行した vbLf と入り混じってしまって、ワークシート全体を対象に置換するようなプログラムを書いた時に面倒が生じる可能性があるのです。別にそんなコードを書く予定はないかもしれませんが、こういうミスにつながりかねない要因はなるべく取り除いておくという姿勢が大切です。そういう意味では、プログラマーさんって、ある程度神経質な性格じゃないと務まらないのかもしれませんね。
 
vbCr や vbLf は、もともと ASCII コード の制御文字を組込定数としたものなので、組込定数の代わりに(指定数値を文字列に変換する)Chr 関数を使って改行させることもできます。制御文字に対応する文字コードは以下のようになっています。

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

コメント

  1. あとりえこばと より:

    【AI連載小説】生田目次郎のエクセル奮闘記(13)
    「VBAのVbCrLfで改行できます」
     
    ある日、次郎はVBA(Visual Basic for Applications)の学習に取り組んでいました。彼はテキストを改行する方法が知りたくなり、同僚の省吾にアドバイスを求めることにしました。
    「省吾、ちょっとVBAでテキストを改行させる方法が分からなくてさ」
    「ああ、それは VbCrLf を使えばできるよ。改行コードだね」
    「VbCrLf って何?」
    「VbCrLf はVisual Basicの改行コードだよ。VbCrLf を文字列に追加すると、その位置で改行されるよ」

    Sub 改行テスト()
        Dim 文字列1 As String
        Dim 文字列2 As String
        
        文字列1 = "これは一行目です。" & VbCrLf
        文字列2 = "これは二行目です。"
        
        MsgBox 文字列1 & 文字列2
    End Sub

    「このコードを実行すると、MsgBox で表示されるメッセージが改行されて表示されるよ」
    次郎は興奮しながらコードを実行し、表示されたメッセージボックスで改行が正しくされていることを確認しました。
    「なるほど、これで改行ができるんだね。ありがとう、省吾」