[[20170815203800]] 『チェックボックスを使用した問題を作成』(テル) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『チェックボックスを使用した問題を作成』(テル)

ユーザーフォーム上に20個のチェックボックスを配置しています。
正解のチェックボックスを16個。
不正解のチェックボックスは4個。
【動作】
16個のチェックボックスが選ばれている場合のみ、正解と表示。
正解以外はすべて不正解と表示。
If文でコードを記述すると、コードの量がかなり多くなります。
If文以外で記述する方法があれば教えてください。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


確認です。

・特定の16個のチェックボックスがすべてチェックされ、
かつ
・特定の 4個のチェックボックスがすべてチェックされていない
場合に限って、その問題は正解ということなんですか?
 
>If文でコードを記述すると、コードの量がかなり多くなります。
さわりだけでも書いてみては?
 
たぶん、
Controls("Checkbox" & k).Value
を使って繰り返し計算に持ち込むということなんだろうけど。
ここまででもヒントになっていますか?
 
(γ) 2017/08/15(火) 22:37


[y]さん。貴重なアドバイスをありがとうございます。
アドバイスを受け、コードを書いてみましたが、[オブジェクトが見つかりません]とエラーが出ます。
再度、ご指導お願いします。

Dim I As Long
For I = 1To 20

      If Controls("オブジェクト名" & I).Value = True And Controls("オブジェクト名2" & I).Value = True And ・・・・ 
              'オブジェクトが正解の状態(正解の16個にチェックがあり、かつ、不正解の4個にチェックがない)
         '処理の動作
     End If
Next I
'処理の動作         (不正解の場合の処理コード)

(テル) 2017/08/16(水) 03:00


確認したかったことに返事が無いのですが。
仮に極端な話、1〜16はcheckOnが正しく、17〜20はcheckOffが正しいとしましょう。
すると、
・1〜17にだけチェックしたひとも、
・1〜20すべてcheckOffの人(手を付けなかった人)も
同点(得点0)なんですか?
前者はほぼ正しいのに報われないですなあ。
 
前提が正しくなければ議論が無駄になるので尋ねています。
(γ) 2017/08/16(水) 06:08

 ああそうか、コードのコメントが回答ということでしたか。
 コード読み飛ばしていました。

 参考例です。

 Sub test()
     Dim b As Boolean
     Dim ary, ary2

     b = True
     ary1 = Array(1, 2, 3, 4, 5, 7, 8, 9, 10, 12, 13, 14, 16, 17, 18, 20)
     ary2 = Array(6, 11, 15, 19)

     For Each n In ary1
         b = b And Controls("Checkbox" & n).Value = True
     Next
     For Each n In ary2
         b = b And Controls("Checkbox" & n).Value = False
     Next

     If b = True Then MsgBox "正解"
 End Sub

 途中でfalseになったら、それ以降はチェックせずにループを抜ける方法もあるし、
 もっと気の利いた書き方があると思うが、ごく基本的な書き方を例示しました。
 私はこれで失礼します。
(γ) 2017/08/16(水) 06:38

テーマからして、たぶん ichiさんという方と同じかただろうと思うが、
こちらは放置ですか?挨拶くらいするものです。
問題設定からして、もっと検討したほうがよいと思いますね。

(γ) 2017/08/17(木) 16:34


 何かやりたいことがころころ替わっているような気がするのですが、課題か何かなんでしょうかね?

[[20170812175049]] 『選択されたチェックボックス別に異なるイベントを』(テル)
(カリーニン) 2017/08/17(木) 17:03


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.