質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

Q&A

解決済

1回答

913閲覧

合計時間が日付毎に表示されない

amatsuno

総合スコア54

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

0グッド

0クリップ

投稿2019/05/07 09:50

編集2019/05/10 01:41

現在、2つのcsv(元を2つ)を統合して、
1つのcsv(目的としている結果)を作成しようとしております

vbsで作成しています。

csv1(元):csv_tmp2.csv
日付,off_t,名前,act,U_NO,T_name,on_t
2019/5/7,8:30 ,CCC,END,30,A-GP,8:29
2019/5/7,8:51 ,AAA,END,15,A-GP,8:49
2019/5/7,11:26,BBB,END,20,A-GP,8:38
2019/5/6,17:04,CCC,OFF,30,A-GP,8:28
2019/5/6,17:58,AAA,OFF,15,A-GP,8:49
2019/5/6,19:21,BBB,END,20,A-GP,8:36
2019/5/5,17:04,CCC,OFF,30,A-GP,8:31
2019/5/5,18:40,AAA,OFF,15,A-GP,8:48
2019/5/5,22:34,BBB,OFF,20,A-GP,8:30
2019/5/2,19:10,AAA,OFF,15,A-GP,8:51
2019/5/2,23:28,BBB,OFF,20,A-GP,8:52

csv2(元):time_tmp2.csv
日付,U_NO,名前,using_time
2019/5/2,15,AAA,8:23:09
2019/5/2,20,BBB,10:33:02
2019/5/5,30,CCC,7:34:01
2019/5/5,15,AAA,8:50:37
2019/5/5,20,BBB,11:43:57
2019/5/6,30,CCC,7:33:15
2019/5/6,15,AAA,7:54:07
2019/5/6,20,BBB,8:05:25
2019/5/7,30,CCC,0:01:00
2019/5/7,15,AAA,0:01:00
2019/5/7,20,BBB,2:14:36

作成後のcsv(目的としている結果):csv_tmp3.csv
日付1,T_name,名前,ON1,OFF1,using_time
2019/5/7,A-GP,AAA,8:29,8:30,0:01:00
2019/5/7,A-GP,BBB,8:49,8:51,2:14:36
2019/5/7,A-GP,CCC,8:38,11:26,0:01:00
2019/5/6,A-GP,AAA,8:28,17:04,7:54:07
2019/5/6,A-GP,BBB,8:49,17:58,8:05:25
2019/5/6,A-GP,CCC,8:36,19:21,7:33:15
2019/5/5,A-GP,AAA,8:31,17:04,8:50:37
2019/5/5,A-GP,BBB,8:48,18:40,11:43:57
2019/5/5,A-GP,CCC,8:30,22:34,7:34:01
2019/5/2,A-GP,AAA,8:51,19:10,8:23:09
2019/5/2,A-GP,BBB,8:52,23:28,10:33:02

そのためのコードとして、以下を作成しました

sub csv_add2() Dim a, c, cr, cv, d(), fa, fb, fc, i, p, so, t1, t2, x , pp '使用情報 - 入力ファイル fa = "csv_tmp2.csv" '利用時間情報 - 入力ファイル fb = "time_tmp2.csv" '出力フォーマット - 出力ファイル fc = "csv_tmp3.csv" Set so = CreateObject("Scripting.FileSystemObject") p = so.GetParentFolderName(WScript.ScriptFullName) Set cv = so.OpenTextFile(p & "\" & fb, 1) '利用時間情報をカンマ区切りで保持 t2 = Split(cv.ReadLine, ",") c = - 1 '利用時間情報のレコード数分実施 Do Until cv.AtEndOfStream '利用時間情報をカンマ区切りで保持 a = Split(cv.ReadLine, ",") c = c + 1 '利用時間情報を1レコードずつ読み込む ReDim Preserve d(3, c) For i = 0 to 3 d(i, c) = a(i) Next Loop cv.Close Set cv = Nothing Set cv = so.OpenTextFile(p & "\" & fa, 1) t1 = cv.ReadLine Set cr = so.OpenTextFile(p & "\" & fc, 2, True) 'ヘッダーを付与 cr.WriteLine "日付1,T_name,名前,ON1,OFF1,using_time" '使用情報のレコード数分実施 Do Until cv.AtEndOfStream x = cv.ReadLine '使用情報をカンマ区切りで保持 a = Split(x, ",") '使用情報より、使用するカラムを選択して順番を並べ替える pp = a(0) & "," & a(5) & "," & a(2) & "," & a(6) & "," & a(1) For i = 0 to c If a(4) = d(1, i) Then ' If a(4) = d(1, i) and a(0) = d(0, i) Then 'ここで、[日付]と[U_NO]に紐づけた[利用時間(using_time)]をレコードの最後につける cr.WriteLine pp & "," & d(3, i) Exit For End If Next Loop 'バッファを Flush してファイルを閉じる cv.Close cr.Close Set cv = Nothing Set cr = Nothing Set so = Nothing end sub

上記のコードで実施したことろ、以下のように出力されてしまい、
「目的としている結果」の値が出力できません

実出力csv(出力された結果):
日付1,T_name,名前,ON1,OFF1,using_time
2019/5/7,A-GP,AAA,8:29,8:30,"08:23:09"
2019/5/7,A-GP,BBB,8:49,8:51,"10:33:02"
2019/5/7,A-GP,CCC,8:38,11:26,"07:34:01"
2019/5/6,A-GP,AAA,8:28,17:04,"08:23:09"
2019/5/6,A-GP,BBB,8:49,17:58,"10:33:02"
2019/5/6,A-GP,CCC,8:36,19:21,"07:34:01"
2019/5/5,A-GP,AAA,8:31,17:04,"08:23:09"
2019/5/5,A-GP,BBB,8:48,18:40,"10:33:02"
2019/5/5,A-GP,CCC,8:30,22:34,"07:34:01"
2019/5/2,A-GP,BBB,8:51,19:10,"10:33:02"
2019/5/2,A-GP,CCC,8:52,23:28,"07:34:01"

できなかったこと:
①using_timeの値が、「名前」ごとにすべて同じ値になってしまっている
(time_tmp2.csvの各「名前」の最上位の「using_time」の値になっている)
②using_timeのフォーマットが「"hh:mm:ss"」になっている

コードを何度か見直して試してみたのですが、
狙った結果が取得できませんでした。

どのように修正すればいいのでしょうか?
お分かりになられるかた、
申し訳ございませんがご教授願います

追記、
コード内の
If a(4) = d(1, i) Then
' If a(4) = d(1, i) and a(0) = d(0, i) Then
の箇所ですが、
上側で実施すると、日付毎のソートがされず、
下側で実施すると、そもそも2つのcsvの結合に失敗する
(結合結果が0件となる)

という状況です

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2019/05/07 10:18

コードは```で括ってください。 コードを選択して<code>をクリック、VBScriptと入力すればOKです。
torisan

2019/05/08 01:03

日付とU_NOが、組み合わせのキーという事で良いのでしょうか?
amatsuno

2019/05/10 01:08

>日付とU_NOが、組み合わせのキーという事で良いのでしょうか? 組み合わせのキーは、上記でおっしゃる通りです ・まず日付毎に並べる ・次に同一日付内でu_no毎に並べる
amatsuno

2019/05/10 01:12

すいません。 追加で1点ですが、 この結果の(csv_tmp3.csv)出力時に、 [using_time]が、[1899/12/30 10:33:02]な形式で出ることがあります (②の状態が["hh:mm:ss"]と["yyyy/bb/dd hh:mm:ss"]の2つのケースが出てしまう) 最終の出力形式を[10:33:02]にさせたいので、 その方法を合わせて記載いただけますと幸いです
torisan

2019/05/10 02:15 編集

こちらで再現した所、(追記のif文も含めて)記述とは異なる結果になりました。 VBScript は詳しくない為、こちらの手順が違う可能性がありますが、今一度 元データ・結果・ソースがこれで正しいか確認をお願いできますでしょうか。
amatsuno

2019/05/10 02:48

すいません。 原因が判明しました。 ②側: (元)になるcsvを出す処理側で、日付フォーマットを明示的に指定していなかったため、 日付の=条件に合致ませんでした。 ①については、 If a(4) = d(1, i) and a(0) = d(0, i) Then のコードで実施すtることにより対応できました
guest

回答1

0

自己解決

すいません。
原因が判明しました。
②側:
(元)になるcsvを出す処理側で、日付フォーマットを明示的に指定していなかったため、
日付の=条件に合致ませんでした。

①については、
If a(4) = d(1, i) and a(0) = d(0, i) Then
のコードで実施すtることにより対応できました

投稿2019/05/10 02:49

amatsuno

総合スコア54

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

amatsuno

2019/05/10 05:13

ご回答者様 ベストアンサーのつけ方がよくわからず、申し訳ございませんでした (ある日数以上たつとつけられなくなるのでしょうか?)
dit.

2019/05/10 05:32

今までやり取りをされていた場所は「質問への追記・修正、ベストアンサー選択の依頼」の欄なので「回答」ではありません。 回答ではないのでベストアンサーを選ぶことはできません。 ご自身で原因が特定でき、解決できたのであれば「自己解決」という対応で問題ないと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問