- ベストアンサー
Excelで作成されたCSVのVBでの読み込み
いつもお世話になっております。 Excel2K、2002を使用しております。 Excelで作成されたCSVファイルをVBAで読み込もうと、以下の関数を作成しました。 Public Function CsvRead(ByVal FileName As String) Dim IntFileNum As Integer 'ファイル番号 Dim TmpStr As String ' IntFileNum = FreeFile Open FileName For Input As #IntFileNum 'CSVファイルのオープン Do Until EOF(IntFileNum) Input #IntFileNum, TmpStr ' '~その他の処理~ ' Loop Close End Function その他の処理中で特定の列に対し、特殊な処理を行う必要があるのですが ExcelでCSVファイルを作成する場合、16行単位でカンマの変動が起こりえますので、 http://support.microsoft.com/default.aspx?scid=kb%3Bja%3B400253 正確な列が取れません。 そこで1行読み込んでカンマで分解すればよいかと思い、 以下のように読み込んでみたのですが、、 Dim TmpStr() As String ' Dim LineStr As String IntFileNum = FreeFile Open FileName For Input As #IntFileNum 'CSVファイルのオープン Do Until EOF(IntFileNum) Line Input #IntFileNum, LineStr TmpStr = Split(LineStr, ",") ' '~その他の処理~ ' Loop 値にカンマが存在する場合も区切ってしまうので これも正しく取れませんでした。 値のカンマは区切り文字として判定せず、 正しく値を取得するにはどのようにすればよいでしょうか。 上記のことをふまえた判定をすべて行うしかないでしょうか。 ご教授のほど、よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
どうしてもCSVで保存する必要がありますか? 「テキスト(タブ区切り)」で保存して、タブで切り分けてはどうでしょうか? 下記の例では、TmpStrにダブルクォーテーションが含まれますので、必要なら調整してください。私、 日曜プログラマなもので、Splitの使い方がわからず、以下のようになりました。 Do While InStr(LineStr, vbTab) TmpStr = Left(LineStr, InStr(LineStr, vbTab) - 1) LineStr = Mid(LineStr, InStr(LineStr, vbTab) + 1) MsgBox "[LineStr]" & LineStr & "/" & vbCr & vbLf & "[TmpStr]" & TmpStr & "/" 'デバッグ用 Loop
その他の回答 (3)
- arata
- ベストアンサー率49% (139/279)
Accessで取り込むことが前提なら、ExcelシートをAccessへインポートしてしまっては?
お礼
ご回答いただき、ありがとうございます。 結局、AccessからOLEでExcelを起動し、 CSVをExcelから開いて、各項目を読み込む 方法をとらせていただきました。 作業テーブルを使用せず、各項目を解析した後に テーブルへ格納するという処理が必要でしたので 当該方法では対応しませんでした。 ありがとうございました。
- imogasi
- ベストアンサー率27% (4737/17069)
私がやって見ると、 (1)文字列データの中に、カンマがあると "asd,wer"のようにダブルクオーテーションで囲んでくれる ようですのでそれを踏まえてプログラムを作るか (2)エクセルで、PRN形式で保存し(直し)て、各列の桁数が揃うのを利用するかのどちらかではないでしょうか。
お礼
ご回答いただき、ありがとうございます。 結局、AccessからOLEでExcelを起動し、 CSVをExcelから開いて、各項目を読み込む 方法をとらせていただきました。 ただきましたご回答、参考になりました。 落ち着いたら試してみたいと思います。 ありがとうございました。
- arata
- ベストアンサー率49% (139/279)
タブで保存しても、データにタブがあったら・・・って冗談は置いておいて PHDRさんご提案のタブ区切りでOKだと思いますが、それ以前に、元のExcelシートを直接VBAで操作しないのは何故でしょうか? データを別形式で保存するよりは、確実ではないですか?
お礼
早々のご返答、ありがとうございます。 厳密に言えば、Excelで作成されたCSVを Accessで作成したシステム上でテーブルに取り込む 必要があるのです。 最終手段として、 OLEでExcelを起動して、取り込むことを検討しております。
お礼
早々のご返答をくださり、ありがとうございます。 #2様のデータにTABがあながち間違いでもなく、 テキストエディタで編集された場合も 発生しうる為、ちょっと当該方法では難しいかもしれませんが、 当該方法も含め検証させていただこうかと思います。