CSVファイルを一文字ずつ読み込む(VBA)


福銭ン  2010-01-19 13:57:15  No: 143080  IP: [192.*.*.*]

今、CSVファイルをoutlookに読み込ませるプログラムを組んでいます。CSVファイルの中身
"AAA","BBB","CCC"
"ooo","yyy","ppp"
"あああ","すすす","みみみ"
みたいなものを一文字ずつ取り込んでいこうと思っています。まず、ダブルクォーテーションかどうか、さらにそれが1つ目か2つ目かの判定をし、どちらでもなければ間のAAAを読み込むといったかんじです。初心者なのでどのように書いていいのか、またaryStrやchrの使い方がイマイチわかりません。どなたかお知恵をかしてください。。。

編集 削除
 2010-01-19 21:15:42  No: 143081  IP: [192.*.*.*]

ところで使っているVBはVB6?.net?

編集 削除
みいお  2010-01-20 15:01:01  No: 143082  IP: [192.*.*.*]

Dim ObjFileSystem  As Object
    Dim ObjFile        As Object
    Dim FileName    As String
    Dim StrBuff()   As String
    Dim colNumber As Integer
    Dim SyutokuBuff(100) As String
    Dim Yousobango As Integer
   
    ' 読み込むCSVファイル
    FileName = "c:\testfile.csv"
    
    Set ObjFileSystem = CreateObject("Scripting.FileSystemObject")
    Set ObjFile = ObjFileSystem.OpenTextFile(FileName)
  
   
    Do Until ObjFile.AtEndOfStream
        ' 1行分のデータを読み込み、カンマ毎に配列に保存
               
       
        StrBuff = Split(ObjFile.ReadLine, ",")
        
        For colNumber = 0 To UBound(StrBuff)
        
         'たとえば3列目のデータをそれぞれのレコードから取得する場合
           SyutokuBuff(Yousobango) = StrBuff(2)
        
        Next
    Yousobango = Yousobango + 1
    
    Loop
    
    
    
    ObjFile.Close
    
    Set ObjFileSystem = Nothing
    Set ObjFile = Nothing
   

End Sub

'あとは、必要なだけSyutokuBuff()の配列宣言の要素数を変えてください。
'聞きたかったのは、こういう事ですかね??

編集 削除
みいお  2010-01-20 15:09:03  No: 143083  IP: [192.*.*.*]

尚、データにカンマが含まれている場合は、これでは出来ませんので・・・。

編集 削除
Koz  2010-02-03 03:54:31  No: 143084  IP: [192.*.*.*]

自前で実装するのは結構きついので、ADO を使ってみては?

※ E:\TEMP\HOGE.CSV を読み込むものとします。

    Dim con As Object
    Dim rec As Object
    Dim f   As Object
    
    Set con = CreateObject("ADODB.Connection")
    With con
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .Properties("Extended Properties") = "text;HDR=No;FMT=Delimited;"
        .Open "E:\TEMP"
    End With

    Set rec = CreateObject("ADODB.Recordset")
    rec.Open "SELECT * FROM HOGE.CSV", con
    Do Until rec.EOF
        For Each f In rec.Fields
            Debug.Print f.Value
        Next
        Debug.Print
        rec.MoveNext
    Loop
    
    rec.Close
    con.Close
    
    Set rec = Nothing
    Set con = Nothing

この方法のいいところは、「,」や、「"」が混じっていてもきちんと読み込めることです。

例) 左がCSV上、右がフィールド値になります。

"1,234" → 1,234 
"a""b""c" → a"b"c

編集 削除