• ベストアンサー

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 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

  • ベストアンサー
  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

IF vbyes then loop elseIF vbno then Msgbox"終了します" end IF ↓ If MsgBox("続けて計算しますか?", vbYesNo) = vbNo Then Exit Do End If Loop MsgBox "終了します" に変更してください。

その他の回答 (2)

回答No.3

#2です。 訂正です。 Do~LoopはWhile、Untilがなくても動くようですね。

参考URL:
http://msdn.microsoft.com/ja-jp/library/cc392445.aspx
回答No.2

Do~LoopはUntilもしくはWhileで条件判断を一緒に付けないとダメなようですね。 最後の5行がIF文がまたがって判定されているので、おかしな事になっていると思います。 一例ですが、最後の方を以下のように直してみてください。 ーーーーーーーーーーーーーーーーーーーーーーーー i_ret=Msgbox("続けて計算しますか?",vbYesNo) loop Until i_ret=vbYes Msgbox"終了します" ーーーーーーーーーーーーーーーーーーーーーーーー i_retにvbYesNoの戻り値が格納され(「はい」か「いいえ」) loop文でi_retがvbYes(「はい」の状態)ならDo~Loopを抜けて 終了するようになっています。

参考URL:
http://woodbook.kir.jp/program/wsh/box.html

関連するQ&A

  • VBS 教えて!

    こんばんは、VBSを使って簡単な計算機を作りたいのですが、わからない所があるので教えて頂きたいです。 私はプログラミングはしたことがなくVBSというものをネットで見て、まだ10分程度の知識ですので、詳しく教えて頂ければ幸いです。 ↓現在 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ total = Inputbox("動画の再生時間を入力してください","ビットレート自動計算機") music = Inputbox("音声ビットレートを入力してください","ビットレート自動計算機") x = 335544/total - music - 15 Msgbox "推奨映像ビットレートは" & x & "kbpsです。" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (1)totalのinputboxに?時間?分?秒??(1/100秒)まで入力できるように入力ボックスを増やしたいのですが、どうやってやればいいのでしょうか? (2)totalに何も入力されなかった場合に、「再生時間を入力してください」とメッセージを表示し、再度入力欄に戻させたいのですが、どうやってやればいいのでしょうか? (3)xの式が負になった場合に、「入力した情報は不正です。」とメッセージを表示し、再度最初から入力欄に戻させたいのですが、どうやってやればいいのでしょうか? 他にも質問があるのですが、とりあえず上の3つを教えて頂きたいです。

  • VBS 条件中の条件

    'ビットレート自動計算機 '変数 msgA = "時間(アワー)を入力してください" msgB = "時間(ミニッツ)を入力してください" msgC = inputbox(msgA,"ビットレート自動計算機","半角で入力") msgD = inputbox(msgB,"ビットレート自動計算機","半角で入力") '変数 num1 = msgC * 3600 num2 = msgD * 60 num3 = num1 + num2 '計算 bitrate = 335544\num3 - 50 '分岐 if bitrate <= 0 then msgbox "動画時間が長すぎます elseif 0 < bitrate < 150 then msgbox "ビットレートが" & bitrate & "になりますが、よろしいですか?",vbyesno end if msgbox "適正ビットレートは" & bitrate & "です" 質問 1:「動画時間が長すぎます」のあとに最初に戻りたいのですがどうしたらいいですか? 2:elseifでyesボタンを押したときは処理を続けて、noボタンを押したときは最初に戻りたいのですがどうしたらいいですか? 3:アワーをhour、ミニッツをminuteと表示したいんですがどうしたらいいですか? よろしくお願いします

  • VBS どうするの?

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

  • Exsel プログラムなんですが・・・。

    簡単なゲームを作ってみようと思い、ExcelでAからZまでの文字を入れて正解の文字を当てるものを作っています。 しかし、本を参考に作ってみたのですが、Ifの所で型が一致しませんと出るのですが、どこが間違っているのか分かりません。 できれば、Ifとwhile~Loop,を使って作りたいのですが・・・。 どなたか、詳しい方、ご教授の程よろしくお願いします。 以下、作成したものです。 Sub Ex667() Dim a As String Dim b As String Dim i As Integer a = "J" i = "A" a = InputBox("AからZまでの文字を入力", "文字当て", "A") Do While a <> "" i = i + 1 If a = b Then MsgBox i & "回目で正解!" Exit Do ElseIf "A" < a And a < "Z" Then If a = b Then a = InputBox("もっと後の数です。", "ハズレ") Else a = InputBox("もっと前の数です。", "ハズレ") End If Else a = InputBox("入力ミス") End If Loop End Sub 回答よろしくお願いします。

  • VBSで指定した日付のファイルのみを抽出するには

    以下の内容について教えていただけないでしょうか? ○実施したいこと ・インプットボックスに日付を入力 ・指定したフォルダに移動 ・インプットボックスで入力された日付を含むファイルのみ抽出  (ファイル名: **130503**) →ファイルは0個、1個、複数個の場合あり ・抽出したファイルを別フォルダにコピー ○困っていること ・入力した日付をパラメータとして、ファイル検索を行い該当するファイルを  抽出する方法 ※入力する日付は130503のようにしたいです。 ○現在、作成中のソース Option Explicit Dim hizuke Dim fs Do '日付を入力するためのインプットボックスを表示 hizuke = InputBox("日付を入力してください。" &_ vbCR & vbCR &_ "例)2000/01/01") '「キャンセル」または未入力で終了 If hizuke = "" Then Exit Do '正しい日付が入力された場合 ElseIf IsDate(hizuke) then MsgBox "テスト(正しい日付が入力されました。)" 'オブジェクトを作成する Set fs = CreateObject("Scripting.FileSystemObject") 'ファイルをコピーする fs.CopyFile "D:\test130503.log","D:\test\" '日付でなかったら、注意を表示して、インプットボックスに戻る Else MsgBox "入力した値が不正です。" End If Loop 宜しくお願いします。

  • VBSでフォームに値を繰り返し入れる方法で悩んでいます

    VBScriptでフォームに値を入れることを繰り返したいのですがどうもうまくいかずに悩んでいます。いい方法を教えて下さい。 指定ページを開いた後に If objIE.Document.URL = strURL Then Set objIN = objIE.Document.getElementByTagName("INPUT") objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop If objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop ElseIf objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop ElseIf objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop ElseIf objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop Else objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop End If 以下省略 といったように1回でログインできなかった場合何度か入力するプログラムなのですが最初のElseIfの後のところで「オブジェクトがありません」となってしまいます。 ページも遷移してないのですが何故かオブジェクトがなくなってしまいます。 そういった対策をすればよいのでしょうか? お願いします。

  • InputBoxで代入した変数を比較演算子で処理

    InputBoxに入力し その値を判定後次処理に進むよう作成中で つまづいてます。 InputBoxにtype1を記述すると 空白で「OK」を選択時に 「入力した数式は正しくありません」 というヘルプ付のエクセル標準の警告 が表示される為、type1をやめ、  IsNumericが数値ではないのにTrueを返す文字の対策、 正の整数半角以外の時は再入力させるように (0、負、数字以外、大文字、キャンセル、キャンセルのキャンセル、  空白でOKを押すなど) してみましたが肝心の ElseIf 開始行2 > 最終行 Then と ElseIf 終了行2 <= 開始行2 Then が思ったように処理されません。 ウォッチ式でも ElseIf 開始行2 > 最終行 Then ↓ 3 > 25  12 > 25 →双方Falseのはず→True→【NG】 ElseIf 終了行2 <= 開始行2 Then ↓ 3 <= 4 →Trueのはず→True→【OK】 7 <= 4 →Falseのはず→False→【OK】 12 <= 4 →Falseのはず→True→【NG】 4 <= 11 →Trueのはず→False→【NG】 という具合です。 変数の型の未定義が原因かと 数値系で定義すると"False" Thenの所で「型が一致しません」で ERRです。 変数の開始行、終了行の型をAs Longにして ElseIf 開始行 = "False" Then ElseIf 終了行 = "False" Then ↓ ElseIf 開始行 = False Then ElseIf 終了行 = False Then にすればERRは出ませんが本題は改善されません。 片方の変数を数値で固定すれば思ったように動きました。 例:ElseIf 終了行2 <= 4 Then 変数同士を比較演算子で判定はできないのでしょうか? 正しく判定できない原因を教えていただきたくお願いします。 Dim 最終行 Dim 開始行 Dim 開始行2 Dim 終了行 Dim 終了行2 Dim 質問 最終行 = Cells(Rows.Count, 3).End(xlUp).Row Do 開始行 = Application.InputBox("開始行を" & vbCrLf & _ "数字で入力してください") If 開始行 = "" Then '(分岐1-1)空白でOKを押時 MsgBox "【空白】は指定できません(>_<)", vbCritical, "エラー!!" ElseIf 開始行 = "False" Then '(分岐1-2)キャンセル選択時 '(分岐1-2-1) If MsgBox("終了します", vbOKCancel + vbExclamation, "確認") = vbOK Then Exit Sub 'OK押下時→終了 End If '1-2-1終了 ElseIf IsNumeric(開始行) Then '(分岐1-3-1)数値か確認 開始行2 = StrConv(開始行, vbNarrow) '数値なら全角→半角 'IsNumericがTrueを返した時の確認 If InStr(開始行2, ".") Then '(1-3-2)小数指定時と123.56対応 MsgBox "【小数点】は駄目です。(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf 開始行2 <= 0 Then '(1-3-3)負の数字と-123対応 MsgBox "負(マイナス)の数は駄目です(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" 'IsNumericが数値ではないのにTrueを返してしまう文字の対策 ElseIf InStr(開始行2, "+") Then '(1-3-4)+123と123+対応 MsgBox "【+】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(開始行2, "-") Then '(1-3-5)123-対応 MsgBox "【-】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(開始行2, ",") Then '(1-3-6)1,,,,,,6対応 MsgBox "【,】はいれては行けません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(開始行2, "E") Then '(1-3-7)3E2対応 MsgBox "【E】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(開始行2, "D") Then '(1-3-8)3D2対応 MsgBox "【D】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" '判定開始 ElseIf 開始行2 = 1 Then '(1-3-9)1は駄目 MsgBox "【1】は指定できません。(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf 開始行2 > 最終行 Then '(1-3-10)●入力値が最終行を超える MsgBox "【" & 開始行2 & "】" & "行以降はデータがありません。(>_<)" _ & vbCr & "再入力してください", vbCritical, "エラー!!" Else '(1-3-11)1~10以外の場合 Exit Do 'Doを抜ける End If '1-3 11項目終了 Else '(分岐1-4)数値以外の場合 MsgBox "数値以外は駄目です(>_<)" & vbCr & "再入力してください", _ vbCritical, "エラー!!" End If '1~4終了 Loop 質問 = MsgBox("最終行まで処理しますか?", vbYesNo + vbQuestion) Select Case 質問 Case vbNo Do 終了行 = Application.InputBox("終了行を" & vbCrLf & _ "数字で入力してください") If 終了行 = "" Then MsgBox "【空白】は指定できません(>_<)", vbCritical, "エラー!!" ElseIf 終了行 = "False" Then If MsgBox("終了します", vbOKCancel + vbExclamation, "確認") = vbOK Then Exit Sub End If ElseIf IsNumeric(終了行) Then 終了行2 = StrConv(終了行, vbNarrow) If InStr(終了行2, ".") Then MsgBox "【小数点】は駄目です。(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf 終了行2 <= 0 Then MsgBox "負(マイナス)の数は駄目です(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(終了行2, "+") Then MsgBox "【+】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(終了行2, "-") Then MsgBox "【-】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(終了行2, ",") Then MsgBox "【,】はいれては行けません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(終了行2, "E") Then MsgBox "【E】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(終了行2, "D") Then MsgBox "【D】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf 終了行2 <= 開始行2 Then'●判定 MsgBox "入力した値は" & vbCr & "開始行以前です。(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" Else Exit Do End If Else MsgBox "数値以外は駄目です(>_<)" & vbCr & "再入力してください", _ vbCritical, "エラー!!" End If Loop 最終行 = 終了行2 '最終行の値を終了行2に変更 Case vbYes 'Yesの場合 End Select '最終行の値は変更せず次の処理へ

  • VBSでサーバからのファイルコピーができません

    下記ソースについて、コピー元ファイルがDやCドライブにあるものは 指定したコピー先にファイルを貼り付けることができるのですが、 コピー元がサーバー上である場合、指定したコピー先にファイルが 貼りつきません。何か特別な処理等が必要でしょか? ご教授ください。 Dim fs Dim msg Dim f Dim copyFrom copyFrom = Array("D:\VBS\", "D:\VBS\AB\") Dim Ar Const copyTo = "D:\VBS\コピー先\" Do '日付入力のインプットボックスを出力 hizuke = InputBox("日付を入力してください。" & vbCr & vbCr & "例)2000-01-01") 'インプットボックスの入力値が空白である If hizuke = "" Then '日付入力を促すメッセージ出力 MsgBox "日付を入力してください。" Exit Do End If 'インプットボックスの入力値が10文字である If Len(hizuke) = 10 Then 'エラーが発生しても次の処理をすすめる On Error Resume Next '指定した日付の確認ダイアログを表示 msg = MsgBox(hizuke & "でよろしいですか?", vbYesNoCancel) '日付の確認ダイアログでYesを選択 If msg = vbYes Then For Each Ar In copyFrom MsgBox(Ar) 'ファイルオブジェクトを作成 Set fs = CreateObject("Scripting.FileSystemObject") 'コピー元フォルダに存在するファイルを読み込む For Each f In fs.GetFolder(Ar).Files '指定した日付を含むファイル名を検索 If InStr(f.Name, hizuke) > 0 Then MsgBox(copyFrom & "フォルダ") MsgBox(f.Name & "名前") fs.CopyFile Ar & f.Name, copyTo End If Next Next Exit Do Else Exit Do End If Else MsgBox("入力値が不正です。") End If Loop

  • エクセルのInputBoxについて教えてください。

    エクセル2010です。 InputBoxについて教えてください。  負数以外の数値を受け取りたいのです。 以下のようにやってみました。 Sub test001() Dim ans As Double ans = Application.InputBox("数値を入力", Type:=1) If ans = False Then MsgBox "キャンセル" Exit Sub ElseIf ans < 0 Then MsgBox "負数は不可。" Call test Else MsgBox ans & "を受け取りました。" End If End Sub 一応、これで動くのですが、問題は数値0を入力された場合です。 0はFalseと認識されるようで、キャンセルとなってしまいます。0は0という数値で受け取りたいのです。 試行錯誤の結果、Type:=1をやめ、変数ansをVariantにして If ans = “False” Then と、Falseをダブルクォーテーションでくくると、0を数値としてくれるようです。でも理屈がわかりません。変数ansにキャンセルボタンで帰ってくるのはBooleanのFalseであり、Stringの”False”ではないと思うのですが。 Sub test002() Dim ans ans = Application.InputBox("数値を入力") If ans = "False" Then MsgBox "キャンセル" & TypeName(ans) Exit Sub ElseIf ans = "" Then MsgBox "未入力" & TypeName(ans) Call test002 ElseIf Not IsNumeric(ans) Then MsgBox "数値ではありません。" & TypeName(ans) Call test002 ElseIf ans < 0 Then MsgBox "負数は不可。" & TypeName(ans) Call test002 Else MsgBox ans & "を受け取りました。" & TypeName(ans) End If End Sub あと、もうひとつ質問は、数値以外の入力があった場合、再度入力させるためいちいちCall test002 を入れてますが、このやり方でただしいのでしょうか?

  • エクセルVBA Inputboxについて教えてください。

    InputBoxの使い方について教えてください。 テストで下記のように書いてみました。 Sub input_test2() ans = InputBox("質問!適当に数字を入れてね") MsgBox Application.WorksheetFunction.IsNumber(ans), vbInformation, "入力判定" If Application.WorksheetFunction.IsNumber(ans) Then If ans = 0 Then MsgBox "入力されたのは、 0", vbInformation, "回答" If ans = 1 Then MsgBox "入力されたのは、 1", vbInformation, "回答" If ans = 2 Then MsgBox "入力されたのは、 2", vbInformation, "回答" If ans = 3 Then MsgBox "入力されたのは、 3", vbInformation, "回答" If ans >= 4 Then MsgBox "入力されたのは、 4以上", vbInformation, "回答" Else MsgBox "入力は数字でしてください!", vbExclamation, "お願い" End If End Sub 1.入力が数値ならTRUEがかえると思ったのですが、何を入れてもFALSEしかかえりません。どこがまずいのでしょうか? 2.表示されるInputBoxのサイズが随分横に長いのですが、サイズを変える方法はあるのでしょうか? 3.MsgBoxの"入力判定"や”回答”ようにInputBoxにも最上行に日本語を表示させる方法はないでしょうか? 以上、よろしくお願いいたします。