3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

VBAのLine Input で改行コード(LF)が認識されない

あるC#アプリで、CSVファイル出力時に"\n"で改行を付け加えていました。

そのC#アプリで吐いたCSVを読み込む Excel のマクロを実行すと、C# で ¥n で付けてた改行が認識されません。

おかしいと思い、出力した CSVバイナリエディタでみると改行コードが、0x0A(LF)だけになってました。。

ExcelVBA ではファイルを OPEN した後、下記のコードで1行ずつ読んでいました。

Line Input #intFF, recode

この Line Input はどうやら改行コード LF を解釈してくれず、改行を認識するのに CR(0x0D) が必要らしいです。

なので C# 側で、改行を ¥r¥n とするか、Environment.NewLine プロパティを使う方法が取れるようです。

(Environment.NewLineだとUNIX 以外のプラットフォームでは "¥r¥n" を含む文字列で UNIX プラットフォームでは "¥n" を含む文字を表すらしい)

参考

DOBON.NET:改行、タブ文字などの定数

C#側も直すべきですが、VBA側も何とかしたいと思って調べてみました。

すると、「Line Input # ステートメント」の仕様 - 鳶秋の日記というブログを発見。

なるほど、LF で Split して配列化すればいいようです。

ファイルサイズが大きいと危険と書いてますが、今回はサイズ小さいので大丈夫でしょう。。

参考:

改行コードに注意|VBA (マクロ) 作法/コーディング規約 集約中 ~ メタボなプログラムにサヨナラしよう