• ベストアンサー

VBAの判定の仕方を教えてください。

EXCEL2000のVBAでの判定の仕方を教えてください。 あるセルに答えを入力します。答えが合っていれば”正解”、合っていなければ”間違っています”というようにしたいのです。 例えばC1のセルに「abc」を入力したらD1のセルに ”正解”と表示し、「abc」以外の入力の時には”間違っています”と表示させます。 答えは英文字の他に数字「123」・文字「マクロ」等を考えています。不正解についても幾通りか表示させたいのですがやり方が解りません。 「例えば半角で入力してください」と表示する。 参考になる事、解るとこだけでもかまわないです。 宜しくお願いします。

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

  • ベストアンサー
  • BlueRay
  • ベストアンサー率45% (204/453)
回答No.1

以下は、セル内の記述を書きます。 参考程度にお聞き入れ下さい。 D1に条件文を書いて、複数条件があるなら 偽の時に、次の条件を書いていくようにすれば出来ます。 それでは。 例: セル:内容 C1:abc D1:=if(C1=E1,F1,if(C1=E2,F2,F3)) E1:abc E2:123 F1:正解1 F2:正解2 F3:不正解

popura709
質問者

お礼

回答どうもありがとうございます。これなら出来そうです。また複数条件の時の判定のアドバイスのありがとうございます。 後で気がついたのですがC1は回答欄とし、E1とE2は答えです。答えがバレバレですね。E1とE2を対象のセルとして使い非表示に出来るのかな~?。 別シートにしてシートを非表示にするというやり方になるのかな。参考(本)に書いてあるとおりにはうまくいくのですが内容が変わるとエラーとなりなかなかうまくいきません。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.3

質問にそって、コードを書いてみました。書き方の一例です。 内容については、各行にコメントを付けておきましたのでそちらを参照して下さい。 大まかには、  セルに入力   →Worksheet_Changeイベントが発生   →想定してあるセルに入力されていれば回答のチェックルーチン(共通)に飛ぶ   →指定があれば入力文字の指定等(全角文字、半角文字、数値等)をチェック   →回答自体をチェック   →回答内容によってメッセージを出力 の流れにしてみました。 ワークシート関数だけでなく、VBEで、配列を使ったり回答の範囲チェックしたり、ヒントを出したり(これを書きながら思いついた)いろいろなことが可能と思います。 ご参考に。 シートのコードウインドウに貼り付けます。 ここから ↓ 'シートに入力された時にWorksheet_Changeイベントが発生する Private Sub Worksheet_Change(ByVal Target As Range)   '答えが合っていれば『正解』   '合っていなければ『間違っています』+αを隣のセルに出す。   Select Case Target.Address(0, 0) '行・列は相対参照にしている(好みです)     Case "C1"       'セルC1:正解=abc 特に他のメッセージは出さない       Check_Kaitou Target, "abc", ""     Case "C2"       'セルC2:正解=ab  半角でない場合、『半角で入力して下さい』       Check_Kaitou Target, "ab", "半角指定"     Case "C3"       'セルC3:正解=あいう 全角でない場合、『全角で入力して下さい』       Check_Kaitou Target, "あいう", "全角指定"     Case "C4"       'セルC4:正解=123  数値でない場合、『数値で入力して下さい』       Check_Kaitou Target, "123", "数値指定"   End Select End Sub '回答のチェックと、回答が入力要件(半角や全角等)を満たしているかなどをチェックします '引数は、回答:Kaitou、正解:Ans、追加チェックする内容:HanteiKubun Sub Check_Kaitou(Kaitou As Range, Ans As String, HanteiKubun As String)   Dim msg As String '回答の隣に出すメッセージ   Dim kai As String '回答   Dim L As Integer '回答の文字列のカウンタ   kai = Kaitou.Text   Select Case HanteiKubun     Case "半角指定"       '全ての文字が半角か調べる       For L = 1 To Len(kai)         If Not Abs(Asc(Mid(kai, L, 1))) < 256 Then           msg = "半角で入力して下さい"           Exit For         End If       Next     Case "全角指定"       '全ての文字が全角か調べる       For L = 1 To Len(kai)         If Abs(Asc(Mid(kai, L, 1))) < 256 Then           msg = "全角で入力して下さい"           Exit For         End If       Next     Case "数値指定"       '数値か調べる       If Not IsNumeric(kai) Then         msg = "数値を入力して下さい"       End If     Case ""       '追加のチェックはしない   End Select   '最終のメッセージを作成する   If kai = Ans Then     msg = "正解"   Else     msg = "間違っています。" & msg   End If   'メッセージを表示する   Kaitou.Offset(0, 1) = msg End Sub

popura709
質問者

お礼

回答ありがとうございます。数々の例文どうもです。 早速やってみました。 >'シートに入力された時にWorksheet_Changeイベントが発生する こちらの方は動作も確認できました。 >'回答のチェックと、回答が入力要件(半角や全角等)を満たしているかなどを すいませんこちらの内容はちんぷんかんぷんです。

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

VBAでなくても、下記のような関数ではどうですか。 A1セルに解答の数値か文字列をいれるとして B1セルに下記関数を入れる。 「監事」が正解として、 =IF(A1=""," ",IF(A1="監事","正解です","間違いです"))

popura709
質問者

お礼

回答どうもありがとうございます。これなら出来そうです。VBAでなくても簡単に出来る事が解りました。

すると、全ての回答が全文表示されます。

関連するQ&A