CSVファイルのレコードを絞り込む

CSVのレコードを条件によって絞り込み、結果をCSVで出力する関数です。
対象のCSVファイルの1行目はフィールド名になっている必要があります。
ADODBで実装していて絞り込み条件はSQL言語のWhereなどで指定できます。

64bit版OSで実行する場合は注意が必要です。
  • srcCSV: 絞り込むCSVファイル
  • dstCSV: 結果出力先CSVファイル
  • condition: SQL言語の条件部分 e.g) Where フィールド名='値'

Function extractCSV( srcCSV, dstCSV, condition )
    Dim objFSO
    Dim objFileSrc
    Dim objFileDst

    Dim objCnn               'ADODB Connection
    Dim objRS                'ADODB ResultSet

    Dim strDrv                'ドライバ指定
    Dim strDBQ               'CSVファイルのフォルダ指定
    Dim strROOption        'モード設定(1:ReadOnly 0:Read/Write)
    Dim strQuerySelect    '絞り込み用SQLステートメント
    Dim strField
    Dim strInsVal

    strDrv = "Driver={Microsoft Text Driver (*.txt; *.csv)};"
    strDBQ = "DBQ=" & getFileDir( srcCSV ) & ";"
    strROOption = "ReadOnly=1"
    strQuerySelect = "select * from " & getFileName( srcCSV ) & " " & condition

    'フィールド名コピー
    set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
    call createDir( getFileDir( dstCSV ) )
    set objFileSrc = objFSO.OpenTextFile( srcCSV, 1, True )
    set objFileDst = objFSO.OpenTextFile( dstCSV, 2, True )
    call objFileDst.WriteLine( objFileSrc.ReadLine )
    objFileSrc.Close
   
   
    '絞り込み結果取得
    set objCnn = CreateObject( "ADODB.Connection" )
    objCnn.Open strDrv & strDBQ & strROOption
    set objRS = objCnn.Execute( strQuerySelect )

    Do until objRS.EOF
        '結果をCSVに出力
        strInsVal = ""
        for each strField in objRS.Fields
            strInsVal = strInsVal & "'" & strField & "',"
        next
        strInsVal = Left( strInsVal, Len( strInsVal ) - 1 )
        objFileDst.WriteLine( strInsVal )
        objRS.MoveNext
    Loop


    '終了処理
    objFileDst.Close
    objRS.Close
    objCnn.Close
    set objFileDst = Nothing
    set objFileSrc = Nothing
    set objFSO = Nothing
    set objRS = Nothing
    set objCnn = Nothing

end Function