[三流君] −−> [VBAで楽しく] −−> [バックナンバー一覧]
−−> No.012 入力結果の判断いろいろ

入力結果の判断いろいろ

メルマガ発行内容

<入力結果の判断いろいろ>

こんにちは、 昔のメルマガを参考に楽して発行中の三流プログラマー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.あっ、完璧でキレイ過ぎる子はなんとなく嫌いかなぁ(おいおい)

フィードバック

VBA系の→[掲示板]←を覗く、質問を書き込む

評価・感想

No.012を読んだ満足度(評価)は?
5満足(参考になった)
4まぁまぁ(一部参考になった)
3普通(どちらとも言えない)
2なんかなぁ(期待と違った)
1不満(読んで損した気分)
作者に感想・質問を送る場合は下記に気軽に書いてください
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 E-mail で受信したい
*質問・感想はメルマガで紹介する場合があります

ページフッター(リンクや広告など)


[三流君(TOP ken3.org へ戻る)]
-- [VBA系TOPへ]
---- [VBA系バックナンバー目次へ移動]
------ [VBAでIEを操作 CreateObject("InternetExplorer.application")]・・・実は当店一番人気、VBAでIEを操作するサンプルです
------ [VBAでOutlookの操作 CreateObject("Outlook.Application")]・・・Outlookを使い、メール関係の処理です
------ [Access から Excel 連携 CreateObject("Excel.Application")]・・・人気のAccessからExcelへデータ書き出しなどです
------ [AccessのUserForm/サブフォームを操作]・・・アクセスでフォームを使ったサンプルです
------ [Accessのレポートを操作]・・・レポートを操作してみました
------ [Access クエリー関係やその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です
------ [Excel UserForm(ユーザーフォーム)を操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
------ [ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
------ [Excel関係 関数、その他]・・・その他Excel関係です
------ [VBAでテキストファイル(*.txt,*.html,*.csv)の操作]・・・テキストファイルを使ったサンプルです
------ [VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます


広告
-- [通販系の売れ筋広告へ] ←主に楽天やAmazonのランキングです
blog
-- [三流君の作業日記] ← 日々の作業を少々
-- [通販あしあと] ← 通販ページの足跡を一覧で羅列

情報を探す

情報を探すならGoogleかな?

↓Web全体、サポート情報(support.microsoft.com)や三流君VBA(ken3.org)から検索する
Google
Web www.ken3.org
www.microsoft.com support.microsoft.com

あとは、項目別にMSでお勉強かな?
◆ マイクロソフト サイトの歩き方
◇ How-To インデックス
◇ FAQ インデックス
◇ スキルレベル別おすすめコンテンツ
◇ テクノロジ マップ
◇ テーマ別技術資料一覧

書籍の購入

Webだけじゃさすがに勉強しきれないので、プログラミング関係の書籍も読んでみては??

コンピュータ書籍の発送がハヤイ専門店

コンピュータの本・専門店
種類が豊富で探し易いです。※在庫ありが48時間以内発送が急ぎで資料や書籍がほしい時、とても助かります。
お奨め本の目次を見るだけでも勉強になったり

amazon.co.jpでキーワード別チェック

下記、私が設定したキーワードですが、こんな感じで資料や書籍を探ってみては?
[VBA全体を把握する] -- やはり全体をさらっと見たいですよね。
[SQL関連でDB力UP] -- システムはデータベース設計が重要
[ADO接続を探る] -- VBAなのでADO接続を押さえておく
[Windows APIを探る] -- さらにAPIになて知ってれば強力だ!
[.NETを探る] -- と言っても時代は.NETに流れてるし
プログラミング以外でも知りたいことは多くって、
[人間関係] -- で、客先・上司、まわりに気を使い。
[プログラマーの自己啓発] -- プログラムだけじゃなくいろいろと向上したいよ
[コーチング・育成] -- 先輩になったら後輩(部下)の面倒をみてね。
そんなこんなでプログラマーっていろいろと大変なんだってば・・・