Excelが大好きだ!

Excel大好き経理マンがExcelの事を書き綴っていきます。


スポンサードリンク

ExcelとExcel VBAでの改行の違い

Excel VBAにおいて改行というと

vbCrLfvbLf が紹介されている。


これらの定数はどんな違いがあるのだろうか?

改行に関わる定数

定数 値(文字コード 内容
vbCrLf Chr(13) + Chr(10) キャリッジ リターンとライン フィードの組み合わせ
vbCr Chr(13) キャリッジ リターン文字
vbLf Chr(10) ライン フィード文字
vbNewLine Chr(13) + Chr(10)。Macintosh の場合は、Chr(13) プラットフォーム固有の改行文字。現在のプラットフォームに対応する文字が使用されます。

・キャリッジリターン・・・カーソルを文頭に戻す制御文字。正確には改行ではない。

・ラインフィード・・・カーソルを次の行の現在の行と同じ位置に移動する。


普通の感覚でいえば、上記のキャリッジリターンとラインフィードを組み合わせた挙動が改行のイメージではないだろうか。

つまり定数で言えば vbCrLFである。



定数による挙動の違い

定数 セル メッセージボックス Debug.Print
vbCrLf f:id:ExcelLover:20191222125903j:plain f:id:ExcelLover:20191222130139j:plain f:id:ExcelLover:20191222130259j:plain
vbCr f:id:ExcelLover:20191222130114j:plain f:id:ExcelLover:20191222130158j:plain f:id:ExcelLover:20191222130259j:plain
vbLf f:id:ExcelLover:20191222125903j:plain f:id:ExcelLover:20191222130221j:plain f:id:ExcelLover:20191222130259j:plain
vbNewLine f:id:ExcelLover:20191222125903j:plain f:id:ExcelLover:20191222130239j:plain f:id:ExcelLover:20191222130259j:plain
Alt + Enterで改行 f:id:ExcelLover:20191222125903j:plain

各定数がセルへの入力・メッセージボックスでの表示・Debug.Printでの表示でどのように挙動が変わるか調べてみた。


vbCrでセルへの入力以外はいずれも改行されて表示されている。

ということはvbCr以外の定数を使っておけば問題がないように見える。


そう、見た目は問題がないように見える。


文字コード

上記の5パターンそれぞれの文字コードを見てみる。

文字コードは便宜上1文字分毎にスペースを挿入している。

パターン 文字コード
文字A & vbCrLf & 文字B 65 13 10 66
文字A & vbCr & 文字B 65 13 66
文字A & vbLf & 文字B 65 10 66
文字A & vbNewLine & 文字B 65 13 10 66
文字A & Alt + Enter改行 & 文字B 65 10 66


1つ目のパターン65 13 10 16は下記のような意味である。

f:id:ExcelLover:20191222130650j:plain


この表で見るとAlt + EntervbLfと同じであることがわかる。


ではこの5パターンが入力されたセルに対して置換で改行を消してみたい。

Excelの置換で改行を指定するには Ctrl + J とすることで入力できる。

f:id:ExcelLover:20191222130625j:plain


では置換したあとの文字コードはどうなっているだろうか。

パターン(置換前) セル 文字コード(置換後)
文字A & vbCrLf & 文字B f:id:ExcelLover:20191222130452j:plain 65 13 66
文字A & vbCr & 文字B f:id:ExcelLover:20191222130452j:plain 65 13 66
文字A & vbLf & 文字B f:id:ExcelLover:20191222130452j:plain 65 66
文字A & vbNewLine & 文字B f:id:ExcelLover:20191222130452j:plain 65 13 66
文字A & Alt + Enter改行 & 文字B f:id:ExcelLover:20191222130452j:plain 65 66

いづれのパターンも見た目は改行が消えて思った通りの挙動をしているように見えるが、置換後の文字コードを見てみると、見た目には何も見えないがキャリッジリターンが消えずに残っている。


この状態でそれぞれのパターンから2文字目を抽出してみる。

パターン 2文字目
文字A & vbCrLf & 文字B
文字A & vbCr & 文字B
文字A & vbLf & 文字B B
文字A & vbNewLine & 文字B
文字A & Alt + Enter改行 & 文字B B

キャリッジリターンを含むパターンが空白なのは、抽出できていなのではなく文字コード13のキャリッジリターンを抽出している。


このことからセルに改行を書き込む際は vbLfを使うとAlt + Enterとの整合性が取れて上手く文字処理ができないということが減るのではないでしょうか。


まとめ

以上の検証からするとExcel VBAで使用する改行は vbLf の一択になりそうだが、vbCrLfが紹介されていることが多いのはなぜだろうか。


vbNewLineで表示されるのがvbCrLfであるようにWindowsのデフォルトがvbCrLfだからトラブル回避になるのだろうか。

取り敢えずセルへの書き込みは vbLfVBAでは vbCrLF を使用すれば良いでしょう。



その他の定数 | Microsoft Docs