[三流君] −−> [VBAで楽しく] −−> [バックナンバー一覧]
−−> No.019 Exit Subで途中退場する

Exit Subで途中退場する

メルマガ発行内容

<Exit Subで途中退場する>

こんにちは、三流プログラマーKen3です。 今回は、 Exit Subで途中退場(処理を抜ける)処理を書いてみたいと思います。 (これも、過去のメルマガを直したものだけど) いつものセリフで、そんなたいしたことじゃないので今回もご安心を。 /* * 1. プログラムを書く時、処理の流れを軽く書いてから作る */ 前回までに(飛び飛びですが)、 ・乱数の発生、 ・InputBoxで値を受け取る、 ・If文で判断 などをやりました。 復習を兼ねて、 ユーザーに1.グー2.チョキ3.パーを入力させる。 入力値をチェックし123以外ならエラーを表示してプログラムを抜ける(今回のテーマ) コンピュータの手を乱数で決める。 勝負の結果を判断する。 結果を表示する。 をやってみたいと思います。 プログラムを書く時、頭の中で考えて、いきなり書ける人は少ないと思います。 *ある意味、頭に浮かんじゃえば、あとはできたと同じって感覚もありますが。 私はよく、紙の上に落書きを書くのですが、みなさんは? そこまでしなくっても、先にコメントを書いておくと作成が楽かもしれません。 Sub test() '初期処理 'ユーザーにグ・チ・パを入力させる '入力値の判断、エラーならメッセージを表示させ抜ける 'コンピュータの手を決定 '結果判断と表示 End Sub なんて、軽く書いておきます。 *少しカッコ悪いけど、ダマされたと思って試してみて下さい。 /* * 2.Exit Sub で 処理を抜ける */ さて、ここから本題の、Exit Sub で 処理を抜けるです。 いままでやった、命令を1つ1つ書いていきます。 Sub test2() '初期処理 Dim strNO As String '(*1)値を受け取るため文字型の変数を宣言 'ユーザーにグ・チ・パを入力させる '(*2) InputBoxで入力してもらう strNO = InputBox("1.グー 2.チョキ 3.パー", "アナタの手を入力で下さい") '入力値の判断、エラーならメッセージを表示させ抜ける '(*3)If文で1,2,3以外を判断する If strNO <> "1" And strNO <> "2" And strNO <> "3" Then MsgBox "[" & strNO & "]は不正な入力です" Exit Sub '<--(*4)Exit Subを使用してここでプログラムを抜ける End If 'test表示 MsgBox "strNO = " & strNO 'コンピュータの手を決定 '結果判断と表示 End Sub いきなり、今日のテーマを解説してしまうのですが、 下記の場所、 '(*3)If文で1,2,3以外を判断する If strNO <> "1" And strNO <> "2" And strNO <> "3" Then MsgBox "[" & strNO & "]は不正な入力です" Exit Sub '<--(*4)Exit Subを使用してここでプログラムを抜ける End If ポイントの (*4)Exit Sub この命令で、Sub関数を抜けてしまいます(その後の命令は実行されません) なんか別な言い方無いの?三流君? えっと、強制的な終了のイメージや途中で講座を投げちゃう感じかなぁ。 例)講座/トレーニングが続くのに途中で辞めてしまう。 ・変数の講座 ・If文の講座   ・   ・   ・ ・Exit Sub 後ろに講座(命令)があるのに投げ出して終了(笑うに笑えない(爆)) ・For文の説明 ・Function関数の説明 こんな感じで、後ろに処理が残っているのに、 途中で抜け出したい時に使います。 1でもなく、2でもなく、3でもないときは、 エラーなのでメッセージを表示して、処理を終わらせたかったので、 '(*3)If文で1,2,3以外を判断する If strNO <> "1" And strNO <> "2" And strNO <> "3" Then の <> "1" が、1以外の確認で、 And でつなげて、次の <> "2" <> "3" と条件を判断後、 MsgBox "[" & strNO & "]は不正な入力です" とメッセージを表示 Exit Sub '<--(*4)Exit Subを使用してここでプログラムを抜ける ^^^^^^^^ で関数からバイバイしてたんですね。 Exit Sub も、プログラムの流れの制御だったんですね。 なんとなく、わかりましたか? /* * 3.続きはIf文の嵐で判断しまくり(笑) */ これで、終わってもよかったんだけど、 おまけで進めると、 やっと、ユーザーさんの正しい手(1から3)が入力されたので、 残っている、 'コンピュータの手(1から3でグー・チョキ・パー) と '結果の判断です。 Sub test3() '初期処理 Dim strNO As String '(*1)値を受け取るため文字型の変数を宣言 Dim nCON As Integer '(*5)コンピュータの手1〜3の数値が入る Dim nPC As Integer '(*6)ユーザーさんの手 'ユーザーにグ・チ・パを入力させる '(*2) InputBoxで入力してもらう strNO = InputBox("1.グー 2.チョキ 3.パー", "アナタの手を入力で下さい") '入力値の判断、エラーならメッセージを表示させ抜ける '(*3)If文で1,2,3以外を判断する If strNO <> "1" And strNO <> "2" And strNO <> "3" Then MsgBox "[" & strNO & "]は不正な入力です" Exit Sub '<--(*4)Exit Subを使用してここでプログラムを抜ける End If 'コンピュータの手を決定 Randomize ' 乱数発生ルーチンを初期化します。 nCON = Int((3 * Rnd) + 1) '(*7) 1 から 3 までの乱数を発生させます。 '結果判断と表示 'ユーザーの手を表示する nPC = Val(strNO) '(*8)Val関数で数値型に変換する If nPC = 1 Then MsgBox "あなたの手はグーです" If nPC = 2 Then MsgBox "あなたの手はチョキです" If nPC = 3 Then MsgBox "あなたの手はパーです" 'コンピュータの手を表示する If nCON = 1 Then MsgBox "コンピュータの手はグーです" If nCON = 2 Then MsgBox "コンピュータの手はチョキです" If nCON = 3 Then MsgBox "コンピュータの手はパーです" '結果の判断 '(*9)まず、引き分けを判断 If nPC = nCON Then MsgBox "引き分けです" '(*10)次に自分が勝ちの手を判断 グーvsチョキ,チョキvsパー,パーvsグー If nPC = 1 And nCON = 2 Then MsgBox "アナタの勝ちです" If nPC = 2 And nCON = 3 Then MsgBox "アナタの勝ちです" If nPC = 3 And nCON = 1 Then MsgBox "アナタの勝ちです" '(*11)コンピュータが勝ちか判断 グーvsパー,チョキvsグー,バーvsチョキ If nPC = 1 And nCON = 3 Then MsgBox "私(コンピュータ)の勝ちです" If nPC = 2 And nCON = 1 Then MsgBox "私(コンピュータ)の勝ちです" If nPC = 3 And nCON = 2 Then MsgBox "私(コンピュータ)の勝ちです" End Sub 簡単に続きを解説すると、 (*5)(*6)で Dim nCON As Integer '(*5)コンピュータの手1〜3の数値が入る Dim nPC As Integer '(*6)ユーザーさんの手 と数値型の変数を定義してます。 この変数(nCON,nPC)に、手を入れます。 (*7)で nCON = Int((3 * Rnd) + 1) '(*7) 1 から 3 までの乱数を発生させます。 Rnd関数で乱数を発生させ、コンピュータの手を決めます。 InputBoxで文字が入力されているので、 (*8)で nPC = Val(strNO) '(*8)Val関数で数値型に変換する Val関数を使用して、数値に変換してます。 上のIf文( If strNO <> "1" And strNO <> "2" And strNO <> "3" Then ) で、 データの値がキレイになっているので(不正な値は通らないので、) Val関数で単純に数値に変換してます。 (*9)で、 数値が同じ、手が同じか判断して、引き分けを表示しています。 '(*9)まず、引き分けを判断 If nPC = nCON Then MsgBox "引き分けです" 下記のそのまま判断する書き方もアリだけど、 If nPC = 1 And nCON = 1 Then MsgBox "引き分けです" If nPC = 2 And nCON = 2 Then MsgBox "引き分けです" If nPC = 3 And nCON = 3 Then MsgBox "引き分けです" おいおい、ひねくれてるね三流君は(笑) まぁ、普通に出した手が同じだったらにして、 If nPC = nCON Then を使いました。 で、次は?何? 次はですね、 (*10)で、先に自分の勝ちを判断しています。 '(*10)次に自分が勝ちの手を判断 グーvsチョキ,チョキvsパー,パーvsグー If nPC = 1 And nCON = 2 Then MsgBox "アナタの勝ちです" If nPC = 2 And nCON = 3 Then MsgBox "アナタの勝ちです" If nPC = 3 And nCON = 1 Then MsgBox "アナタの勝ちです" なんかわかりにくいなぁ? なに?この1と2だったらって? えっと1がグー、2がチョキ、3がパーなので、 グー(1) vs チョキ(2), チョキ(2) vs パー(3), パー(3) vs グー(1) を比べてます。 もっと何か別な書き方無いの? はい、次回のネタで書かせてもらいます。(ネタばれたかなぁ?) 次も同様の処理で、しつこくコンピュータの勝ちを調べてます。 '(*11)コンピュータが勝ちか判断 グーvsパー,チョキvsグー,バーvsチョキ If nPC = 1 And nCON = 3 Then MsgBox "私(コンピュータ)の勝ちです" If nPC = 2 And nCON = 1 Then MsgBox "私(コンピュータ)の勝ちです" If nPC = 3 And nCON = 2 Then MsgBox "私(コンピュータ)の勝ちです" グー(1) vs パー(3), チョキ(2) vs グー(1), バー(3) vs チョキ(2) ですね。 やはり三流君らしい汚いプログラムだねぇ、 もっとスッキリいかないの?スッキリと? 期待しないで、待ってるよ。 /* * 4.終わりの挨拶 */ 今回は、 ・Exit Subで途中でプログラムを抜ける でした。 今回のテストサンプルhttp://www.ken3.org/vba/lzh/vba019.lzh に保存しました。 解凍してTest019-Book.xlsを開いて、 動かしていろいろと確認(イタズラ)してください。 Alt+F11でVBAのプログラム編集画面に切り替わるので、 メッセージを修正したり、 Select Case文に直してみるとか、 オレならこの書き方だなぁ、、と遊んでください。 拾い読みして、 1つでも何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。


ページフッター

ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、

種類別のリンク や 広告など

気になったジャンル↓を選択してください。

人気記事(来場者が多いTOP3):
[VBAでIE,WebBrowserを操作]・・・VBAでIE,WebBrowserを操作する サンプルです
[Access から Excel 連携 CreateObject("Excel.Application")]・・・AccessからExcelを操作したりデータの書き出しなどです
[VBAでOutlookの操作 CreateObject("Outlook.Application" )]・・・VBAからOutlookを使い、メール関係を処理するサンプルです
↑上記3つみたいなCreateObjectで他のアプリケーションを操作するサンプルが人気です。

Excel関係:
[Excel UserFormを操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
[ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
[Excel関係 関数、その他]・・・その他Excel関係です

Access関係:
[Access UserForm/サブフォーム 操作]・・・アクセスでフォームを使ったサンプルです
[Access レポート操作]・・・レポートを操作してみました
[Access クエリーやその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です

その他:VBAの共通関数やテキストファイルの操作など
[VBAでテキストファイル(TextFile)の操作]・・・普通のテキストファイルを使ったサンプルです
[VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます

開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う]

仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力]

※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。
※※読んで、気分を悪くされたらスミマセン。

Blogとリンク:[三流君の作業日記]/ [VBAやASPのサンプルコード]/ 広告-[通販人気商品の足跡]



[三流君(TOP ken3.org へ戻る)] / [VBA系TOPへ] / [VBA系バックナンバー目次へ移動]