<入力結果の判断いろいろ>
こんにちは、 昔のメルマガを参考に楽して発行中の三流プログラマーKen3です。 今回は、 InputBox関数で簡単な値を受け取り、 If文などで判断処理を行います。 そろそろ知りたいユーザーFormの処理はまだ先かなぁ。 ツマラナイ解説で読者が逃げる前に、 なるほど!ってのを1つぐらい書かないとマズイんだけど。 今日は、いろいろな書き方してみるので、笑ってください。 いつものセリフで、そんなたいしたことじゃないので今回もご安心を。 *今回手抜きで画像とサンプル作ってません、、 /* * 1. InputBoxで入力、結果を単純に表示 */ まず、ユーザーから入力を受けつけないといけませんね、 で、知ってるのはInputBoxステートメントなので、 これを使用します。(フォーム入力はまだ先です、すみません) 初めは軽く、 1.グー 2.チョキ 3.パー を入力するプログラムを作成したいと思います。 流れは、 1.InputBoxでユーザーに入力させる 2.入力結果を判断し、結果を文字で表示する。 1の時、グー 2の時チョキ 3の時パー Sub test() Dim strNO As String '(*1)値を受け取るため文字型の変数を宣言 '(*2) InputBoxで入力してもらう strNO = InputBox("1.グー 2.チョキ 3.パー", "アナタの手を入力で下さい") '(*3) 結果を表示する If strNO = "1" Then MsgBox "グーを出しました" If strNO = "2" Then MsgBox "チョキを出しました" If strNO = "3" Then MsgBox "パーを出しました" End Sub (*1)は、文字型の値を受け取りたいので、宣言しています。 (*2)のInputBoxダイアログで、入力を行います。 (*3)で、入力結果を表示します。 簡単過ぎましたか? あれ?三流君がはじめに解説してたIf文って、 If strNO = "1" Then MsgBox "グーを出しました" End If とEnd Ifがあったのに、 If strNO = "1" Then MsgBox "グーを出しました" If strNO = "2" Then MsgBox "チョキを出しました" のでもいいの?End If無いよ? Then の 後ろに一行で書くことも出来るんですよ。 1命令の時は、短いので、この書き方が好きな人も居るし、 If strNO = "1" Then MsgBox "グーを出しました" End If って必ず書く人も居ます。 あっ、前にもチラっと書きましたね。 なんとなく書き方のコツ、違いがわかったけど。 これで、入力と表示、できたっぽいですね、 では、またね。次回のメルマガで会いましょう。 *速く次のメルマガの原稿書かなきゃね。 三流君チョット待ったぁ〜 なに?今日はもうカンバンだよ(閉店だよ) 何も入れないでリターンキー押された時どうなるか?やってみた? 4って入力したらどうなるの? OKじゃなくって、キャンセルボタン押されたら? あれ?何も表示されない・・・ そっか、Ifの条件式にあてはまらないから、 何も表示されないんだ。 ちっ、手間かけさせやがって じゃ1,2,3以外の時は、 「正しい値を入力して下さい」 と出しますか。 ちゃんとやってよね、まったく。テストしろよ。まぁそれが三流らしいのかな。 うるせえ〜(笑) /* * 2.<>とAndを入れて、1〜3以外を個別にチェック */ <>とAndを入れて、1〜3以外を個別にチェック Sub test2() Dim strNO As String '(*1)値を受け取るため文字型の変数を宣言 '(*2) InputBoxで入力してもらう strNO = InputBox("1.グー 2.チョキ 3.パー", "アナタの手を入力で下さい") '(*3) 結果を表示する If strNO = "1" Then MsgBox "グーを出しました" If strNO = "2" Then MsgBox "チョキを出しました" If strNO = "3" Then MsgBox "パーを出しました" '(*4)1,2,3以外か判断する If strNO <> "1" And strNO <> "2" And strNO <> "3" Then MsgBox "正しい値を入力して下さいね" End If End Sub (*4)の If strNO <> "1" And strNO <> "2" And strNO <> "3" Then こんな感じで、 <>演算子の等しくないを使って、 1でもなく2でもなく3でも無い時は、って判断してみました。 なにそれ?、その場当たり的な条件の追加方法は三流君らしいけど。 ハヤク、帰りたいんだよ。あと、何か質問あるの? プログラムの流れがなんか変じゃないですか? If strNO = "1" Then MsgBox "グーを出しました" If strNO = "2" Then MsgBox "チョキを出しました" If strNO = "3" Then MsgBox "パーを出しました" と1、2、3の判断をやってから、 また、 '(*4)1,2,3以外か判断する If strNO <> "1" And strNO <> "2" And strNO <> "3" Then MsgBox "正しい値を入力して下さいね" End If と、判断してるし。 うるせなぁ、動けばいいんだよ、動けば。 時間無いしメンドウだなぁ、まとめりゃいいんだろ、まとめれば。。。 /* * 3.OR使用とIf文をネストしてみました */ ほらよ、今度は、 OR使用とIf文をネストしてみたぞ。 Sub test3() Dim strNO As String '(*1)値を受け取るため文字型の変数を宣言 '(*2) InputBoxで入力してもらう strNO = InputBox("1.グー 2.チョキ 3.パー", "アナタの手を入力で下さい") '結果の表示 '(*5)1,2,3の正しい数値かはじめに確認する If strNO = "1" Or strNO = "2" Or strNO = "3" Then If strNO = "1" Then MsgBox "グーを出しました" If strNO = "2" Then MsgBox "チョキを出しました" If strNO = "3" Then MsgBox "パーを出しました" Else MsgBox "正しい値を入力して下さいね" End If End Sub こんな感じで、入力後に、 '(*5)1,2,3の正しい数値かはじめに確認する If strNO = "1" Or strNO = "2" Or strNO = "3" Then で、頭で、 1か2か3のどれかだったらと判断し、 続いて、 If strNO = "1" Then MsgBox "グーを出しました" If strNO = "2" Then MsgBox "チョキを出しました" If strNO = "3" Then MsgBox "パーを出しました" でチェック、 1か2か3以外だったらの処理で、 Else MsgBox "正しい値を入力して下さいね" End If でエラーメッセージ表示。 これをIf文のネストって言うんだよ。 わかった?これでいい? 何?得意になって話してんだろうね。 さっきとあまり変わらないジャン。 なんだとぉ〜。 じゃ、少し流れを見直して、変数1つ使って短くしてやるよ。短く。 /* * 4.結果の変数を1つ用意して・・・ */ まず、プログラムの流れを変えます。 1.データ入力 2.メッセージの初期値を、初めにエラーにしておく 3.次に入力値を判断し 1の時グー 2の時チョキ 3の時パーを代入 4.結果を表示 にしてみました。 Sub test4() Dim strNO As String '(*1)値を受け取るため文字型の変数を宣言 Dim strMSG As String '(*6)結果表示用 '(*2) InputBoxで入力してもらう strNO = InputBox("1.グー 2.チョキ 3.パー", "アナタの手を入力で下さい") '(*7)入力値を判断して結果を代入 strMSG = "正しい値を入力して下さいね" 'エラーをはじめに代入 If strNO = "1" Then strMSG = "グーを出しました" 'メッセージ変更 If strNO = "2" Then strMSG = "チョキを出しました" If strNO = "3" Then strMSG = "パーを出しました" '(*8)変数の値(strmsgの中身)を表示する MsgBox strMSG End Sub (*6)でstrMSG 結果表示用変数を定義します。 ポイントが(*7)で、 まず、 strMSG = "正しい値を入力して下さいね" でエラーメッセージを代入します。 次に、 1か判断1ならグーを代入 If strNO = "1" Then strMSG = "グーを出しました" 2か判断2ならチョキ If strNO = "2" Then strMSG = "チョキを出しました" 3か判断3ならパー If strNO = "3" Then strMSG = "パーを出しました" (*8)で変数の中身を表示します。 変数を使って、先にエラーメッセージを代入しておく ってのは、どうでしょうか? へぇ〜、こんな書き方もあるんだぁ。 初めにエラーメッセージの文章を代入して、 正しい値が入らなかったら、メッセージはエラーのままねぇ。 なんか変わり者の三流君みたいでイヤだなぁ、 プログラムが見にくいよ、なんとかならないの? 少し変わった味付けすれば、あきらめて、おとなしく帰ると思ったのによ。 /* * 5.Select Case Elseで簡単に? */ いろいろがんばったね三流君、 ボクが言いたかったのは、 Select Case 文でCaseElseってあったんじゃない? って言いたかったんだけど、まぁイイヤ。 こんなのは、ダメ? Sub test5() Dim strNO As String '(*1)値を受け取るため文字型の変数を宣言 Dim strMSG As String '(*6)結果表示用 '(*2) InputBoxで入力してもらう strNO = InputBox("1.グー 2.チョキ 3.パー", "アナタの手を入力で下さい") '(*9)Select Case Elseで判断 Select Case strNO Case "1": strMSG = "グーを出しました" 'メッセージ代入 Case "2": strMSG = "チョキを出しました" Case "3": strMSG = "パーを出しました" Case Else: strMSG = "正しい値を入力して下さいね" '(*10) End Select '(*11)変数の値(strmsgの中身)を表示する MsgBox strMSG End Sub '(*9)Select Case Elseで判断 みたまんまでそのままひねらないで条件を書いてると思うけど。 三流君的には?どうですか?(読者さん的にもどうでしょうか?) まぁ、縦にスッキリといってるような、感じもするけど、 オレ、Select Case Else あんまり書かないから。 /* * 6.終わりの挨拶 */ 好みの問題でしょう。 私は長い髪の女性が好きだからね。 えっ、この前はショートカット大好きって言ってたジャン、おいおい。 みなさんは、どのパターンが好きですか? あっ、プログラムのほうですよ(笑) 同じ処理でも個性がありますよね。 今日書いたことは、 ・<>で等しくない ・And Or を使って複数の条件を判断 ・If文、一行で書けるよ ・If文のネスト(階層構造) ・結果の変数を使用したやりかた(エラーで初期化しておく) ・Case Else: を使用 でした。 イロイロと書きまくっただけなので、質問などあれば、 掲示板 : http://www.ken3.org/cgi-bin/bbs/vba/wforum.cgi やメールに気軽に書いてください。 拾い読みして、 1つでも何かの参考となれば幸いです。 ショートもロングもOK、女の子大好き、三流プログラマーKen3でした。 PS.あっ、完璧でキレイ過ぎる子はなんとなく嫌いかなぁ(おいおい)
ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、
気になったジャンル↓を選択してください。 人気記事(来場者が多いTOP3): Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など 開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う] 仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力] ※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。 |
Blogとリンク:[三流君の作業日記]/
[VBAやASPのサンプルコード]/
広告-[通販人気商品の足跡]