- ベストアンサー
VBAでExcelシートにCSVファイルのデータを取り込む方法
- VBAを使用して、ExcelシートにCSVファイルのデータを取り込む方法について教えてください。
- 現在、VBAでCSVファイルのデータを取り込もうとしていますが、1行目しか取り込めません。項目数は32個です。
- 提供されたコードでは、Excelシートの1行目のみが取り込まれ、2行目以下のデータは取り込まれていません。改行の判別に問題があるようです。アドバイスをお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
ANo.3は回答としては間違いですね。 すみませんでした。 まずは、バイナリエディタでそのcvsファイル改行コードを確認なされてはどうでしょうか。 ・改行コードがない output文の最後を";"で書いていると改行コードがありませんね ・改行コードが間違っている cr(13)あるいはcrlfでしたら認識するはずです lf(10)になっていませんか 改行コードがない場合は、単純に32個づつinput文で読めば良いと思います。 lfだったら一端バイナリで全てを読み込んで、lfをcrlfに変換して一時ファイルに書き出し、その一時ファイルを読み込む。 あるいはlfを検出してそこまでを一行として処理する。
その他の回答 (5)
- Wendy02
- ベストアンサー率57% (3570/6232)
>Open OpenFileName For Input Access Read As #1 コードは理解して載せていると思いますが、なぜ、シーケンシャル・アクセスしているのですか? シーケンシャル・アクセスするには、それなりの理由があるはずだと思うのです。 ただのCSVだけなら、 Open OpenFileName For Input As #1 だけで良いはずです。(と書いても、答えないかもしれませんが。) なお、一般的には、32列という勝手な予測ですから、 For j = 0 To 31 ↓ For j = 0 To UBound(MyString) だとは思います。 WinのCSVが一般的な内容なら、別にコード自体の問題ではありませんね。一通りの経験者のコードだから、それに文句つけたら、書いた人に悪いと思います。
- boro-pc
- ベストアンサー率30% (64/208)
ちゃんと動くみたいですよ 改行コードがまともなら ていうか >おそらく、改行が判別できないためかと思いますが これが推測できてこれだけ組めるなら次の行動もご自分でできると思うんですけど… 単純に元のCSVファイルの改行コードがLFになってるってことでしょ Line Inputでやるならどうやって変換するかってことだけ (この関数のなかでやってもよし、はたまたCSVファイル作るときにCRLFにしてもよし)
お礼
改行コードがlfになっていました。 crlfにreplaceしたら、うまくいきました! ありがとうございました。
- samtomsan
- ベストアンサー率55% (1060/1897)
下記でどうでしょうか。 MyVar = Split(MyString, ",",,vbTextCompare)
- nattocurry
- ベストアンサー率31% (587/1853)
CSVファイルなんですよね? XLSファイルをオープンするのと同じ要領で、 Workbooks.Open "xxx.csv" ではダメですか?
お礼
ファイルを開くだけならば、それでいいのですが… ありがとうございました。
- papapa0427
- ベストアンサー率25% (371/1472)
はじめまして If OpenFileName = "False" Then は If OpenFileName = False Then でしょう。読み込み部分ですが32列目まで表示されるのはjが31までループしてますね。j+1やってるので32列まで表示されると言うことです。ちなみにLine Inputは改行まで一行を全部読み込むコマンドですから、CVSファイルに改行がキチンと設定されているか確認してください。Line Inputで2行目のデータが表示されるのはおかしいです。下記のような方法もありますよ。 i = 1 While Not EOF(#1) Input #1, MyVar If MyVar <> "" Then ThisWorkbook.ActiveSheet.Cells(i + 10, 1) = MyVar For j = 2 To 31 Input #1, MyVar ThisWorkbook.ActiveSheet.Cells(i + 10, j) = MyVar Next j i = i + 1 End If Wend Close #1 データを一個ずつ読み込み方法です。
お礼
改行コードがlfになっていたようです。 これをcrlfに置換したら、うまくいきました。 ありがとうございました!
お礼
改行コードがlsになっていました。 >lfだったら一端バイナリで全てを読み込んで、lfをcrlfに変換して一時ファイルに書き出し、その一時ファイルを読み込む。 この方法でうまくいきました。 lfとcrlfの違いをよく理解できていなかったので、 大変勉強になりました。 ありがとうございました。