- ベストアンサー
エクセルのCSV読み込みについて
- エクセル上にマクロ実行ボタンを作成し、任意のCSVファイルをエクセルに取り込み利用する目的です。
- 実行ボタンを押すと、エラーメッセージが表示されて処理が止まってしまいます。
- データは正しく取り込まれているようなので、エラーを回避する方法がわかりません。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> お恥ずかしい話ですが,記述は,ネットのものを参考にしたものでありあまり理解できていません。 ファイルの最後まで7個ずつデータを読み込んでおるわけですが、データが15個だった場合、最後に1個しかデータがないのに7個読もうとしてエラーになります。 > もし,可能でしたら具体的な記述をご教示いただけないかと思います。 CSVファイルの中身がどうなっているのかわからないので以下の変更で正しく動くかどうかは不明ですが 2番目に回答した http://www.moug.net/tech/exvba/0060086.html を参考にして Line Input を利用した例です。 Dim X(1 To 7) As Variant ' 読み込んだレコード内容 ' (1) ↓変更 Dim X As Variant ' 読み込んだレコード内容 ' (1) 追加 Dim buf As String コードのこの部分を レコードを読み込む(このサンプルは7項目のCSV) Input #intFF, X(1), X(2), X(3), X(4), X(5), X(6), X(7) ' (2) ' 行を加算しA~G列にレコード内容を表示(先頭は2行目) GYO = GYO + 1 Range(Cells(GYO, 1), Cells(GYO, 7)).Value = X ' 配列渡し ' (3) Loop 以下に変更します。 ' レコードを読み込む Line Input #intFF, buf X = Split(buf, ",") ' 行を加算しA~G列にレコード内容を表示(先頭は2行目) GYO = GYO + 1 Range(Cells(GYO, 1), Cells(GYO, UBound(X) + 1)).Value = X ' 配列渡し ' (3) Loop ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
その他の回答 (4)
- kkkkkm
- ベストアンサー率66% (1719/2589)
No3の具体例として 1,2,3,4,5,6,7 8,9,10,11,12,13,14 15 ↑こんなデータの場合元のコードでエラーになります。 また 1,2,3,4,5,6,7 8,9,10,11,12,13,14 ,15,,,,, ↑こんなデータの場合、元のコードだと最後の改行がないとエラーになります。No4さんと逆ですね。 1,2,3,4,5,6,7 8,9,10,11,12,13,14 ↑こんなデータだと改行は関係なく元のコードでもエラーになりません。 ちなみに、どのデータでもNo3のコードに変更すればエラーにはなりません。ただし2013の結果です。
- piroshi999
- ベストアンサー率24% (31/129)
私もこれは上手く処理できませんでした。 多分CSVの最後が改行されているのが原因 データ1,データ2,・・・,データ7(改行) データ1,データ2,・・・,データ7(改行) データ1,データ2,・・・,データ7(改行) (先頭) こういうふうになっているとエラーになります。 データ1,データ2,・・・,データ7(改行) データ1,データ2,・・・,データ7(改行) データ1,データ2,・・・,データ7 ←ここの改行をとるとうまくいく。 つまりデータ7の最後にEOFが来るようにしないといけません。 直すにはデータを直したほうが早いかも。 コードを直すとしたら、他の方のlineinputもいいけど、最後の行の処理をしないといけなくなります。 そうじゃなければファイの行を数えてその分までループさせるとかかな。 特に細かいことを気にしないなら、私がやっている方法ですがエラー時に飛ばしちゃう方法もあります。 Input #intFF, X(1), X(2), X(3), X(4), X(5), X(6), X(7) ' (2) On Error GoTo ReadExit ' 行を加算しA~G列にレコード内容を表示(先頭は2行目) GYO = GYO + 1 Range(Cells(GYO, 1), Cells(GYO, 7)).Value = X ' 配列渡し ' (3) Loop ReadExit: ' 指定ファイルをCLOSE Close #intF
お礼
大変参考になりました。 処理も行うことができました。 大変感謝しています。
- kkkkkm
- ベストアンサー率66% (1719/2589)
No1です。 以下のページを参考にしてLine Input を利用してみてはいかがでしょう。 http://www.moug.net/tech/exvba/0060086.html
- kkkkkm
- ベストアンサー率66% (1719/2589)
コード自体は問題がないようですので、読み込むCSVファイルのデータが7の倍数じゃないのではないでしょうか。
補足
kkkkkm様 ご回答いただきありがとうございます。 お恥ずかしい話ですが,記述は,ネットのものを参考にしたものでありあまり理解できていません。 もし,可能でしたら具体的な記述をご教示いただけないかと思います。 わがままばかりで申し訳ありません。 どうかよろしくお願いいたします。
お礼
お礼が遅くなり申し訳ありません。 大変参考になりました。 処理もおかげさまでうまくいきました。 本当にありがとうございました。