電子書籍の厳選無料作品が豊富!

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

A 回答 (3件)

以下は、セル内の記述を書きます。


参考程度にお聞き入れ下さい。

D1に条件文を書いて、複数条件があるなら
偽の時に、次の条件を書いていくようにすれば出来ます。

それでは。

例:
セル:内容
C1:abc
D1:=if(C1=E1,F1,if(C1=E2,F2,F3))
E1:abc
E2:123
F1:正解1
F2:正解2
F3:不正解
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/05/08 14:23

質問にそって、コードを書いてみました。

書き方の一例です。
内容については、各行にコメントを付けておきましたのでそちらを参照して下さい。

大まかには、
 セルに入力
  →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
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/05/08 15:08

VBAでなくても、下記のような関数ではどうですか。


A1セルに解答の数値か文字列をいれるとして
B1セルに下記関数を入れる。
「監事」が正解として、
=IF(A1=""," ",IF(A1="監事","正解です","間違いです"))
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/05/08 14:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!