• ベストアンサー

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と表示したいんですがどうしたらいいですか? よろしくお願いします

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

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.3

[ANo.1] の DOUGLAS_ です。 ※失礼いたしました。 >ElseIf 0 < bitrate < 150 Then は無効でしたね(「0 < bitrate」の部分のみの判断しかしてくれません)。 >If bitrate <= 0 Then で始まっていますので、「ElseIf」は 0 < bitrate に決まっていますから、冗長な条件指定になります。 ElseIf bitrate < 150 Then で十分ですが、 bitrate >= 150 の場合は、前回答でしたら、最初に戻ってしまいます。 ※これも、余談ですが >3:アワーをhour、ミニッツをminuteと表示したい 「msgC」・「msgD」が小数で入力された場合のお話でしたら、それぞれ Hour(num3 / 86400) Minute(num3 / 86400) で取得できます。

その他の回答 (3)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.4

繰り返しにおける継続条件と終了条件ですね。 操作している人が納得するまで、つまり「はい」と 応えるまでループする訳ですね。 メッセージの変更は単に文字列を直すだけです。 msgA = "時間(hour)を入力してください" msgB = "時間(minute)を入力してください"Answer = vbNo Do Until Answer = vbYes     msgC = inputbox(msgA,"ビットレート自動計算機","半角で入力")     msgD = inputbox(msgB,"ビットレート自動計算機","半角で入力")     ★=中略=     Answer = msgbox("ビットレートが" & bitrate & _         "になりますが、よろしいですか?",vbyesno) Loop msgbox "適正ビットレートは" & bitrate & "です"

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.2

一例です。 '変数 msgA = "時間(アワー)を入力してください" msgB = "時間(ミニッツ)を入力してください" Do 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 And bitrate < 150 Then If MsgBox("ビットレートが" & bitrate & "になりますが、よろしいですか?", vbYesNo) = vbNo Then bitrate = 0 End If End If Loop Until bitrate > 0 bitrateが0より大きい場合にループを抜けるようにして、0<bitrate<150での確認メッセージに対してNoだった場合に、bitrateを0にしてループさせています。 >3:アワーをhour、ミニッツをminuteと表示したいんですがどうしたらいいですか? えぇっと、、、好きなように表示させればいいじゃないですか。 と思ったのですが、何に困っているのでしょうか?

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.1

>1:「動画時間が長すぎます」のあとに最初に戻りたい >2:elseifでyesボタンを押したときは処理を続けて、 >  noボタンを押したときは最初に戻りたい '変数 Do msgA = "時間(アワー)を入力してください" ・ ・ ・ ElseIf 0 < bitrate < 150 Then Response = MsgBox("ビットレートが" & bitrate & "になりますが、よろしいですか?", vbYesNo) If Response = vbYes Then Exit Do End If Loop MsgBox "適正ビットレートは" & bitrate & "です" >3:アワーをhour、ミニッツをminuteと表示したい  お尋ねの意味が解りません。   <(_ _)>

関連するQ&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 教えて!

    こんばんは、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つを教えて頂きたいです。

  • エクセルの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 を入れてますが、このやり方でただしいのでしょうか?

  • vbsのmsgboxランダム表示について

    つい先日、vbsをいじりだしたばかりの初心者です。 このプログラムなんですが・・・ msgbox("冒険はじまりー"),,("冒険") msgbox("てくてく") i = msgbox("分かれ道だ" & vbCrLf & "はい:左 いいえ:真ん中 キャンセル:右",3,"わかれみち") if (i=6) then msgbox("いきどまり") msgbox("ゲームオーバー") elseif (i=2) then msgbox("いきどまり") msgbox("ゲームオーバー") else msgbox("モンスターがあらわれた",48,"バトル") myhp=10 mymp=5 youhp=20 for i=0 to 10 step 0 num=msgbox("HP(" & myhp & ")" & vbCrLf &_ "MP(" & mymp & ")" & vbCrLf &_ "モンスターHP (" & youhp & ")" & vbCrLf &_ "こうげき:はい かいふく:いいえ まほう:キャンセル",3,"バトル") if(num=6)then myhp = myhp-1 mymp = mymp+1 youhp = youhp-1 msgbox("こうげき!" & vbCrLf &_ "モンスターHP-1" & vbCrLf & "自分のHP-1" & vbCrLf & "自分のMP+1") elseif (num=7) then myhp = myhp+3 mymp = mymp-3 msgbox"HPが3回復 MPが3減った" else youhp = myhp-2 mymp = mymp-2 msgbox"まほうをつかった MP-2 モンスターHP-2" end if if(youhp=0)then msgbox"モンスターに勝った!",64,"やったね" msgbox"おしまい" exit for elseif(myhp=0)then msgbox"負けた",16,"ざんねん" msgbox"ゲームオーバー",16,"ざんねん" exit for end if next end if これの、攻撃とか魔法とかのところでmsgboxにランダムで違うメッセージを出すことは できますか?(3パターンくらいです) 調べてみても書き方がよくわかりませんでした・・・。 それと、ゲームオーバーの場合、もう一度やるかどうかの選択メッセージの出し方も 教えていただけると嬉しいです。 質問が多くてごめんなさい、どうぞよろしくお願いしますm(_ _)m

  • 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 '最終行の値は変更せず次の処理へ

  • VBAについて

    こんばんは、VBA初心者で勉強をはじめたばかりで、自分で例題を作り調べながら途中まで作成しましたが、行き詰ったのでご教授をお願いします。ECXEL2000を使用しています。 ○やりたいこと。 ・INPUTBOXを表示させ、年齢を入力してもらう。 ・年齢が、18~64歳までならA2セルに入力年齢を表示させる。     17以下は「就職前」、65歳以上は「退職済」とBOXで表示させ、セルには表示させない。 ・A2セルに入力したら、A3セルをセレクトする。 ・INPUTBOXを表示させ、再度年齢入力をしてもらい、既にA2セルに年齢が入力済みであれば、A3に表示する。これをA10セルまで行えるようにする(その都度マクロの実行で実施) ○作成したマクロです。・・・やりたいことがすべて記述できていません。 Sub 年齢入力() 'INPUTBOXに入力される年齢の変数   Dim r As Integer 'データの最終行を代入する変数 Dim k As Long r = InputBox("年齢入力") k = Rows.Count Range("a2").Select If 17 < r And r < 65 Then MsgBox ("入力します") Range("a2") = r ElseIf r >= 65 Then MsgBox ("退職済") ElseIf r <= 17 Then MsgBox ("就職前") End If Cells(k, 1).End(xlUp).Offset(1).Select End Sub 以上のマクロのどこを変更すれば、私のやりたいことができるようになりますでしょうか?よろしくお願いします。

  • 作成したVBAの改善点をお願いします(初心者)。

    こんばんは。VBAを勉強中ですが、参考書等を見ながら簡単なプログラムを作ってみましたが、もっと簡単な記述やベテランの方から見た改善点等があれば教えていただければと思います。(EXCEL2000を使用しています)。 ★内容 ・inputboxを使用し印刷枚数を入力し、印刷するものです(印刷枚数は1枚以上31枚以下)。 ・(K23)のセルには通し番号が入っており、印刷した枚数分だけ通し番号に1ずつ足していく。 Sub 印刷() Dim aaa As Integer aaa = InputBox("印刷枚数を入力してください", "印刷枚数", "") If 1 <= aaa And aaa <= 31 Then MsgBox "印刷を開始します" ElseIf aaa = "" Then MsgBox "キャンセルされました" ElseIf IsNumeric(aaa) = False Then MsgBox "入力内容が違います" ElseIf aaa <= 31 Then MsgBox "31日までの範囲で入力してください" Else For i = 0 To aaa Worksheets(1).PrintOut Worksheets(1).Range("k23").Value = Range("k23") + 1 Next i End If End Sub 一応、動きますが、勉強中なのでご教授をお願いいたします。

  • ifでの条件分岐

    .net vb2005でプログラミングしています。 2つのテキストボックスがあり、その名前をtextbox1,textbox2 , 変数の代入をtx1、tx2とします。 どちらも半角数字で300までしか入力できません。 さらに、tx1に入力されるとtx2も必ず入力される必要があります。 tx1が未入力の場合はtx2も未入力である必要があります。 最初にtx1の文字数が0か確認し、入っている場合、居ない場合と ifで条件分岐させましたが うまくいきません。。 アドバイスいただきたいと思います。 Dim tx1,tex2 As Integer If Len(TextBox1.Text) = 0 Then flg = 0 ElseIf Regex.IsMatch(TextBox1.Text, "^[0-9]{1,3}$") Then tx1= Val(TextBox1.Text) tx1 = Convert.ToInt32(iptx5) '文字列をInteger型(数字型)に変換 Else MsgBox("300までの数字で入力して下さい", vbCritical, "入力エラー") TextBox1.Clear() Exit Sub End If If tx1 > 255 Then flg = 1 MsgBox(ipm_msg2, vbCritical, "入力エラー") TextBox1.Clear() End If '********************************************************************** If Len(TextBox1.Text) = 0 Then flg = 0 exit sub ElseIf Regex.IsMatch(TextBox2.Text, "^[0-9]{1,3}$") Then tx2 = Val(TextBox2.Text) tx2 = Convert.ToInt32(tex2) Else MsgBox(ipm_msg1, vbCritical, "入力エラー") TextBox2.Clear() Exit Sub End If '**255以上なら入力不可** If iptx6 > 255 Then flg = 1 MsgBox(ipm_msg2, vbCritical, "入力エラー") TextBox6.Clear() Exit Sub End If

  • VBSの内容を編集したい(アクションを増やしたい)

    現在のVBS記述は以下のとおりです。 NUM = MsgBox("メール" & vbCrLf & "日報" & vbCrLf & "緊急案件" & vbCrLf & "引継ぎ・持ち越しアクション" & vbCrLf & "すべて確認しましたか?", vbYesNo + vbCritical, "お疲れ様です。") if (num =VBYES) then msgbox "モニターを消して業務終了してください。" & vbCrLf & "お疲れ様でした♪",0,"OK!"(※1) elseif (NUM =VBNO) then msgbox "すべてチェックしてください!",0,"注意" Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run "z:\v\hhc\本部\業務処理関係\終了チェック.vbs" Set WshShell = Nothing msgbox "業務終了前には、必ずチェックしてください!" end if 上記(※1)でOKを押したときに、c:\s.lnkを実行するようにしたいのですが、どのように記述すればよいでしょうか? 当方、VBは疎く、この記述を作った担当者が退職したために、動かすことができなくなり困っております。

  • エクセル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にも最上行に日本語を表示させる方法はないでしょうか? 以上、よろしくお願いいたします。

専門家に質問してみよう