【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に依存する場合の改行コードが異なるので、注意が必要です。

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

この記事を書いた人

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
info@sss-lab.com

目次