改行コードって使ってますか?
シートのセル中で文章を改行したり、メッセージボックスで表示する文章を改行したい場合ってありますよね。
この記事では、改行コードについて
- 改行コードとは
- セル内の改行コード
- MsgBox内での改行コード
- コード内での改行コード
- 改行コードを削除する方法
- 改行コードを変換する方法
- 改行コードで分割する方法
- 改行コードを含むか検索して判定する方法
など基本的な内容から応用的な使い方まで解説していきます。今回は改行コードについて、使い方をわかりやすく解説します。
改行コードとは
改行コードとは、文章中の改行したい位置に記述する改行を表す値のことです。プログラミング言語によってそれぞれ、あらかじめ決められた文字や文字列、もしくは定義済みの定数などです。
VBAで定義されている改行コードを表にまとめました。
定義済みの定数 | 値 | 説明 |
---|---|---|
vbCr | Chr(13) | キャレッジリターン |
vbLf | Chr(10) | ラインフィード |
vbCrLf | Chr(13) + Chr(10) | キャリッジリターンとラインフィードの組み合わせ |
vbNewLine | Chr(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
実行結果:
このサンプルコードでは、Excelシートのセルに「侍」、「エンジニア」、「塾」という文字列を改行して入力しています。セル中の改行ですので改行コードはvbLfを使用しています。
MsgBox内での改行コード
セル中の改行コードには、vbCrLf(char(13) + char(10))を使用します。サンプルコードを確認しましょう。
Sub macro2() MsgBox "侍" & vbCrLf & "エンジニア" & vbCrLf & "塾" End Sub
実行結果:
このサンプルコードでは、メッセージボックスに「侍」、「エンジニア」、「塾」という文字列を改行して入力しています。メッセージボックスでの改行なので、改行コードはvbCrLfを使用しています。
コード内での改行コード
ここでコード内の記述を改行する方法についてお伝えしておきます。1行の記述が長くなり、見にくくなる場合に「 _」(「半角スペース」+「アンダースコア」)を使って改行します。
サンプルコードで確認しましょう。
Sub macro2() MsgBox "侍" & vbCrLf & _ "エンジニア" & vbCrLf & _ "塾" End Sub
実行結果:
このサンプルコードでは、先ほどのサンプルコードを「 _」(「半角スペース」+「アンダースコア」)を使って改行して記述しています。
改行コードを削除する方法
改行コードが入っているけど、それを削除したいという場合もあります。そんな場合は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
実行結果:
このサンプルコードでは、まず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
実行結果:
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
実行結果:
このサンプルコードでは、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
実行結果:
InStr関数の使い方については、こちらのサイトで詳しく解説していますので、ぜひ参考にしてください。
まとめ
ここでは改行コードについて説明しました。セル中の文章の改行コードとメッセージボックスなどOSに依存する場合の改行コードが異なるので、注意が必要です。
使いこなすことができるように、この記事を何度も参考にして下さいね!