- ベストアンサー
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がまだ不慣れな為質問やサンプルが分かりずらいと思いますが よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
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 を参照・使用していますが、考え方は同じです。
その他の回答 (1)
- STICKY2006
- ベストアンサー率29% (1536/5269)
http://arrow3.way-nifty.com/shige/2005/06/vba_split_d3db.html はい。どーど。 完全に取り込みの形式が決まっているのなら、「"」で分割して、配列の2つ目に金額が入るのではないかと思います。
お礼
ご回答ありがとうございました。 参考になりました。 ちゃんともっと勉強しようと思います。
お礼
ご回答ありがとうございました。 大変丁寧にどうもありがとうございました。 とても参考になりました。