投稿日 | : 2002/11/06(Wed) 23:02 |
投稿者 | : 魔界の仮面弁士 |
Eメール | : |
URL | : |
タイトル | : ADOを使うなら |
ADOを使って、そのCSVファイルをデータベースのように扱うこともできます。
=================================
Option Explicit
Private Sub Command1_Click()
'これは、実験用のcsvファイルを作成するだけです。
Dim FNo As Integer
Dim Dt As String
Dim I As Long
Randomize
FNo = FreeFile()
Open "C:\USER\TEST.CSV" For Output As #FNo
Write #FNo, "日付", "値"
For I = 1 To 5000
Dt = Format(DateSerial(2002, 1, I), "yyyy-mm-dd")
Write #FNo, Dt, Int(Rnd() * 1000)
Next
Close #FNo
End Sub
Private Sub Command2_Click()
'こちらが実際の処理。データシェイプを利用して算出する例です。
Dim Cn As ADODB.Connection
Dim rsCSV As ADODB.Recordset
Dim rsCalc As ADODB.Recordset
Dim SQL As String
Set Cn = New ADODB.Connection
Cn.Provider = "MSDataShape"
Cn.Properties("Data Provider").Value = "Microsoft.Jet.OLEDB.4.0"
Cn.Open "Data Source=C:\USER\;" _
& "Extended Properties=""text;HDR=YES;FMT=Delimited"""
'日付の降順に並べて、そのうちの上位5件を取得します。
SQL = "SELECT TOP 5" _
& " 日付, 値" _
& " FROM `TEST.CSV`" _
& " ORDER BY 日付 DESC"
Set rsCSV = New ADODB.Recordset
rsCSV.Open "SHAPE {" & SQL & "} AS rsCSV", Cn
'別途作成した、rsCSVというRecordsetをリシェイプします。
SQL = "SHAPE rsCSV COMPUTE" _
& " rsCSV," _
& " AVG(rsCSV.値) AS 平均," _
& " MAX(rsCSV.値) AS 最大"
Set rsCalc = Cn.Execute(SQL)
'結果を表示します。
Debug.Print "直近5日間の平均は、"; rsCalc.Fields("平均").Value; "です。"
Debug.Print "直近5日間の最大は、"; rsCalc.Fields("最大").Value; "です。"
rsCalc.Close
rsCSV.Close
Cn.Close
Set rsCalc = Nothing
Set rsCSV = Nothing
Set Cn = Nothing
End Sub