セル内やMsgBox内で改行をしたい
VBAマクロでセル内の文字列の改行/Msgbox内で改行を行う場合です。
改行には以下の種類があります。改行コードの違いはこちらの記事を参照してください。
定数 | 値 |
---|---|
vbCr | Chr(13) |
vbLf | Chr(10) |
vbCrLf | Chr(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分がゴミとなり、置換時にデータ取得できない場合がある
(テキストエディタも関係します)
・セル内改行にCrLfで反映するとCr分がゴミとなり、置換時にデータ取得できない場合がある
本当は適材適所の使い方をしないといけないですが、
私はテキスト出力などWindows関連でデータを使う場合が多いのでvbCrlfで統一しています。
改行を挿入する場所 | 定数 | 備考 |
セル内の文字列 | vbLf | 本来vbLfだが、vbCrlfで私は代用する |
Msgbox | VbCrLf | |
テキストデータへ出力 | VbCrLf |
関連記事
改行コードの違い「CR」と「LF」と「CRLF」
文字コードで文字列を取得する【Chr関数】【ChrW関数】【ExcelVBA】
ダブルクォーテーションを文字列に簡単に入れたい【Chr(34)】
文字列の長さを取得する【Len関数】【LenB関数】【ExcelVBA】
コメント