In Excel VBA, line‐break codes like vbCrLf
and vbLf
are special strings that insert row separators into text, controlling how it appears in cells and how it is read from or written to files.
覚えどころ
\r\n
(キャリッジリターン + ラインフィード)\n
(ラインフィードのみ)\r
(キャリッジリターンのみ)vbCrLf
Chr$(13) & Chr$(10)
MsgBox
やテキストファイル出力など、Windowsでの標準的な改行vbCr
Chr$(13)
vbLf
Chr$(10)
vbNewLine
vbCrLf
、UNIXならvbLf
)Chr$(10)
/ Chr$(13)
Application.International(xlRowSeparator)
xlColumnSeparator
)など他の国際化情報も取得できるので併用推奨VBAで、「vbCrLf」を使って、セルに値を入力してみます。
VBA
Sub test1()
'変数a を宣言
Dim a As String
'vbCrLf で改行
a = "aaa" & vbCrLf & "bbb"
'セルに入力
ActiveSheet.Cells(1, 1) = a
End Sub
セル内で改行することができました。
続いて、メッセージボックスでも改行してみます。
VBA
Sub test2()
'変数a を宣言
Dim a As String
'vbCrLf で改行
a = "aaa" & vbCrLf & "bbb"
'メッセージボックスへ出力
MsgBox a
End Sub
メッセージボックスでも改行できました。
VBAで、「vbLf」を使って、セルに値を入力してみます。
VBA
Sub test3()
'変数a を宣言
Dim a As String
'vbLf で改行
a = "aaa" & vbLf & "bbb"
'セルに入力
ActiveSheet.Cells(1, 1) = a
End Sub
セル内で改行することができました。
続いて、メッセージボックスでも改行してみます。
VBA
Sub test4()
'変数a を宣言
Dim a As String
'vbLf で改行
a = "aaa" & vbLf & "bbb"
'メッセージボックスへ出力
MsgBox a
End Sub
メッセージボックスでも改行できました。
VBAで、「vbCr」を使って、セルに値を入力してみます。
VBA
Sub test5()
'変数a を宣言
Dim a As String
'vbCr で改行
a = "aaa" & vbCr & "bbb"
'セルに入力
ActiveSheet.Cells(1, 1) = a
End Sub
「vbCr」では、セル内の改行をすることができませんでした。
続いて、メッセージボックスでも改行してみます。
VBA
Sub test6()
'変数a を宣言
Dim a As String
'vbCr で改行
a = "aaa" & vbCr & "bbb"
'メッセージボックスへ出力
MsgBox a
End Sub
メッセージボックスでは改行できました。
「vbCr」と「vbLf」を組み合わせると「vbCrLf」となります。
「vbCr」と「vbLf」を組み合わせて使ってセル内の改行をしてみます。
VBA
Sub test7()
'変数a を宣言
Dim a As String
'vbCr と vbLf で改行
a = "aaa" & vbCr & vbLf & "bbb"
'セルに入力
ActiveSheet.Cells(1, 1) = a
End Sub
セル内で改行することができました。
続いて、メッセージボックスでも改行してみます。
VBA
Sub test8()
'変数a を宣言
Dim a As String
'vbCr と vbLf で改行
a = "aaa" & vbCr & vbLf & "bbb"
'メッセージボックスへ出力
MsgBox a
End Sub
メッセージボックスでも改行できました。
「vbCr」と「vbLf」が「vbCrLf」と同じかを確認してみます。
VBA
Sub test9()
'変数a と 変数b を宣言
Dim a As String
Dim b As String
'変数a へ vbCr と vbLf を組み合わせて代入
a = vbCr & vbLf
'変数b へ vbCrLf を代入
b = vbCrLf
'変数a と 変数b が一致するか確認
If a = b Then
MsgBox "vbCr + vbLf と vbCrLf は一致します"
End If
End Sub
これにより vbCr と vbLf を組み合わせたものと、vbCrLfが同じものであることが確認できました。
セル内で改行したときの改行コードを確認してみます。
手入力をする際にセル内で改行したい場合は、「aaa」と入力後に「Alt + Enter」で改行し、続けて「bbb」と入力することでできます。
セル内で改行した時の改行コードは「vbLf」となります。
もちろん、改行コードは表示されないので見えませんから、VBAを使って確認してみます。
VBA
Sub test10()
Dim a As String
'セルの値を取得
a = ActiveSheet.Cells(1, 1).Value
'vbLfが含まれているかを確認
If InStr(a, vbLf) > 0 Then
MsgBox "vbLfが含まれています"
End If
'vbLfが含まれているかを確認
If InStr(a, vbCr) > 0 Then
MsgBox "vbCrが含まれています"
End If
'vbLfが含まれているかを確認
If InStr(a, vbCrLf) > 0 Then
MsgBox "vbCrLfが含まれています"
End If
End Sub
結果は「vbLfが含まれています」となりました。それ以外の「vbCr」や「vbCrLf」は含まれていません。なので、セル内の改行コードは「vbLf」となります。
セル内で改行した場合は「vbLf」が入力されますので、VBAで改行を扱う場合は「vbLf」を使うと良さそうです。
VBAで文字列を扱う場合や、メッセージボックス内で改行する場合に、とりあえず、改行コードは「vbLf」を使っておくという感じです。
Windowsのメモ帳で改行する場合の改行コードは「vbCrLf」となります。
これにはちょっと注意が必要となります。
エクセルで改行を使うときは、基本的に「vbLf」ですけれども、メモ帳などのテキストファイルでは「vbCrLf」が使われたりします。
メモ帳で改行したデータ(test.txt)を用意して、VBAで確認してみます。
上図のメモ帳で作ったデータをエクセルに取り込んでみます。
VBA
Sub test11()
'ファイルパスを設定
Dim FilePath As String
FilePath = ThisWorkbook.Path & "¥test.txt"
'テキストファイルの値を取得
With CreateObject("Scripting.FileSystemObject")
With .GetFile(FilePath).OpenAsTextStream
buf = .ReadAll
.Close
End With
End With
'セルに値を入力
ActiveSheet.Cells(1, 1) = buf
End Sub
改行された値を取得できましたが、見た目には改行コードの違いが分かりませんので、上記で使ったVBAを使って改行コードを確認してみます。
VBA
Sub test10()
Dim a As String
'セルの値を取得
a = ActiveSheet.Cells(1, 1).Value
'vbLfが含まれているかを確認
If InStr(a, vbLf) > 0 Then
MsgBox "vbLfが含まれています"
End If
'vbLfが含まれているかを確認
If InStr(a, vbCr) > 0 Then
MsgBox "vbCrが含まれています"
End If
'vbLfが含まれているかを確認
If InStr(a, vbCrLf) > 0 Then
MsgBox "vbCrLfが含まれています"
End If
End Sub
「vbLf」、「vbCr」、「vbCrLf」の全てが順番に表示されました。ということは、全ての改行コードを含んでる事を意味していますので、「vbLf」と「vbCr」を合わせて使うと「vbCrLf」になったことから考えても、この改行コードは「vbCrLf」であるということになります。
VBAで、「vbNewLine」を使って、セルに値を入力してみます。
VBA
Sub test12()
'変数a を宣言
Dim a As String
'vbNewLine で改行
a = "aaa" & vbNewLine & "bbb"
'セルに入力
ActiveSheet.Cells(1, 1) = a
End Sub
セル内で改行することができました。
続いて、メッセージボックスでも改行してみます。
VBA
Sub test13()
'変数a を宣言
Dim a As String
'vbLf で改行
a = "aaa" & vbNewLine & "bbb"
'メッセージボックスへ出力
MsgBox a
End Sub
メッセージボックスでも改行できました。