t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

VBA 改行コードにまつわる話 ~vbCrLfとは

f:id:t-hom:20160206134232j:plain
VBAで文字列を改行する方法はいくつかあるが、ネットのサンプルなどで一番多いのはvbCrLfだろう。

Wikipediaによると、CrLfとはタイプライター時代の用語(キャリッジリターン・ラインフィード)の略らしい。
タイプライターはタイプするたびに印字装置が左から右に移動する。

紙の右端まできたら、印字装置を左端に戻す処理=キャリッジリターンと、次の行をタイプするために紙を少し上に送る処理=ラインフィードが必要になる。
これがつまり、タイプライターの改行処理で、デジタル化された現在でもWindowsはCRとLFの2文字とも改行コードに採用しているというわけだ。

ちなみに昔のMacではCRのみ、UnixLinux・最近のMac OS XなどではLFのみを改行コードとして採用している。

したがって、VBAで使用するのはvbCrLfかvbLfの2種類ということになる。
さらに、環境によって自動で改行コードが選択されるvbNewLineというのもある。
私は主にvbNewLineを使用しているが、使い分けが必要になるシーンもある。

例えば、改行入りの文字列をセルに入れるようなマクロの場合だ。
ややこしいのは、WindowsでもExcelのセル内でAlt+Enterで改行した場合は、LFが入るということ。
VBAを使えばセル内改行としてCrLfを入れることも可能だが、手動の改行と混じると後で置換したいときなどにバグの元になる。
セル内に使用する文字列は、vbLfを使おう。

すでにLfとCrLfが混じっている可能性があるファイルに対しては、いったんCrLfを全てLfに置換してから処理するとうまくいく。


これ以外の改行方法として、サンプルによっては、Chr(13) & Chr(10)などと書いているものもある。
これは改行コードを文字コードとして指定しているだけのことで、実質vbCr + vbLfと変わらない。

次のコードを実行してみると分かる。

Debug.Print Asc(vbCr)
Debug.Print Asc(vbLf)

まあ、ふつうはvbNewLineだけ覚えておけば事足りるのだが、まれにUnixサーバーのログをマクロで取り込んだりするときに改行コード回りの知識も必要になるので今回さらっと紹介してみた。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。