VBSを使用して、ユーザごとに最も早い時刻を取得したいと思っています
現在、以下のcsvファイルがあります
master_A.csv
date,user,u_no,action
2019/04/06 12:00,AAA,1,OFF
2019/04/06 11:00,AAA,1,GO
2019/04/06 10:00,AAA,1,ON
2019/04/06 13:30,BBB,2,END
2019/04/06 11:30,BBB,2,GO
2019/04/06 10:30,BBB,2,GO
2019/04/06 20:30,CCC,3,OFF
2019/04/06 18:30,CCC,3,GO
2019/04/06 8:30,CCC,3,ON
2019/04/09 19:15,AAA,1,END
2019/04/09 17:10,AAA,1,GO
2019/04/09 9:25,AAA,1 ON
2019/04/09 16:35,BBB,2,ON
2019/04/09 11:10,BBB,2,OFF
2019/04/09 18:50,CCC,3,GO
2019/04/09 7:55,CCC,3,OFF
このファイルから、日付毎に各ユーザの最も早い時刻の動作を出そうと考えています
目標とする結果.csv
date2,time,user,u_no,action
2019/04/06,10:00:00,AAA,1,ON
2019/04/06,10:30:00,BBB,2,GO
2019/04/06,8:30:00,CCC,3,ON
2019/04/09,9:25:00,AAA,1 ON
2019/04/09,11:10:00,BBB,2,OFF
2019/04/09,7:55:00,CCC,3,OFF
上記をADODBを使用して実現させようとしたのですが、
・group byでは[action]カラムの値が抜けなかった
・INNER JOINはcsv処理では使用できなかった
ために、以下の方法での実現を考えました
①master_Aでgroup byで抜けるものをひとまず抜く
"SELECT Format([date],'yyyy/mm/dd') as date2, Format(min([date]),'hh:nn:ss') AS time, user , u_no " & _
" INTO sep_master_A.csv " & _
" FROM master_A.csv " & _
" GROUP BY Format([date],'yyyy/mm/dd') , user , u_no;"
結果、以下を生成しました
sep_master_A.csv
date2,time,user,u_no
2019/04/06,10:00:00,AAA,1
2019/04/06,10:30:00,BBB,2
2019/04/06,8:30:00,CCC,3
2019/04/09,9:25:00,AAA,1
2019/04/09,11:10:00,BBB,2
2019/04/09,7:55:00,CCC,3
②日付と時刻を切ったファイルを作成
objADO.Execute "SELECT Format([日時],'yyyy/mm/dd') AS date2,Format(([日時]),'hh:nn:ss') AS time, action , u_no INTO sep_master_A.csv " & _
" FROM master_A.csv ;"
sep_master_B.csv
date2,time,action,u_no
2019/04/06,12:00:00,OFF,1
2019/04/06,11:00:00,GO,1
2019/04/06,10:00:00,ON,1
2019/04/06,13:30:00,END,2
2019/04/06,11:30:00,GO,2
2019/04/06,10:30:00,GO,2
2019/04/06,20:30:00,OFF,3
2019/04/06,18:30:00,GO,3
2019/04/06,8:30:00,ON,3
2019/04/09,19:15:00,END,1
2019/04/09,17:10:00,GO,1
2019/04/09,9:25:00,ON,1
2019/04/09,16:35:00,ON,2
2019/04/09,11:10:00,OFF,2
2019/04/09,18:50:00,GO,3
2019/04/09,7:55:00,OFF,3
③sep_master_A.csvとsep_master_B.csvを突き合せる
sep_master_A.csvのレコードを1行ずつ読み、
[date2][time][u_no]が一致したレコードに対して、最終カラムに[action]の値を入れる
例:sep_master_A.csv の1行目で[date : 2019/04/06][time : 10:00:00][u_no : 1]が一致している
sep_master_B.csvのレコード(2019/04/06,10:00:00,ON,1)の[action : on]を最終カラムに入れる
⇒ 目標とする結果.csv
を作成しようとしています
①・②はできたのですが、③がうまくいきません
(複数のカラムが一致した場合の作り方)
For i = 0 to c
If a(0) = d(0, i) Then
cr.WriteLine x & "," & d(2, i) & "," & d(0, i)
Exit For
の形式で書いてみたのですが、
書き方たがうまくいかず、
実行時に求めていたものが出ません
(実行結果が空白で出てしまう)
③の箇所をどのように作成すればよいのか、お分かりになられる方、ご教授願えませんでしょうか
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/09 07:45
2019/04/09 07:53