_基本

セル内で改行/MsgBox内で改行をする【vbCr/vbLf/vbCrLf】【ExcelVBA】

セル内やMsgBox内で改行をしたい

VBAマクロでセル内の文字列の改行/Msgbox内で改行を行う場合です。
改行には以下の種類があります。改行コードの違いはこちらの記事を参照してください。

定数
vbCrChr(13)
vbLfChr(10)
vbCrLfChr(13) + Chr(10)

改行のサンプルコード

Public Sub sample()

    '■セル内改行を定数で表す場合
    Range("A1") = "a" & vbCr & "b"      '改行されない(CrはExcelでは改行コードではない)
    Range("A2") = "a" & vbLf & "b"      '改行される
    Range("A3") = "a" & vbCrLf & "b"    '改行される(CrとLfなので結果改行される)
    
    '■セル内改行を値で表す場合
    Range("B1") = "a" & Chr(13) & "b"           'vbCr
    Range("B2") = "a" & Chr(10) & "b"           'vbLf
    Range("B3") = "a" & Chr(13) + Chr(10) & "b" 'vbCrLf
    
    '■改行文字の文字数チェック
    Debug.Print Len(Range("A1").Value)  '3  aとbとCrで3byte
    Debug.Print Len(Range("A2").Value)  '3  aとbとLfで3byte
    Debug.Print Len(Range("A3").Value)  '4  aとbとCrとLfで4byte(Crの文字はゴミとして残る)
    
    '■メッセージボックスの改行の場合
    MsgBox "a" & vbCr & "b"     '改行される
    MsgBox "a" & vbLf & "b"     '改行される
    MsgBox "a" & vbCrLf & "b"   '改行される

End Sub

どの改行コードを使えばいいの?vbCrLfと考える

複数あって厄介なのが、
Windowsは改行をCrLfで処理をしますが、
Excelのセル内の改行はLfで処理をします。

厄介な理由は以下。

・テキストファイルへ改行をLFで出力後、Windowsで開くと改行されない場合がある
(テキストエディタも関係します)
・セル内改行にCrLfで反映するとCr分がゴミとなり、置換時にデータ取得できない場合がある

本当は適材適所の使い方をしないといけないですが、
私はテキスト出力などWindows関連でデータを使う場合が多いのでvbCrlfで統一しています。

改行を挿入する場所定数備考
セル内の文字列vbLf本来vbLfだが、vbCrlfで私は代用する
MsgboxVbCrLf
テキストデータへ出力VbCrLf

 

関連記事

改行コードの違い「CR」と「LF」と「CRLF」
文字コードで文字列を取得する【Chr関数】【ChrW関数】【ExcelVBA】
ダブルクォーテーションを文字列に簡単に入れたい【Chr(34)】
文字列の長さを取得する【Len関数】【LenB関数】【ExcelVBA】

コメント

タイトルとURLをコピーしました