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

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

ただいまの
回答率

88.37%

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,561

amatsuno

score 40

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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/10 15:54

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

    キャンセル

  • 2019/05/10 15:55

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

    キャンセル

  • 2019/05/10 16:21 編集

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

    キャンセル

  • 2019/05/10 16:35

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

    キャンセル

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

  • ただいまの回答率 88.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る