• ベストアンサー

CSVファイルの読み込み

お世話になります。 VBAでCSVファイルを読み込んで処理をしたいのですが、 たとえば下記のようなCSVファイルの場合 2つめの項目が金額セットされており、あらかじめ通貨編集(カンマ編集) がされていて 金額を1つの項目として読み込む事が出来ません。 金額は""でくくってあるのですが、 カンマ区切りのデータと""でくくってあるデータを うまく区別して3つの項目をそれぞれ抽出する事は可能でしょうか? -----以下CSVの内容------ 日付,金額,データ 2007/03/09,"1,200",TEST1 2007/03/09,"12,200",TEST2 2007/03/09,"76,00",TEST3 2007/03/09,"4,5600",TEST4 --------------------------- ちなみに現在はこのようにカンマ区切り指定でデータを抽出してるので うまく出来ません。   'FileNameにはオープンするファイル名がセットされています   Open FileName For Input As   'textlineに1行を読み込む   Line Input #ch1, textline   csvline() = Split(textline, ",") VBAがまだ不慣れな為質問やサンプルが分かりずらいと思いますが よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#140971
noname#140971
回答No.1

Private Sub コマンド0_Click()   Dim I     As Integer   Dim J     As Integer   Dim N     As Integer   Dim M     As Integer   Dim strDatas() As String   Dim strItems() As String      strDatas() = FileReadArray("C:\TEMP\TEST.CSV")   N = UBound(strDatas())   For I = 0 To N     strItems() = Split(strDatas(I), ",")     M = UBound(strItems())     For J = 0 To M       Debug.Print strItems(J)     Next J   Next I End Sub [イミディエイト] 2007/03/09 "1 200" TEST1 2007/03/09 "12 200" TEST2 2007/03/09 "76 00" TEST3 2007/03/09 "4 5600" TEST4 という結果になります。 rivate Sub コマンド0_Click()   Dim I     As Integer   Dim J     As Integer   Dim N     As Integer   Dim M     As Integer   Dim strDatas() As String   Dim strItems() As String      strDatas() = FileReadArray("C:\TEMP\TEST.CSV")   N = UBound(strDatas())   For I = 0 To N     strDatas(I) = Replace(strDatas(I), ",""", "|")     strDatas(I) = Replace(strDatas(I), """,", "|")     strItems() = Split(strDatas(I), "|")     M = UBound(strItems())     For J = 0 To M       Debug.Print strItems(J)     Next J   Next I End Sub [イミディエイト] 2007/03/09 1,200 TEST1 2007/03/09 12,200 TEST2 2007/03/09 76,00 TEST3 2007/03/09 4,5600 TEST4 Public Function FileReadArray(ByVal FileName As String) As String() On Error GoTo Err_FileReadArray    Dim fso    As FileSystemObject    Dim strTexts() As String       Set fso = New FileSystemObject    strTexts() = Split(fso.OpenTextFile(FileName).ReadAll, vbCrLf) Exit_FileReadArray:    FileReadArray = strTexts()    Exit Function Err_FileReadArray:    MsgBox Err.Description & "(FileReadArray)", vbExclamation, " 関数エラーメッセージ"    strTexts() = Split("")    Resume Exit_FileReadArray End Function Microsft Scripting Runtime を参照・使用していますが、考え方は同じです。

rariko
質問者

お礼

ご回答ありがとうございました。 大変丁寧にどうもありがとうございました。 とても参考になりました。

その他の回答 (1)

  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.2

http://arrow3.way-nifty.com/shige/2005/06/vba_split_d3db.html はい。どーど。 完全に取り込みの形式が決まっているのなら、「"」で分割して、配列の2つ目に金額が入るのではないかと思います。

rariko
質問者

お礼

ご回答ありがとうございました。 参考になりました。 ちゃんともっと勉強しようと思います。

関連するQ&A