- ベストアンサー
Excel InputBox内の表記について
- ExcelのInputBox内での内容と入力した内容を比較する方法が知りたいです。
- 特定の文字列と入力した内容が等しいかどうかを判定するためのIf文の作成方法を教えてください。
- タイピングの練習として、InputBoxの内容と特定の文が等しい場合にカウントを増やすプログラムを作成したいです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#3の回答者です。 >私が知りたいのは、InputBoxを利用した時、そのInputBox内で表示されるようにした文章と、その後ユーザーが入力した文章が一致しているかどうか判断するプログラムはどう書けばいいのか、ということです。 基本的なものは、まず教本で倣う(真似する)ことから始まります。自分がああしたい・こうしたいと思うのは、通常の人で1年先、早い人で半年先です。掲示板で、VBAの質問はまだ早過ぎるようです。 ----------------- VBAの基本の問題です。(VBEditorで入力せずに答えが言えること) (1)・Excelのマクロは、通常、どこに登録するか? (a).シートモジュール, (b).標準モジュール, (c).ThisWorkbook モジュール, (d).Class モジュール (2)・マクロを実行中に、マクロを止めたい場合にはどうするか? (a).ESC を押す, (b).Pauseを押す, (c).F8を押す, (d).End を押す (3)・マクロをキーを押さずに途中で止めたい場合はどうするか? (a).Endと書く, (b).Exit Subと書く, (c).Pauseと書く, (d).Stop と書く (4)・変数を宣言する時は、Dim を使いますが、その時に、j の変数型は何か? 例:Dim i, j, k As Long (a).Double型, (b).Integer型, (c).Long型, (d).Variant型 (5)・InputBox 関数を使いましたが、どこかがおかしいです。これを直すには、どうしたらよいか? Sub Test1() Dim ret As Variant ret = InputBox("何か文字を入れてください。") If IsNumeric(ret) Then MsgBox ret & vbCrLf & "数字が入りました。" ElseIf Not IsNumeric(ret) Then MsgBox ret & vbCrLf & "文字が入りました。" Else MsgBox ret & vbCrLf & "キャンセルされました。" End If End Sub (a).Asc関数の文字コードで判定する, (b).ワークシート関数のIsTextを使って判定する, (c).ret = False で判定する, (d).そもそもこういう書き方は良くない. (ただし、下記の戻り値のString型にする方法や、裏技は除外します。) ----- 今回の質問で、以下のようなレベルでも、だいたい、半年ぐらいの経験が必要です。 Sub Test2() Const MSG As String = "季節は" Const SENTENCE As String = "季節は冬です" Dim kotae As String Application.SendKeys "{RIGHT}" kotae = InputBox("単語を入力してください。", , MSG) If kotae = "" Then Exit Sub '終了 If InStr(kotae, "です") = 0 Then kotae = kotae & "です" End If If SENTENCE = kotae Then kotae = MsgBox("正解です!") ElseIf SENTENCE <> kotae Then kotae = MsgBox("不正解です。", vbCritical) End If End Sub UserFormを使えば、入力に対して反映するようにはなりますが、それは、また違ったスタイルにはなります。また、他にもイレギュラーな方法もありますが、そういうことを覚えてもしょうがないです。まず、基本からしっかりと勉強するようにしましょう。
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
そのままだと回答は#2のお答えのようになると思う。 質問者が聞きたいのはArray1の要素の各々と、Array2の要素の各々の組み合わせの数だけ回答がありえて その処理に困っているのではないのかな。 それの場合は質問の書き方が不完全ですよ。 >kotae = InputBox(問1 : array1 & "は" & array2 & "です") なんて1つの場合はArrayを持ち出すことはありえないでしょう。 普通はコンボボックスなど2つ使ってArray1の系列のどれかと、Array2の系列のどれかをそれぞれ選択させて、選択された結果(文字列)の組み合わせで処理を分けるでしょう。 その場合CASE文のネストが使えるかも。 コンボボックスなど使えないのなら、こんな処理は質問者には早すぎると言うこと。 せめてArray1の質問回答とArry2の質問を別に分けてはどうですか。 Arrayの中の文字列をPrompt文に出したいなら Sub test01() x = Array("東京", "名古屋", "大阪") pmpt = "" For i = 0 To UBound(x) pmpt = pmpt & x(i) & "," Next i pmpt = Left(pmpt, Len(pmpt) - 1) & "どれですか" MsgBox pmpt ans1 = InputBox(pmpt) End Sub Arrayの要素が多いと読むのも、うるさくなるが。 質問者のいう(質問の表現)とおり考えていたら、おかしくなる例では無いかな。 質問の意図を誤解していたら申し訳ないが。
- Wendy02
- ベストアンサー率57% (3570/6232)
InputBox の使い方に混乱しているようですから、Array に手は出さないほうがよいかもしれませんが、VB系では、以下のようなスタイルが一般的です。C言語のように、入力がそのまま反映するようにはいきませんね。また、InputBox には、二種類あって、メソッドと関数があって、以下のように、メソッドを使うのが一般的です。 'データ型のVariant は省略しています。 Sub TestMacro1() Dim Array1, Array2 Dim i As Integer Dim Kotae Dim Seikai As Integer Array1 = Array("季節", "食べ物", "天気", "動物") Array2 = Array("冬", "お餅", "雪", "犬") For i = LBound(Array1) To UBound(Array2) Kotae = Application.InputBox("問" & StrConv(i + 1, vbWide) & ": " & Array1(i) & "は? ", Type:=2) If Kotae = False Then Exit For If Array2(i) Like Kotae Then MsgBox "答" & StrConv(i + 1, vbWide) & ": " & Array1(i) & "は" & Array2(i) & "です。", , "正解!" Seikai = Seikai + 1 Else MsgBox Kotae & vbCrLf & "不正解です。", vbCritical, "不正解" End If Next MsgBox "正解数:" & Seikai End Sub
- kmetu
- ベストアンサー率41% (562/1346)
でしたら If kotae = array1 & "は" & array2 & "です" Then seikai = seikai + 1 End If にすればいいだけの話では?
- kmetu
- ベストアンサー率41% (562/1346)
array1 = "季節" array2 = "冬" If InputBox("問1 :" & array1 & "は" & array2 & "です") = array1 & "は" & array2 & "です" Then seikai = seikai + 1 End If こういうことでしょうか
補足
形としてはそんな感じです。ただ、質問に書いたInputBoxはそのままに、そのあとに続く形でIf文を作ろうと考えています。InputBoxをIf文内に持ってくると前のInputBoxとかぶってしまい、同じ内容が2度表示されてしまいます。ですので、If文内にInputBoxを持ってくるのはちょっとまずいです。
補足
回答ありがとうございます。質問があいまいで分かりにくかったようですので補足します。私が知りたいのは、InputBoxを利用した時、そのInputBox内で表示されるようにした文章と、その後ユーザーが入力した文章が一致しているかどうか判断するプログラムはどう書けばいいのか、ということです。たとえばプログラムを実行して、 1問目:季節は冬です と表示されたら、表示したボックスに入力するためのスペースがあり、そこに 季節は冬です と入力し、それが最初に表示された文章と完全に一致していればseikai + 1とし、不一致ならそのまま次の問題にいく、というような流れのプログラムを書きたいのです。しかし、それが一致しているか判断する方法が不明なので質問させていただきました。分かりにくくてすみませんでした。あと私はexcel初心者なので配列ではなく、条件判断を使ったものでお願いします。