「Line Input # ステートメント」の仕様

備忘録として。

シーケンシャル入力モード (Input) で開いたファイルから行全体を読み込み、文字列型 (String) の変数に代入するファイル入出力ステートメントです。
([Microsoft Visual Basic のヘルプ]より)

Excelでマクロを組むときによく使います。
で、時々困ることがあるのが↓の仕様。

Line Input # ステートメントは、ファイルからキャリッジ リターン (Chr(13)) または改行コード (Chr(13)) + Chr(10)) の直前までのすべての文字を読み込みます。
(同上)

つまりLF(Chr(10))は改行コードとして認識してくれないんですね。
ところがLinix上で作成されたファイルは、特に指定しない限りLFを改行コードとして使用します。
そういうファイルをこの方法で扱うと、ファイル全体を1行として取り込んでしまうのです。
仕方がないので↓のような方法で、まずは行単位に分割してから処理する必要があります。

Dim strData as String
Dim varTemp as Variant

Open "C:\hoge.txt" For Input As #1
Line Input #1, strData     
varTemp = Split(strData, Chr(10))

ただし、この方法には欠点があります。
ファイルが巨大だった場合、メモリに収まらずにエラーとなってしまうのです。*1
こうなるとVBAだけで対応するのは難しく、事前にファイルの改行コードを変換しておくしかありません。
場合によっては運用上の問題点となってしまうので、可能ならばファイルを作成する段階でCR+LFにしておいた方が良いです。

*1:多分。実際に試したことはない。