【VBA入門】セル内とMsgBox内、コード内での改行コードの使い分け

改行コードって使ってますか?

シートのセル中で文章を改行したり、メッセージボックスで表示する文章を改行したい場合ってありますよね。

この記事では、改行コードについて

  • 改行コードとは
  • セル内の改行コード
  • MsgBox内での改行コード
  • コード内での改行コード
  • 改行コードを削除する方法
  • 改行コードを変換する方法
  • 改行コードで分割する方法
  • 改行コードを含むか検索して判定する方法

など基本的な内容から応用的な使い方まで解説していきます。今回は改行コードについて、使い方をわかりやすく解説します。

目次

改行コードとは

改行コードとは、文章中の改行したい位置に記述する改行を表す値のことです。プログラミング言語によってそれぞれ、あらかじめ決められた文字や文字列、もしくは定義済みの定数などです。

VBAで定義されている改行コードを表にまとめました。

定義済みの定数説明
vbCrChr(13)キャレッジリターン
vbLfChr(10)ラインフィード
vbCrLfChr(13) + Chr(10)キャリッジリターンとラインフィードの組み合わせ
vbNewLineChr(13) + Chr(10)
またはChr(13)
MacではChr(13)
プラットフォームで指定した改行文字
プラットフォームごとに適切な適切な値を使用

注意しなければならないのが、セル中の文章の改行コードとメッセージボックスなどOSに依存する場合の改行コードが異なる点です。

Windowsの場合、セル中の文章の改行コードはvbLf(char(10))を使用しますが、メッセージボックスに表示する場合はvbCrLf(Chr(13) + Chr(10))を使用します。

セル内の改行コード

セル中の改行コードには、vbLf(char(10))を使用します。サンプルコードを確認しましょう。

Sub macro1()
    Dim myRng As Object
    Set myRng = Range("A1")
    
    myRng.Value = "侍" & vbLf & "エンジニア" & vbLf & "塾"
End Sub

実行結果:
vbCrLf01

このサンプルコードでは、Excelシートのセルに「侍」、「エンジニア」、「塾」という文字列を改行して入力しています。セル中の改行ですので改行コードはvbLfを使用しています。

MsgBox内での改行コード

セル中の改行コードには、vbCrLf(char(13) + char(10))を使用します。サンプルコードを確認しましょう。

Sub macro2()
    MsgBox "侍" & vbCrLf & "エンジニア" & vbCrLf & "塾"
End Sub

実行結果:
vbCrLf02

このサンプルコードでは、メッセージボックスに「侍」、「エンジニア」、「塾」という文字列を改行して入力しています。メッセージボックスでの改行なので、改行コードはvbCrLfを使用しています。

コード内での改行コード

ここでコード内の記述を改行する方法についてお伝えしておきます。1行の記述が長くなり、見にくくなる場合に「 _」(「半角スペース」+「アンダースコア」)を使って改行します。

サンプルコードで確認しましょう。

Sub macro2()
    MsgBox "侍" & vbCrLf & _
            "エンジニア" & vbCrLf & _
            "塾"
End Sub

実行結果:
vbCrLf02

このサンプルコードでは、先ほどのサンプルコードを「 _」(「半角スペース」+「アンダースコア」)を使って改行して記述しています。

改行コードを削除する方法

改行コードが入っているけど、それを削除したいという場合もあります。そんな場合はReplace関数を使って改行コードを空文字(“”)に変換することで削除することができます。

Relpace関数は以下のように記述します。

削除後の文字列 = Replace(対象の文字列, 改行コード, “”)

サンプルコードで確認しましょう。

Sub macro3()
    Dim before As Object, after As Object
    Set before = Range("A1")
    Set after = Range("B1")
    
    before.Value = "侍" & vbLf & "エンジニア" & vbLf & "塾"
    after.Value = Replace(before.Value, vbLf, "")
End Sub

実行結果:
vbCrLf03

このサンプルコードでは、まずExcelシートのセルに「侍」、「エンジニア」、「塾」という文字列を改行して入力しています。セル中の改行ですので、改行コードはvbLfを使用しています。

次に入力した文字列をReplace関数を使って、改行コードvbLfを空文字(””)に変換して出力表示しています。

Trim関数では改行を削除できない?

Javaなどの言語では、trimメソッドを使うと改行コードを削除することができます。しかし、VBAのTrim関数は改行を削除することはできません。先ほどお伝えしたように、Replace関数を使う必要があります。

ちなみにですが、Trim関数の使い方については、こちらのサイトで詳しく解説しています。よろしければ参考にしてくださいね!

改行コードを変換する方法

改行コードを変換するにはこれまでお伝えしてきたように、Replace関数を使います。改行コードを「,」(カンマ)に変換する例についてご紹介します。

Sub macro3()
    Dim before As Object, after As Object
    Set before = Range("A1")
    Set after = Range("B1")
    
    before.Value = "侍" & vbLf & "エンジニア" & vbLf & "塾"
    after.Value = Replace(before.Value, vbLf, ",")
End Sub

実行結果:
vbCrLf05

Replace関数の使い方については、こちらのサイトで詳しく解説していますので、ぜひ参考にしてください。

改行コードで分割する方法

改行コードで文字列を分割して配列に格納する方法について説明します。文字列を分割して配列に格納する関数としてSplit関数があります。ただし、Split関数では分割する区切り文字は1文字と決まっています。

メッセージボックスなどでChr(13) + Chr(10)を改行コードとして使う場合は、2文字で区切ることになるので、このままではSplit関数は使えません。このような場合は、Replace関数を使って一旦別の一文字に変換した後で、Split関数を使って分割します。

Split関数は以下のように記述して使用します。

配列名 = Split(対象の文字列, 区切り文字)
Sub macro4()
    Dim arr() As String
    Dim msg As String, str As String
    msg = "侍" & Chr(13) + Chr(10) & "エンジニア" & Chr(13) + Chr(10) & "塾"
    
    str = Replace(msg, Chr(13) + Chr(10), "/")
    arr = Split(msg, vbCrLf)

    msg = msg & vbCrLf & str & vbCrLf
    For Each elm In arr
        msg = msg & elm & ","
    Next elm
    
    MsgBox msg
End Sub

実行結果:
vbCrLf04

このサンプルコードでは、String型変数msgに「侍」、「エンジニア」、「塾」という文字列を改行して入力しています。後々メッセージボックスで表示するので、改行コードにはChr(13) + Chr(10)を使用しています。

関数を使って改行コードChr(13) + Chr(10)を”/”に置換しています。その後、Split関数を使って区切り文字に”/”を指定して文字列を分割、配列arrに格納しています。配列arrの要素を出力表示すると、改行コードで分割されて配列に格納されていることがわかります。

なお、Chr(10)など1文字の改行コードを使う場合はもちろん、Replace関数を使って置換は行わずに、直接Split関数でChr(10)を区切り文字に指定し分割して構いません。

Split関数の使い方については、こちらのサイトで詳しく解説していますので、ぜひ参考にしてください。

改行コードを含むか検索して判定する方法

文字列内で改行コードを含んでいるかInStr関数で検索、判定する方法についてご紹介します。改行コードを含んでいればInstr関数は0より大きい値を返します。

サンプルコードで確認しましょう。

Sub macro5()
    Dim myRng As Object
    Set myRng = Range("A1")
    
    myRng.Value = "侍" & vbLf & "エンジニア" & vbLf & "塾"
    
    If InStr(myRng.Value, vbLf) > 0 Then
        MsgBox "改行コードが含まれます"
    End If
End Sub

実行結果:
vbCrLf06

InStr関数の使い方については、こちらのサイトで詳しく解説していますので、ぜひ参考にしてください。

まとめ

ここでは改行コードについて説明しました。セル中の文章の改行コードとメッセージボックスなどOSに依存する場合の改行コードが異なるので、注意が必要です。

使いこなすことができるように、この記事を何度も参考にして下さいね!

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次