• ベストアンサー

VBSで比較条件について

Y = 20040601 x = Date g = Mid(x,1,4) & Mid(x,6,2) & Mid(x,9,2) If g < x Then msgbox "w" Else msgbox "y" End If の時にMsgbox にWが入ります。 Yが入る方法はありますでしょうか 教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

VBSにおいてでも、日付(Date関数が与える日付も同じ)は1900年1月1日を1として、その日が第何日目か(日付シリアル値)で表します。それは値としては、単なる正の整数です。今日は38140です。 一方ご質問にあるgで出てくるMID関数は、文字列を部分的に切り出す関数です。ただしxが数字の場合は、文字列のように扱って切りだしてくれます(エクセルなども同じお節介ご親切機能)。 しかしMID(x,1,4)は日付の「年」の数字ではなく、3814となります。そして3814も数値ではなく文字列でしょう。 それと20040601と言う数を比較しても、意味がないことはわかりますね。 ですからYを20040601ではなく、2004/6/1の日付シリアル値にしてくれる関数を使って38139に直さないといけません。VBSではDateserialやDatevalueがありますからそれを使います。y=Dateserial(2004,6,1)とし、gとxでなくyとxを比較します。エクセル・アクセス・VBS・VBも日付については、同様のことに注意が必要です。

syusyusyusyu
質問者

お礼

ありがとうございました。

その他の回答 (1)

  • edomin
  • ベストアンサー率32% (327/1003)
回答No.1

質問の内容がよくわかりません。 IF文は、「g<Y」じゃないでしょうか? また、Yは数値でgは文字列になっています。比較対照が違いますのでYも文字列にしましょう。 全体としては、 ---ここから--- Y = "20040601" x = Date msgbox x g = Mid(x,1,4) & Mid(x,6,2) & Mid(x,9,2) If g < Y Then msgbox "w" Else msgbox "y" End If ---ここまで---

関連するQ&A

  • VBS どうするの?

    VBSで、 a=inputbox("0+1=") if lang=1 then  msgbox("あってます。")  else  msgbox("間違えています。") end if として、 msgbox("間違えています。") のあとに、もういちど最初(aの位置)にもどしたいときはどうすればよいでしょう? よろしくおねがいします。

  • VBS 教えて!2

    http://oshiete1.goo.ne.jp/qa5372858.html で質問したものです。 「loopにDoがありません」というエラーが発生するのはなぜですか? VBSだとgotoが使えないので、Do~loop命令をつかったのですが、いまいち使いこなせません。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Do total = Inputbox("動画の再生時間を入力してください","ビットレート自動計算機") music = Inputbox("音声ビットレートを入力してください","ビットレート自動計算機") x = 335544/total - music - 15 IF not(x>0) then Msgbox "入力した情報は不正です" elseIF x>656 then Msgbox "推奨映像ビットレートは656kbpsです。" else Msgbox "推奨映像ビットレートは" & x & "kbpsです。" end IF Msgbox "続けて計算しますか?",vbyesno IF vbyes then loop elseIF vbno then Msgbox"終了します" end IF ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  • vbsのFolderExistsで部分一致をさせたい

    VBSで以下のコードを作成しましたが動作しません。 ********動作しない************************** if (objFileSys.FolderExists("200810*")= True) then  msgbox "yes" else  msgbox "no" end if ********動作する************************** if (objFileSys.FolderExists("200810")= True) then  msgbox "yes" else  msgbox "no" end if 部分一致でフォルダが存在するかをしたいのですが、 どうしたらいいのでしょうか。 よろしくお願いします。

  • REALbasicについて質問です。

    今日プログラミングをはじめた超初心者です。 全然わからないので教えていただきたいのですが Sub Action () dim x as string dim y as integer x = editField1.text y = val(x) if y = 0 then msgbox "ゼロだよん。" else msgbox "ゼロじゃないよん。" end if End Sub というプログラムを実行してみたのですがeditField1のところがおかしいらしく動いてくれません。どのようにしたらよろしいでしょうか?

  • エクセル・時刻に関する質問

    添付画像のようなエクセルで以下の標準モジュールを作っています。 Sub test001() If Cells(2, 2) = TimeValue("9:00:00") Then MsgBox ("9:00:00認識しました") Else MsgBox ("9:00:00認識しませんでした。") End If If Cells(3, 2) = TimeValue("9:05:00") Then MsgBox ("9:05:00認識しました") Else MsgBox ("9:05:00認識しませんでした。") End If If Cells(3, 2) = 0.378472222222222 Then MsgBox ("2回目9:05:00認識しました") Else MsgBox ("2回目9:05:00認識しませんでした。") End If If Cells(4, 2) = TimeValue("9:10:00") Then MsgBox ("9:10:00認識しました") Else MsgBox ("9:10:00認識しませんでした。") End If If Cells(5, 2) = TimeValue("9:15:00") Then MsgBox ("9:15:00認識しました") Else MsgBox ("9:15:00認識しませんでした。") End If If Cells(6, 2) = TimeValue("9:20:00") Then MsgBox ("9:20:00認識しました") Else MsgBox ("9:20:00認識しませんでした。") End If End Sub 実行すると、9:05:00 だけが、「9:05:00認識しませんでした。」となります。 時刻以外は同じ内容のはずですが 9:05:00 だけ認識されません。 解決策をお願いします。

  • VB2008でブロック崩しを作っているのですが、玉は動くようになり次に

    VB2008でブロック崩しを作っているのですが、玉は動くようになり次に自機を動かそうと思いやってみたのですが動きません。 もう一つプロジェクトを作って自機を動かす文だけでやってみるときちんと動きます。 Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown Dim w As Graphics = Pic1.CreateGraphics() w.DrawImage(picback, zikiX, zikiY, rect, GraphicsUnit.Pixel) Select Case e.KeyCode Case Keys.Left : zikiX -= 3 Case Keys.Right : zikiX += 3 End Select w.DrawImage(ziki, zikiX, zikiY) w.Dispose() End Sub Private Sub ballmove() Dim g As Graphics = Pic1.CreateGraphics() tamasita = y + 28 tamawidth = x + 28 zikiwidth = zikiX + 15 zikisita = zikiY + 73 rec.X = x : rec.Y = y : rec.Width = 28 : rec.Height = 28 g.DrawImage(picback, x, y, rec, GraphicsUnit.Pixel) g.DrawImage(ziki, zikiX, zikiY) If x + 28 >= Pic1.Width Then flag_x = False ElseIf x < 1 And flag_x = False Then flag_x = True End If If y + 28 >= Pic1.Height Then flag_y = False ElseIf y < 1 And flag_y = False Then flag_y = True End If If flag_x = True Then x = x + 3 Else x = x - 3 End If If flag_y = True Then y = y + 3 Else y = y - 3 End If g.DrawImage(tama, x, y) g.Dispose() End Sub

  • エクセルの1シート内にある複数の散布図のx軸とy軸の最大目盛、最少目盛

    エクセルの1シート内にある複数の散布図のx軸とy軸の最大目盛、最少目盛、目盛間隔を揃えるにはどのようにしたら良いか教えてください。いくつかwebsiteで調べて下記のようにしてみましたが、x軸の目盛を変更するところで、失敗してしまいます。 よろしくお願いします。 Sub XY軸() Dim Ymin Ymin = InputBox("Y軸の最少?") If IsNumeric(Ymin) Then Range("C2").Value = Ymin Else MsgBox "入力NG!" End If Dim Ymax Ymax = InputBox("Y軸の最大?") If IsNumeric(Ymax) Then Range("C3").Value = Ymax Else MsgBox "入力NG!" End If Dim Y Y = InputBox("目盛間隔?") If IsNumeric(Y) Then Range("C4").Value = Y Else MsgBox "入力NG!" End If Dim xmin xmin = InputBox("X軸の最少?") If IsNumeric(xmin) Then Range("D2").Value = xmin Else MsgBox "入力NG!" End If Dim Xmax Xmax = InputBox("X軸の最大?") If IsNumeric(Xmax) Then Range("D3").Value = Xmax Else MsgBox "入力NG!" End If Dim X X = InputBox("Xの目盛間隔?") If IsNumeric(X) Then Range("D4").Value = X Else MsgBox "入力NG!" End If Dim co As ChartObject For Each co In ActiveSheet.ChartObjects With co.Chart With .Axes(xlValue) .MinimumScale = Range("C2").Value '最小値 .MaximumScale = Range("C3").Value '最大値 .MajorUnit = Range("C4") '目盛間隔 End With With .Axes(xlCategory) .MinimumScale = Range("D2").Value '最小値 .MaximumScale = Range("D3").Value '最大値 .MajorUnit = Range("D4") '目盛間隔 End With End With Next End Sub

  • VBSで二次関数

    VBScriptを使って二次関数の最大、最小を求めるプログラミングをしたいのですがどうすればよいでしょう?a,b,cとx1,x2(xの範囲)を入力して求める、つまりIF...THEN...ELSE...END IF を使うということです 急いでいるのでよろしくお願いします。

  • VBSでExcelのオープン確認

    VBSCRIPTでエクセルに書き込むものを作っているのですが・・・ エクセルが開きっぱなしの場合、同じシートが開いて書き込めなかったりなど有りその対策を考えています。 もし開いていたらMsgBoxを出して終了させてしまおうかと思うのですがエクセルが開いているかどうか確認できません・・・ どのようにしたらよいでしょうか? wbCount = objExcel.Workbooks.Count msgbox wbCount myFlag = False for i = 1 to wbCount if objExcel.Workbooks(i).Name = strFilename then myFlag = True Exit for end if next if myFlag = True then msgBox "Open" else msgBox "not Open" end if

  • ボタンが押されたときの反応 Basic

    Active Basicでゲームプログラムを書いています。 ボタンを押したときの反応で、上下左右に画像を動かしたいのですが、 ボタンを押すと、いったん静止してから、連打処理(?)のように動きます。 やりたいことは、ボタンを押すとすぐに上下左右に一定間隔で画像を動かすことです。 Sub MainWnd_KeyDown(KeyCode As Long, flags As Long) If KeyCode=37 Then If x<=3 Then Exit Sub End If MyBmpInfo=2 x=x-5 Else If KeyCode=38 Then If y<=0 Then Exit Sub End If MyBmpInfo=1 y=y-5 Else If KeyCode=39 Then If x>=600 Then Exit Sub End If MyBmpInfo=3 x=x+5 Else If KeyCode=40 Then If y>=400 Then Exit Sub End If y=y+5 End If InvalidateRect(hMainWnd,ByVal 0,TRUE) End Sub と書きました。 すみませんが、どなたかご存知の方がいらっしゃいましたら、ご教授ください。 お願いします。

専門家に質問してみよう