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

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

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

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

Q&A

解決済

1回答

995閲覧

vbsで、文字列でフォーマットした日付を文字列として判定させたい

amatsuno

総合スコア54

VBScript

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

0グッド

0クリップ

投稿2019/05/10 06:14

編集2019/05/10 06:15

VBSを使用して、日付の判定を行いたいと思っております

やりたいこと

以下のコードを使用して、
当日および11以上前のレコードを削除しようと思っております。

コード

VBScript

1sub date_del() 2 3Dim a, cc, ce, f, so, x 4Set so = CreateObject("Scripting.FileSystemObject") 5f = so.GetParentFolderName(WScript.ScriptFullName) 6 7'入力ファイル 8Set ce = so.OpenTextFile(f & "\csv_addlog_tmp4.csv", 1) 9 10'出力ファイル 11Set cc = so.OpenTextFile(f & "\csv_addlog_tmp5.csv", 2, True) 12x = ce.ReadLine 13cc.WriteLine x 14 15'入力ファイルのレコードがなくなるまで実施 16Do Until ce.AtEndOfStream 17 x = ce.ReadLine 18 19 '入力ファイルをカンマ区切りで保持 20 a = Split(x, ",") 21 22 '[日付]が当日と、11日前のとき、そのレコードを削除 23 If DateValue(a(0)) < Date and DateValue(a(0)) > DateAdd("d", -11, Date) Then 24' If (a(0)) < Date and (a(0)) > DateAdd("d", -11, Date) Then 25 cc.WriteLine x 26 End If 27 28Loop 29 30'バッファを Flush してファイルを閉じる 31ce.Close 32cc.Close 33Set ce = Nothing 34Set cc = Nothing 35Set so = Nothing 36 37end sub 38

実施結果と問題点

この時、このコード自体は問題ないのですが、
読み込む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"

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

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

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

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

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

guest

回答1

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ファイルをテキストエディタで開いて、ダブルクオートを全て削除して保存してください。
その後にプログラムを実行すれば、エラーは出ないはずです。

投稿2019/05/10 06:52

coco_bauer

総合スコア6915

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

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

amatsuno

2019/05/10 06:54

すいません。 これはプログラムの一連の処理上の一部なので、 手動のcsv変換ができません
amatsuno

2019/05/10 06:55

replaceなどで""を消そうとしているのですが、 その方法がうまくわからず、質問しています
coco_bauer

2019/05/10 07:23 編集

「a = Split(x, ",")」 の次の行に 「a(0) = mid(a(0),2,len(a(0))-2)」を追加してみてください。 a(0)から最初と最後の文字を取り除くための式です。元の文字列(a(0))の2文字目から、(a(0)の文字列の長さ-2)文字をmid関数を使って取り出しています。
amatsuno

2019/05/10 07:35

ありがとうございます。 確認したところ、狙っている動作ができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問