VBSを使用して、日付の判定を行いたいと思っております
やりたいこと
以下のコードを使用して、
当日および11以上前のレコードを削除しようと思っております。
コード
sub date_del()
Dim a, cc, ce, f, so, x
Set so = CreateObject("Scripting.FileSystemObject")
f = so.GetParentFolderName(WScript.ScriptFullName)
'入力ファイル
Set ce = so.OpenTextFile(f & "\csv_addlog_tmp4.csv", 1)
'出力ファイル
Set cc = so.OpenTextFile(f & "\csv_addlog_tmp5.csv", 2, True)
x = ce.ReadLine
cc.WriteLine x
'入力ファイルのレコードがなくなるまで実施
Do Until ce.AtEndOfStream
x = ce.ReadLine
'入力ファイルをカンマ区切りで保持
a = Split(x, ",")
'[日付]が当日と、11日前のとき、そのレコードを削除
If DateValue(a(0)) < Date and DateValue(a(0)) > DateAdd("d", -11, Date) Then
' If (a(0)) < Date and (a(0)) > DateAdd("d", -11, Date) Then
cc.WriteLine x
End If
Loop
'バッファを Flush してファイルを閉じる
ce.Close
cc.Close
Set ce = Nothing
Set cc = Nothing
Set so = Nothing
end sub
実施結果と問題点
この時、このコード自体は問題ないのですが、
読み込むcsvの日付の箇所[a(0)の箇所]が「yyyy/mm/dd」の形式で持たれています
そのため、実行すると以下のエラーが出力されてしまいます
型が一致しません:'dateValue'
コード:800A000D
行、文字 ⇒ If DateValue(a(0)) < Date and DateValue(a(0)) > DateAdd("d", -11, Date) Then
の箇所
読み込みファイルの前提
※読み込むcsv(csv_addlog_tmp4.csv)については、前段の処理の関係上、csvの日付位置を上記の方法で作成しております
objADO.Execute _
"SELECT Format([日付],'yyyy/mm/dd') AS 日付1, offtime , エージェント , 操作種別 , 端末機No , 部署名 , ontime " & _
~~~
" ;"
質問点
そのため、ここで第1カラムの値を再度日付型として認識させたいのですが、
どのようにすればよいのでしょうか?
また、どのようなコードで記載すればよいのでしょうか?
読み込むcsv(csv_addlog_tmp4.csv)
日付1,G名,u_name,ON1,OFF1,acttime
"2019/05/10","A-GRP","AAA",1899/12/30 8:29:00,1899/12/30 8:30:00,"0:01:00"
"2019/05/10","A-GRP","BBB",1899/12/30 8:49:00,1899/12/30 8:51:00,"0:01:00"
"2019/05/10","A-GRP","CCC",1899/12/30 8:38:00,1899/12/30 11:26:00,"0:01:02"
"2019/05/09","A-GRP","AAA",1899/12/30 8:28:00,1899/12/30 17:04:00,"0:01:00"
"2019/05/09","A-GRP","BBB",1899/12/30 8:49:00,1899/12/30 17:58:00,"3:11:52"
"2019/05/09","A-GRP","CCC",1899/12/30 8:36:00,1899/12/30 19:21:00,"0:01:00"
"2019/05/08","A-GRP","AAA",1899/12/30 8:31:00,1899/12/30 17:04:00,"3:36:47"
"2019/05/08","A-GRP","BBB",1899/12/30 8:48:00,1899/12/30 18:40:00,"0:01:00"
"2019/05/08","A-GRP","CCC",1899/12/30 8:30:00,1899/12/30 22:34:00,"0:01:00"
"2019/05/05","A-GRP","BBB",1899/12/30 8:51:00,1899/12/30 19:10:00,"0:01:00"
"2019/05/05","A-GRP","CCC",1899/12/30 8:52:00,1899/12/30 23:28:00,"0:01:00"
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
読み込むCSVファイルのデータが
"2019/05/10","A-GRP","AAA",1899/12/30 8:29:00,1899/12/30 8:30:00,"0:01:00"
という形式なので、a(0)には、「"2019/05/10"」という前後にダブルクオート(")がついた文字列が代入されます。
そのため、DateValue関数でエラーが起きています。(DateValueの引数は日付を表す文字列である必要があります。「2019/05/10」という文字列はOKですが、ダブルクオートを含んだ文字列はNGです。
読み込むCSVファイルをテキストエディタで開いて、ダブルクオートを全て削除して保存してください。
その後にプログラムを実行すれば、エラーは出ないはずです。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.37%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2019/05/10 15:54
これはプログラムの一連の処理上の一部なので、
手動のcsv変換ができません
2019/05/10 15:55
その方法がうまくわからず、質問しています
2019/05/10 16:21 編集
a(0)から最初と最後の文字を取り除くための式です。元の文字列(a(0))の2文字目から、(a(0)の文字列の長さ-2)文字をmid関数を使って取り出しています。
2019/05/10 16:35
確認したところ、狙っている動作ができました。