質問: "化学" End If End With End If End Sub ``` ExcelVBAを使ってクイズソフトを作成しようとしているのですが、userform2のボタンを押すとラベルにuserform1のいくつかあるcheckboxがチェックされているかどうかで、 ラベルにセルに入ってる文章をランダムで一つ表示させるプログラムを見よう見まねで作成しようとしているのですが、checkboxが一つだけチェックされているときはうまく動作するのですが、2つや3つチェックされると上手く動作しないのですが、何処が悪いのでしょうか? 2つチェックされたときのプログラムを載せます。 チェックボックス4と5をチェックしているときになぜか、A1からA26までのセルの文章は問題なく表示するのですが、A27からA40までのセルの表示が一切おこらないんです。
回答: 編集してください。 ソースコードが読みづらいです。 編集時に出てくる ">" のボタンを押して、出てきたやつの中にソースコードを記述してください。 [追記1] ソースコードを記述するときは、">"を押してその中に書いてください。 ここまではできていますが、 インデントが無いため読みづらい。 また、Sub に対する終了 ( End Sub ) もありません。 質問時に書くのを忘れたのか、ソースコード自体がそれなのかが判断できないです。 次に、問題となっている"なぜかA27からA40までのセルの表示が起こらない" はたぶん、 If文のElseの使い方が間違っているからだと思います。 質問にある状態では、 ``` If z = ("1:26") Then Label7.Caption = "法令" Else: z = ("27:40") Label7.Caption = "化学" End If ``` となっています。 Elseの部分を見ると z = ("27... となっていますね。これ、条件式じゃなくて、代入になっているかも。 If文で条件が複数ある場合 ( 同時に満たすやつじゃない方 ) だと ``` If 条件1 Then ' 条件1を満たしている場合 ElseIf 条件2 Then ' 条件2を満たしている場合 ElseIf 条件3 Then ' 条件3を満たしている場合 Else ' 上記のどれにも引っかからなかった場合 End If ``` になっていたと思います。 質問にあるやつを考えると、 ``` If z = ("1:26") Then Label7.Caption = "法令" Else: z = ("27:40") Label7.Caption = "化学" End If ``` でしたよね。 ``` If z = ("1:26") Then Label7.Caption = "法令" Else: z = ("27:40") ' Zに代入 Label7.Caption = "化学" 'Label7のCaptionに代入 End If ``` の意味になるので、これが原因? [ 返信1 ] 私が言いたかったものは「**構文ミス**」です。 C言語とかだとコンパイルエラーになるレベルじゃないですが、 履き違えている感じ。 もう一度入門系のサイトか書籍をお読みください。 で、ご自分が質問したものと比較してください。 質問者さんのは ``` If z = ("1:26") Then Label7.Caption = "法令" Else: z = ("27:40") Label7.Caption = "化学" End If ``` となっていますよね? Else以降を見てください。 Else: z = ("27:40") となっていますね。 これって、コンパイラ(?) からすると ``` Else: z = ("27:40") ``` っていう風に2種類の文になっています。 たぶん質問者さんは z が ("27:40") のとき...っていう感じだと思っているはずですが、 実際には 「それ以外なら z に ("27:40")を代入する」っていうことになっているためだと思います。 C言語で書くと ``` if( a == 100 ){ }else{ z = 20 // ここが問題のエリア } ``` と ``` if( a == 100 ){ }else if( z == 20 ){ // ここが問題のエリア? } ``` は まるっきり違います。