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

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

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

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

Q&A

解決済

1回答

806閲覧

VBSで、csv上の値によって、別レコードの値を変更したい

amatsuno

総合スコア54

VBScript

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

0グッド

0クリップ

投稿2019/04/16 00:48

csv上にあるカラムのある値が特定値の時に、
別レコードの特定のカラムの値を変更したいと思っています

変更対象のカラム:「time」カラム
変更対象の値:10:00:00

変更後のカラム:翌日の「操作」カラム
変更内容:「変更完了」の文字列に設定

追加条件:翌日にそのユーザの情報がレコードにない場合は、値の設定を実施しない

元ファイル
date2,time,user,u_no,操作
2019/04/06,10:00:00,AAA,1,開始
2019/04/06,10:30:00,BBB,2,開始
2019/04/07,10:00:00,AAA,1,開始
2019/04/07,10:30:00,BBB,2,開始

この時、[time]カラム内の値が、「10:00:00」の場合、
翌日の[操作]カラムを「変更完了」に設定したいと思っております

変更後ファイル

date2,time,user,u_no,操作
2019/04/06,10:00:00,AAA,1,開始
2019/04/06,10:30:00,BBB,2,開始
2019/04/07,10:00:00,AAA,1,変更完了
2019/04/07,10:30:00,BBB,2,開始

ユーザーAAAの4/6の[time]が「10:00:00」なので、AAAの4/7の[操作]が「変更完了」になっている

変更先は「同一ユーザの翌日」なので、そこを指定すればできる気がしたのですが、
その指定の方法がわかりませんでした
(「翌日にそのユーザの情報がレコードにない場合は、値の設定を実施しない」の方法がうまくわかりませんでした)

同一レコードの場合はこれで何とかなったのですが、
翌日の場合、date2を変数に入れて、+1で翌日を出せばいいのでしょうか?

Do Until cv.AtEndOfStream
a = Split(cv.ReadLine, ",")
If a(2) <> "開始" and a(2) <> "操作中" Then
a(1) = "23:59:59"
End If
cr.WriteL

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

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

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

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

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

guest

回答1

0

自己解決

すいません

自己解決です

If (UBound(sA) = 4) Then dt = CDate(sA(0)) If (dic.Exists(sA(3))) Then If (dic(sA(3)) = dt) Then sA(4) = "変更完了" dic.Remove sA(3) ElseIf (sA(1) = "10:00:00") Then dic(sA(3)) = dt + 1 End If ElseIf (sA(1) = "10:00:00") Then dic(sA(3)) = dt + 1 End If fw.WriteLine Join(sA, ",") End If

投稿2019/04/16 05:45

amatsuno

総合スコア54

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問