用途
【Open For Input】
・一番簡素で早くしたいとき
・行数を把握できるとき ※配列の要素数を事前に設定必要のため
・文字コードがSJISのとき
・カンマ区切りのとき
・値の途中にカンマがないとき、または"囲みのとき 例."あ,い"はOK、'あ,い'はNG
・配列に保持したいとき
【ADO】
・RecordSetに保持したいとき
・SJIS以外のとき(schema.iniを使用)
・カンマ区切り以外のとき(schema.iniを使用)
・Select文使いたいとき(読み込み時)
・Filter/Sort使いたいとき(読み込み後)
・外部ファイルで読み込み設定を管理したいとき
・値の途中にカンマがないとき、または"囲みのとき 例."あ,い"はOK、'あ,い'はNG
【QueryTable】
・CSVの内容をセルにそのまま貼り付けたいとき
・SJIS以外のとき
・カンマ区切り以外のとき
・値の途中にカンマがあるとき 例. "あ,い"、'あ,い'もOK
OpenForInput
Type typPerson id As String name As String age As String End Type Sub Test() Dim arry(20) As typPerson 'CSVの行数を指定 Dim i As Long: i = 0 Dim fullPath As String fullPath = "C:\Users\user\Desktop\新しいフォルダー (2)\加藤.csv" Open fullPath For Input As #1 Do Until EOF(1) Input #1, _ arry(i).id, _ arry(i).name, _ arry(i).age i = i + 1 Loop Close #1 End Sub
ADO
schema.iniを使用しない場合
・SJISのみ
・データ形式が自動で判定される ※"囲みの場合は文字列(memo)判定
・"囲みじゃない場合は使わないほうがいいかも…数値の前ゼロ消える
Sub Test() Dim rs As New ADODB.Recordset Dim cn As New ADODB.Connection Dim path As String Dim fileName As String path = "C:\Users\user\Desktop\新しいフォルダー (2)" fileName = "加藤.csv" cn.Provider = "Microsoft.ACE.OLEDB.12.0" cn.Properties("Extended Properties") = "Text;HDR=Yes" 'HDR…1行目がヘッダーか cn.Open path rs.Open fileName, cn, Options:=adCmdTableDirect '1件ずつ処理 Do While Not rs.EOF Debug.Print rs("id") & ", " & rs("name") & ", " & rs("age") rs.MoveNext Loop 'セルに貼り付け rs.MoveFirst Sheets(1).Range("A1").CopyFromRecordset rs End Sub
schema.iniを使用する場合
・iniファイルはCSVと同じフォルダに入れる ※自動で読み込まれる
・SJIS以外可能
・データ形式選べる
Sub Test() Dim rs As New ADODB.Recordset Dim cn As New ADODB.Connection Dim path As String Dim fileName As String path = "C:\Users\user\Desktop\新しいフォルダー (2)" fileName = "加藤.csv" cn.Provider = "Microsoft.ACE.OLEDB.12.0" cn.Properties("Extended Properties") = "Text;HDR=Yes" 'HDR…1行目がヘッダーか iniファイルが優先 cn.Open path rs.Open fileName, cn, Options:=adCmdTableDirect 'select文を使用する場合 ' Dim sql As String ' sql = "select * from 加藤.csv where id = '1'" ' rs.Open sql, cn '1件ずつ処理 Do While Not rs.EOF Debug.Print rs("id") & ", " & rs("name") & ", " & rs("age") rs.MoveNext Loop 'セルに貼り付け rs.MoveFirst Sheets(1).Range("A1").CopyFromRecordset rs End Sub
schema.ini
;■CSVファイル名 [加藤.csv] ;■区切り文字 ;カンマ区切り Format=CSVDelimited ;タブ区切り ;Format=TabDelimited ;固定長 ;Format=FixedLength ;■文字コード ;SJIS CharacterSet=932 ;UTF-8 ;CharacterSet=65001 ;■ヘッダー有無 trueでヘッダーあり ColNameHeader=true ;■データ形式の自動判定文字数 MaxScanRows=12 ;■データ形式の手動設定(優先) Col1=id Long Col2=name Text Col3=age Memo ;※固定値の場合 Col1=id Long 5 Col2=name Text 10 Col3=age Memo 5 ;備考 ;Text=文字列 255文字まで ;Memo=文字列 65,536?文字まで ;※複数入力可能 ;■CSVファイル名 [加藤2.csv] 省略...