人気ブログランキング | 話題のタグを見る
VBAのLine Input で改行コード(LF)が認識されない

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

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

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

Excel の VBA ではファイルを 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 (マクロ) 作法/コーディング規約 集約中 ~ メタボなプログラムにサヨナラしよう
by jehoshaphat | 2010-04-26 00:37 | VBA、マクロ


<< Windows7 x64 での... (.Net)フォームを非表示で... >>