- 締切済み
LINE INPUT # の動作がExcel2002と2003で異なる
お世話になります。 色々な実行環境があるので苦労しています。 Excel2003とExcel2002で"LINE INPUT #"の動作が異なります。 (どちらもWindowsXpSp3上で動いています) VBAでプログラムを書き、それぞれ(2003,2002)で動かしています。 読み込みファイルはCSV(行区切りは「0x0A])です。 このCSVファイルを"LINE INPUT #"で読み出すと、 Excel2003:「0x0A]を区切りに行単位でリードされる。 Excel2002:「0x0A]は無視されCSVファイル全体がリードされる。 コードは --------------- dim strLineBuffer as String ファイルオープン Line Input #1, strLineBuffer --------------- のような感じです。 ヘルプとかには「"LINE INPUT #"は「0x0A]は無視される」との 記載が多いですが、今、直面している場面では、 『「0x0A]は無視される』ものと『「0x0A]は無視されない』ものがあります。 とりあえずは、 FileSystemObjectのReadFile.readline で2003も2002も同じ動作になりましたので、それを使用しています。 質問は、 「Excel2003とExcel2002で"LINE INPUT #"の動作が異なります。」が本当なのかどうなのかという点です。 開発環境によって色々なパッチやアップデートが行われているような状況です(把握しきれません)。 経験された方、情報をお持ちの方、よろしくお願します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- winarrow07
- ベストアンサー率41% (143/346)
>エクセル2003同士での挙動が違うのではなく、2002と2003で挙動が違います。 いやいやいや。。。。。。 私のエクセル2003とあなたのエクセル2003の挙動が違うと言ってるのですよ? あなたのエクセル2003では Excel2003:「0x0A]を区切りに行単位でリードされる。 なんですよね? 私もエクセル2003で試したけど、 0x0Aではファイル全体が読み込まれましたけど、と 言っているのです。大丈夫ですか? せっかく回答しているのに伝わってない気がして悲しいです。残念です。 もう、改行コードの件を「市販の特殊なソフトウェア」のメーカに問い合わせてみては?改行コードが0Aになってるんですけどって。
- winarrow07
- ベストアンサー率41% (143/346)
>バイナリーエディターで何度も確認しました。 0Aの前に0Dがあれば、それは0D0Aなのですがそうはなっていないと いうことですよね? うーん。エクセルで適当なデータを作ってcsv保存しても改行コードは 0D0Aでしたし、メモ帳で作っても0D0Aだったんですけどね。。 どうすれば0Aになるのかが分かりませんね。 0D0AになればLINE INPUT #でも取り込めると思うのですが。。 あと気になるのは >Excel2003:「0x0A]を区切りに行単位でリードされる。 てとこですが、私の場合バイナリエディタで改行コードを0Aにして試したら CSVファイル全体が読み込まれました。(行単位で読まない) 同じexcel2003でも挙動が違うのは不可解です。 ちなみにコードは下記で試しました。参考までに。 Sub test() Dim buf As String Open "c:\work\aaa.txt" For Input As #1 Do Until EOF(1) Line Input #1, buf MsgBox buf Loop Close #1 End Sub
補足
少し説明不足でした。 エクセルからCSVファイルを出力しているのではなく、他の計測ツールというかそんなもの(仕事で使っている市販の特殊なソフトウェア)が出力するCSVファイルです。 エクセル2003同士での挙動が違うのではなく、2002と2003で挙動が違います。 プログラムは書かれているものと同じです。
- winarrow07
- ベストアンサー率41% (143/346)
excel2003で試してみました。(2002は持ってないので試してません。) 改行コードが0A(0x0A)の場合、無視されました(ファイル全体取り込まれた)。 ↑おっしゃっている現象と違いますね。 改行コードが0D(0x0D)の場合、行単位で読み込みました。 改行コードが0D0A(0x0D 0x0A)の場合、行単位で読み込みました。 お使いのcsvの行区切りは0x0Aとのこと。UNIXのシステムかなんかから吐き出されたデータですか?windowsで作成したものだと基本的に0x0D 0x0Aになると思います。 もう一度改行コードを確認してみてはどうでしょうか。 もし本当に0x0Aであれば改行コードを変換したほうがいいのではないでしょうか?
補足
早速の回答、ありがとうございます。 >お使いのcsvの行区切りは0x0Aとのこと。UNIXのシステムかなんかから吐き出されたデータですか? Windowsなんですけれど・・・ >もう一度改行コードを確認してみてはどうでしょうか。 バイナリーエディターで何度も確認しました。 改行コードの変換も考えたのですが、「できれば、あまり前処理に時間をかけたくない、手間をかけたくない。」等の理由で見送りました。
お礼
>私のエクセル2003とあなたのエクセル2003の挙動が違うと言ってるのですよ? あっ、そういうことですか。 同じ2003で挙動が違うと言うことなんですね。 2002と2003の違いだけではないんですね。 ありがとうございました。 色々なパッチ当てや、使う人(PC)によってOCX等々の状態が違うようなので・・・ とりあえずは、FileSystemObjectで同じ動作になっているようなので、こちらを使用します。 なかなか難しいものですね。