【Excel VBA】セル内/MsgBox内/コード内での改行コードの使い分け方法を解説

  • 2024.09.19
       
【Excel VBA】セル内/MsgBox内/コード内での改行コードの使い分け方法を解説

改行コードとは

改行コードとは、文章の改行する位置に記述する、改行を指定する値を指します。プログラミング言語の種類によって文字列や定数は異なります。

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

定義済みの定数説明
vbCrChr(13)キャレッジリターン
vbLfChr(10)ラインフィード
vbCrLfChr(13) + Chr(10)キャリッジリターンとラインフィードの組み合わせ
vbNewLineChr(13) + Chr(10)
またはChr(13)
macOSではChr(13)
プラットフォームごとに値が変わる

セル内の文章やメッセージボックスなど、OSに依存する場合、改行コードが異なります。

たとえば、Windowsの場合はセル内の文章の改行コードはvbLf(char(10))であるのに対して、メッセージボックス内の文章の改行コードはvbCrLf(Chr(13) + Chr(10))を使います。

セル内の文章を改行する場合

セル内の改行コードには、「vbLf」または「char(10)」を使用します。

【実行コード】

Sub Test()
Dim myRng As Object
Set myRng = Range("A1")
myRng.Value = "テック" & vbLf & "マニア" & vbLf & "編集部"
End Sub

【実行結果】

Excelシートのセル内の「テック」、「マニア」、「編集部」という文字列を改行して表示しました。

メッセージボックス内の文章を改行する場合

メッセージボックス内の改行コードには、「vbCrLf」または「char(13) + char(10)」を使用します。

【実行コード】

Sub Test()
MsgBox "テック" & vbCrLf & "マニア" & vbCrLf & "編集部"
End Sub

【実行結果】

メッセージボックス内の「テック」、「マニア」、「編集部」という文字列を改行して表示しました。

コード内で改行する場合

コード内で改行する場合は「 _」(半角スペース+アンダースコア)を使用します。1行のコード量が少なくなり可読性が上がります。

【実行コード】

Sub Test()
MsgBox "テック" & _
       "マニア" & _
       "編集部"
End Sub

【実行結果】

改行コードの削除方法

改行コードを削除する場合はReplace関数を使用して改行コードを空文字(“”)に変換することで削除できます。

【基本形】

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

【実行コード】

Sub Test()
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シートのセル内の「テック」、「マニア」、「編集部」という文字列を改行して表示させた後、Replace関数を使って、改行コードvbLfを空文字(””)に変換しています。

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

Javaなどのプログラミング言語では、Trimメソッドを使って改行コードを削除できますが、VBAではTrim関数を使用しても改行を削除することはできません。Replace関数を使用する必要があります。

改行コードの変換方法

改行コードの変換にはReplace関数を使用します。例として、改行コードを「、」に変換します。

【実行コード】

Sub Test()
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

【実行結果】

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

改行コードで文字列を分割し、配列に格納する方法を紹介します。この場合、改行コードで文字列を分割し、配列に格納するSplit関数が使えそうですが、Split関数では分割する区切り文字は1文字です。しかし、メッセージボックスなどで「Chr(13) + Chr(10)」を改行コードとして使用する場合は、2文字で区切ることになるためSplit関数は使えません。こういった場合はReplace関数で一旦別の一文字に変換してからSplit関数で分割する必要があります。

【基本形】

配列名 = Split(対象の文字列, 区切り文字)

【実行コード】

Sub Test()
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)」を使用しています。

まず、Replace関数で「Chr(13) + Chr(10)」を”/”に置換してからSplit関数で区切り文字に”/”を指定し、文字列を分割、配列arrに格納しました。配列arrの要素を表示させると、改行コードで分割され、配列に格納されているのがわかります。

なお、Chr(10)など、1文字の改行コードを使う場合は直接Split関数を使用しても問題ありません。

改行コードを含むかを判定する方法

文字列内で改行コードを含むか調べるにはInStr関数を使用します。なお、改行コードを含む場合、Instr関数は0より大きい値を返します。

【実行コード】

Sub Test()
Dim myRng As Object
Set myRng = Range("A1")
    myRng.Value = "テック" & vbLf & "マニア" & vbLf & "編集部"
If InStr(myRng.Value, vbLf) > 0 Then
MsgBox "改行コードが含まれています"
End If
End Sub

【実行結果】

関連記事

VBAの勉強方法は?

書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。

ただ、VBAに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。

プログラミングスクールならテックマニアがおすすめ!

ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。

<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~

このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。

     

Otherカテゴリの最新記事