質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.25%

  • VBA

    1177questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

ExcelVBAの質問なんですが

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 110

koarakko

score 16

Private Sub CommandButton10_Click()

Dim z As String

If UserForm1.CheckBox4.Value And UserForm1.CheckBox5.Value Then
 With Worksheets("Sheet2").Range("A2:A41")
 z = Application.RandBetween(A1, .Count)
 UserForm2.Label6.Caption = .Cells(i).Value
  If z = ("1:26") Then
  Label7.Caption = "法令"
  Else: z = ("27:40")
  Label7.Caption = "化学"
 End If
End With
End If
End Sub

ExcelVBAを使ってクイズソフトを作成しようとしているのですが、userform2のボタンを押すとラベルにuserform1のいくつかあるcheckboxがチェックされているかどうかで、
ラベルにセルに入ってる文章をランダムで一つ表示させるプログラムを見よう見まねで作成しようとしているのですが、checkboxが一つだけチェックされているときはうまく動作するのですが、2つや3つチェックされると上手く動作しないのですが、何処が悪いのでしょうか?
2つチェックされたときのプログラムを載せます。

チェックボックス4と5をチェックしているときになぜか、A1からA26までのセルの文章は問題なく表示するのですが、A27からA40までのセルの表示が一切おこらないんです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

編集してください。

ソースコードが読みづらいです。

編集時に出てくる "</>" のボタンを押して、出てきたやつの中にソースコードを記述してください。


[追記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 ){
           // ここが問題のエリア?
}

は まるっきり違います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/10 16:18

    申し訳ないです
    編集しました

    キャンセル

  • 2017/12/10 18:44

    ありがとうございますm(_ _)m
    一応If文のなかにいれてるつもりだったんですが、できてなかったですかね。

    キャンセル

  • 2017/12/28 11:25

    解決できました?

    ( 10日以上前なので。 )

    もし解決できていないなら再度、私が最初に回答したやつ ( 本体 ) をお読みください。

    ( 修正しますから。 )

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.25%

関連した質問

同じタグがついた質問を見る

  • VBA

    1177questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。