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

このQ&Aのポイント
  • VBSのmsgboxでランダムなメッセージを表示する方法を教えてください。
  • また、ゲームオーバーの場合に再度プレイするかどうかの選択メッセージを表示する方法も教えてください。
  • 初心者にもわかりやすい書き方を教えていただけると助かります。
回答を見る
  • ベストアンサー

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

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

MsgBox "まほうをつかった" n = Int(Rnd * 3) + 1 '1~3の乱数発生、それぞれ1/3の確立 If n = 1 Then   MsgBox "効かなかった" ElseIf n = 2 Then   MsgBox "○○ポイントのダメージを与えた" ElseIf n = 3 Then   MsgBox "相手は逃げた" End If MsgBox "まほうをつかった" n = Int(Rnd * 10) + 1 '1~10の乱数発生、それぞれ20%、30%、50%の確立 If n < 3 Then   '20%の確立   MsgBox "効かなかった" ElseIf n < 6 Then   '30%の確立   MsgBox "○○ポイントのダメージを与えた" Else   '50%の確立   MsgBox "相手は逃げた" End If >もう一度やるかどうかの選択メッセージの出し方も GoTo ステートメント http://msdn.microsoft.com/ja-jp/library/69whc95c(v=vs.80).aspx

tanma7
質問者

お礼

素晴らしいです、ありがとうございます!! こう書けばよかったんですね(^^)

その他の回答 (1)

  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.1

vbs 使ったことないですが、 dim a as integer randomize a = int((3*rnd)+1) とすると、aにランダムで1,2,3のいずれかの値が入ります。 中を(5*rnd)とすると、1~5のいずれかになります。 http://www.kanaya440.com/contents/script/vbs/function/num/rnd.html

tanma7
質問者

お礼

ご回答ありがとうございました(´▽`)

関連するQ&A

  • 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は疎く、この記述を作った担当者が退職したために、動かすことができなくなり困っております。

  • 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 教えて!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 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  • msgboxの表示

    A列の値とC列の値をMsgboxに表示するにはどうしたらいいのでしょうか?C列で一番高い商品とその品名A列を表示させたいのですが・・ Sub hinmei() Dim i As Long For i = 2 To Range("C65535").End(xlUp).Row Dim x As Long Dim a As Long x = Cells(i + 1, 5) If Cells(i, 5).Value < x Then a = x End If Next MsgBox a End Sub

  • Msgboxのループ

    Do Until k > 12 If lbl_TenNm2(k).Caption <> "" Then Result = MsgBox("☆☆☆本日の品は☆☆☆" & vbCrLf & _ "『" & ラベル店名(0).Caption & "』" & "の" & vbCrLf & _ ラベル(k) & "を" & テキスト(k).Text & "個" & vbCrLf & _ "でよろしいですか?", vbYesNo, "確認") End If k = k + 1 Loop メッセージボックスで配列のラベルに入ったものを一度に表示したい場合どのような方法をとればよいのかまったく分かりません。もし、何か良い方法がおわかりの方がいましたら、教えてください。 お願いします。 上記の方法だと、メッセージボックスがその配列の数だけ出てきてしまいます。

  • 乱数の利用

    僕の通う中学校では、乱数を利用してプログラムを作成することになりました。そしてプログラムを作りましたがステートメントがないと出てきます。どう解決すればよいでしょうか?これがプログラムです。 Dim a,b,c,d,e,f,g a=msgbox("幸せですか?",4) if a=6 then const b="運勢" randomize b=int(rnd*10) select case b case 0,1,2 c=messagebox("吉でした。彼女はいますか?",4) if c=6 then msgbox"90%",,b elseif c=7 then msgbox"60%",,b end if case 3,4,5 d=msgbox("凶でした。友達はいますか?",4) if d=6 then msgbox"60%",,b elseif d=7 then msgbox"20%",,b end if case 6,7 e=msgbox("末吉でした。",4) if e=6 then msgbox"60%",,b elseif e=7 then msgbox"40%",,b end if case 8 f=msgbox("大凶でした。夢はありますか?",4) if f=6 then msgbox"30%",,b elseif f=7 then msgbox"10%",,b end if case else msgbox"100%",,b end if elseif a=7 msgbox"0%" end select

  • IEブラウザよりmsgboxを手前に表示したい

    当方 IE9+2007です。 Sub yahoo() Dim objIE As Object Dim i As Long Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" Do Until objIE.Busy = False And objIE.ReadyState = 4: Loop If objIE.Document.Body.innerHTML Like "*こんにちは、*さん*" Then i = MsgBox("別のIDでログインしています!続けますか?", vbYesNo + vbApplicationModal) If i = 7 Then End End If End Sub このような事がやりたいのですが、 IEブラウザを立ち上げてメッセージボックスをvbApplicationModalで表示させても ブラウザより裏側で表示されてしまいます。 If objIE.Document.Body.innerHTML Like "*こんにちは、*さん*" Then i = MsgBox("別のIDでログインしています!続けますか?", vbYesNo + vbApplicationModal) If i = 7 Then End End If objIE.Visible = True という順番にすればよいのですが、他のコードの関係もあってメッセージボックスより先にブラウザを表示させたいのです。 そんな事は可能でしょうか? ご回答よろしくお願いします。

  • vba スケジュール更新マクロ研究中(長文です)

    いつもお世話になります。 私の会社では、スケジュール管理するにあたり、1日を3つに分けています。 つまり、「午前」「午後」「夜間」「午前午後」「午後夜間」「全日」の6種になります。 只今私は、スケジュールが更新されたときに、上書きして変更点をメッセージボックスで返すマクロを考えています。 (趣味の範囲ですので締め切りはないのですが、なんせVBA始めて1ヶ月目なもんですから四苦八苦してます><) そこで、とりあえず下記のような「更新前のスケジュール区分を検知してメッセージで返す」ところまで出来ました。 (もう少しスッキリできないものかと思っております。) ここに「更新版と見比べて変更し、メッセージで返す」という働きを足していこうと思っています。 が、別々にコードが書けても、それを合体させようとなると、どうやったらいいのか皆目見当が付きません。 難解に思われるのは、結合セルと入力済みデータの扱いです。 例えば、とある1日に対して、「午前」「午後」「夜間」と別々の予定が入ってたとします。 予定に変更が出て「夜間」が「全日」になってしまったとします。 コードに「生き残っているのは夜間だ」という判断をさせることは出来ませんよね? (というのも、区分が変更された場合、文字列が一致しているとは限らないのです。) 対話型にして、チェックボックスみたいな形で選択させるのがいいのでしょうか? オーバースペックで耳から煙が出そうです・・・ とりあえず下記がコードです。 "strage1"を古いスケジュール、"strage2"を更新版としています。 つたない記述ですが、ヒントをご教授くださいませ。 ------------------------------------ Sub 何を書き換えたかMsgBox2() Dim i As Integer, j As Integer Dim myMsg As String Dim myold As Worksheet, mynew As Worksheet Set myold = Sheets("strage1") Set mynew = Sheets("strage2") j = 5 For j = j To 35 i = 6   For i = i To 8     If IsEmpty(myold.Cells(j, i)) And Not IsEmpty(mynew.Cells(j, i)) Then       myMsg = myMsg & mynew.Cells(j, i) & "が追加になりました" & vbCrLf     ElseIf Not IsEmpty(myold.Cells(j, i)) And IsEmpty(mynew.Cells(j, i)) Then       myMsg = myMsg & myold.Cells(j, i) & "がキャンセルになりました" & vbCrLf     ElseIf myold.Cells(j, i) <> mynew.Cells(j, i) Then       myMsg = myMsg & myold.Cells(j, i).Value & "から" & mynew.Cells(j, i) & "に変更しました" & vbCrLf     End If       myold.Cells(j, i).Value = mynew.Cells(j, i)   Next Next MsgBox myMsg End Sub --------------------------------------------- Sub 区分識別3() Dim i As Integer Dim myMsg As String i = 5 For i = i To 35 If Cells(i, 6) <> "" Then   If Cells(i, 6).MergeArea.Count = 3 Then     myMsg = myMsg & i - 4 & "日、全日枠の" & Cells(i, 6).Value & "です。" & vbCrLf   ElseIf Cells(i, 6).MergeArea.Count = 2 Then     myMsg = myMsg & i - 4 & "日、午前午後枠の" & Cells(i, 6).Value & "です。" & vbCrLf   Else     myMsg = myMsg & i - 4 & "日、午前枠の" & Cells(i, 6).Value & "です。" & vbCrLf   End If End If If Cells(i, 7) <> "" Then   If Cells(i, 7).MergeArea.Count = 2 Then     myMsg = myMsg & i - 4 & "日、午後夜間枠の" & Cells(i, 7).Value & "です。" & vbCrLf   Else     myMsg = myMsg & i - 4 & "日、午後枠の" & Cells(i, 7).Value & "です。" & vbCrLf   End If End If If Cells(i, 8) <> "" Then   myMsg = myMsg & i - 4 & "日、夜間枠の" & Cells(i, 8).Value & "です。" & vbCrLf End If Next MsgBox myMsg End Sub ------------------------------------------------------- 以上です。 よろしくお願いいたします。

  • Excel ユーザーフォーム呼び出し時エラー

    WindowsVista HomePremium Excel 2007 Microsoft Visual Basic 6.5 です。 Excelでユーザーフォーム(UserForm1)を作り、   Sub Auto_Open()     UserForm1.Show   End Sub で起動時に呼び出すようにしました。 確認のため、一度Excelを閉じ起動し直したところ正常に動作しました。 もう一度確認のため同じように再起動をすると、  実行時エラー '2110': コントロールが表示されていない、利用できない、またはフォーカスを持てないため、そのコントロールにフォーカスを移すことはできません。 と出て、それ以降何度やっても動作しなくなってしまいました。 解決法か原因がわかる方いらっしゃいましたら、ぜひご教授ください。よろしくおねがいします。 ユーザーフォーム関係のコードを以下に書いておきます。(内容は小遣い帳のようなものです。) ―――――――――――――――――――― Private Sub CommandButton1_Click() Dim NUM As Integer If TextBox1.Text = "" Then MsgBox "概要が記入されていません。" TextBox1.SetFocus GoTo 100 ElseIf TextBox2.Text = "" Then MsgBox "収支が記入されていません。" TextBox2.SetFocus GoTo 100 ElseIf ComboBox1.ListIndex = -1 Then MsgBox "収支の種類が選択されていません。" ComboBox1.SetFocus GoTo 100 End If Range("F6").Select NUM = 0 Do While ActiveCell.Offset(NUM, 0) <> "" NUM = NUM + 1 Loop ActiveCell.Offset(NUM, 0).Select ActiveCell = TextBox1.Value If CheckBox1 = True Then TextBox2 = -TextBox2 End If If ComboBox1.ListIndex = 0 Or ComboBox1.ListIndex = 1 Then ActiveCell.Offset(0, ComboBox1.ListIndex + 1) = TextBox2.Value Else ActiveCell.Offset(0, ComboBox1.ListIndex + 2) = TextBox2.Value End If TextBox1 = "" TextBox2 = "" CheckBox = Falses ComboBox1.ListIndex = -1 100 End Sub ―――――――――――――――――――― Private Sub CommandButton2_Click() Dim NUM As Integer If TextBox3.Text = "" Then MsgBox "移動金額が記入されていません。" TextBox3.SetFocus GoTo 100 ElseIf ComboBox2.Text = "" Then MsgBox "移動元が選択されていません。" ComboBox2.SetFocus GoTo 100 ElseIf ComboBox3.ListIndex = -1 Then MsgBox "移動先が選択されていません。" ComboBox3.SetFocus GoTo 100 End If Range("F6").Select NUM = 0 Do While ActiveCell.Offset(NUM, 0) <> "" NUM = NUM + 1 Loop ActiveCell.Offset(NUM, 0).Select ActiveCell = "移動" If ComboBox2.ListIndex = 0 Or ComboBox2.ListIndex = 1 Then ActiveCell.Offset(0, ComboBox2.ListIndex + 1) = -TextBox3.Value Else ActiveCell.Offset(0, ComboBox2.ListIndex + 2) = -TextBox3.Value End If If ComboBox3.ListIndex = 0 Or ComboBox3.ListIndex = 1 Then ActiveCell.Offset(0, ComboBox3.ListIndex + 1) = TextBox3.Value Else ActiveCell.Offset(0, ComboBox3.ListIndex + 2) = TextBox3.Value End If TextBox3 = "" ComboBox2.ListIndex = -1 ComboBox3.ListIndex = -1 100 End Sub ―――――――――――――――――――― Private Sub CommandButton3_Click() Unload Me End Sub ―――――――――――――――――――― Private Sub CommandButton4_Click() Unload Me End Sub ―――――――――――――――――――― Private Sub UserForm_Initialize() myarray1 = Array("収支", "クレジット", "郵便局", "机", "500", "1") For i = 0 To 5 ComboBox1.AddItem myarray1(i) ComboBox2.AddItem myarray1(i) ComboBox3.AddItem myarray1(i) Next i TextBox1.SetFocus End Sub

  • 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

専門家に質問してみよう