いつもお世話になっております。
VBAのチェックボックスについてお尋ねします。
貼付ファイルのようなユーザーフォームを作成しました。
フレーム1(TEST1)に
1.CheckBox1(全選択)
2.CheckBox2
3.CheckBox3
フレーム2(TEST2)に
4.CheckBox4(全選択)
4.CheckBox5
5.CheckBox6
フレーム外に
6.CheckBox7(全選択)
があります。
フレーム1のCheckBox1にチェックを付けるとCheckBox2とCheckBox3にチェックが入り
フレーム外のCheckBox7にチェックを付けると全てのCheckBoxにチェックが入るようにしたいのですが。
どなたかご教授をお願いします。
No.3ベストアンサー
- 回答日時:
こんにちは。
こういう課題は、"整合性"をどこまで意識するか次第です。
個別のCheckBoxのすべてにチェックが入ったら、必然的に
全選択のCheckBoxにもチェックを入れる、とか、、、。
簡単に済ませようとすると却って面倒だったりしますから、
そこら辺のバランス感覚、が個性として出てしまう課題ですね。
無駄な処理が無いよう、ひとつずつ処理を書いていくと大変なので、
不必要な処理を含むことを許容して、総当たりするように書く方が
結果的に簡単に書くことが出来ます。
これを配布用レベルにまで引き上げるとすれば、
もう少し仕上げていった方がいいのかも知れませんが、
動作仕様としては、ほぼ十分、こんなものであろうと思っています。
ひとつのプロシージャに纏めて書いてあります。
Clickイベントの再帰的な呼び出し、不要な呼び出し、
は、回避するように書いてあります。
オマケですべてのCheckBoxを初期化出来るように書いていますが、
取り敢えず仮に、UserFormをクリックした場合に確認できるようにしています。
※ UserForm モジュール 宣言部 の記述はモジュールの先頭に!
' ' ----- UserForm モジュール ----------------------------------
Option Explicit
' ' ----- UserForm モジュール 宣言部 ---------------------------
Dim arr(1 To 7) As Boolean
Dim blnDisableEv As Boolean
' ' ------------------------------------------------------------
' ' ----- CheckBox の on/off を 切り替える メソッド ------------
Private Sub SelectChks(Optional ByVal n As Long)
Dim m As Long
Dim i As Long
Dim b As Boolean
If n > 0 Then
b = Me.Controls("CheckBox" & n).Value
End If
Select Case n
Case 0, 7
blnDisableEv = True
For i = 1 To 7
arr(i) = b
Me.Controls("CheckBox" & i).Value = b
Next i
blnDisableEv = False
Case Else
arr(n) = b
m = (n - 1) \ 3
Select Case n
Case 1, 4
arr(m * 3 + 2) = b
arr(m * 3 + 3) = b
Case Else
If arr(m * 3 + 2) Xor arr(m * 3 + 3) Then
arr(m * 3 + 1) = False
Else
arr(m * 3 + 1) = b
End If
End Select
If arr(1) Xor arr(4) Then
arr(7) = False
Else
arr(7) = arr(1)
End If
blnDisableEv = True
For i = 1 To 7
Me.Controls("CheckBox" & i).Value = arr(i)
Next i
blnDisableEv = False
End Select
End Sub
' ' ----- 各CheckBox の イベント -------------------------------
Private Sub CheckBox1_Click() ' / Frame1 : SelectBoth
If blnDisableEv Then Exit Sub
SelectChks 1
End Sub
Private Sub CheckBox2_Click() ' / Frame1
If blnDisableEv Then Exit Sub
SelectChks 2
End Sub
Private Sub CheckBox3_Click() ' / Frame1
If blnDisableEv Then Exit Sub
SelectChks 3
End Sub
Private Sub CheckBox4_Click() ' / Frame2 : SelectBoth
If blnDisableEv Then Exit Sub
SelectChks 4
End Sub
Private Sub CheckBox5_Click() ' / Frame2
If blnDisableEv Then Exit Sub
SelectChks 5
End Sub
Private Sub CheckBox6_Click() ' / Frame2
If blnDisableEv Then Exit Sub
SelectChks 6
End Sub
Private Sub CheckBox7_Click() ' / UserForm : SelectAll
If blnDisableEv Then Exit Sub
SelectChks 7
End Sub
' ' ----- オマケ CheckBox を すべて off に ---------------------
Private Sub UserForm_Click()
SelectChks
End Sub
' ' ------------------------------------------------------------
No.4
- 回答日時:
#3、cjです。
追加補足です。"整合性"と簡単さについて、ふと思ったのですが、
CheckBox1、CheckBox4、CheckBox7、
については、いっそ、CommandButtonにしちゃえば、
面倒なことを考えずに済みますし、
ユーザーにも違和感なく受け入れられる、
という考え方もありますね。
実際、そういうスタイルのUIを見掛けることもありますし、、、。
正解はひとつではないですから、
ご自分に会ったものを見つけてください。
No.2
- 回答日時:
こんばんは!
チェックの解除は考えなくても良いのですね?
ごくごく簡単に
Private Sub CheckBox1_Click()
CheckBox2 = True
CheckBox3 = True
End Sub
Private Sub CheckBox4_Click()
CheckBox5 = True
CheckBox6 = True
End Sub
Private Sub CheckBox7_Click()
CheckBox1 = True
CheckBox4 = True
End Sub
といった感じではどうでしょうか?m(_ _)m
No.1
- 回答日時:
フレームは気にしないとして・・・・
ユーザーフォームモジュールに以下のコードを記述してください。
Private Sub CheckBox1_Click()
Me.CheckBox2.Value = Me.CheckBox1.Value
Me.CheckBox3.Value = Me.CheckBox1.Value
End Sub
Private Sub CheckBox4_Click()
Me.CheckBox5.Value = Me.CheckBox4.Value
Me.CheckBox6.Value = Me.CheckBox4.Value
End Sub
Private Sub CheckBox7_Click()
Me.CheckBox1.Value = Me.CheckBox7.Value
Me.CheckBox4.Value = Me.CheckBox7.Value
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
餃子を食べるとき、何をつけますか?
みんな大好き餃子。 ふと素朴な疑問ですが、餃子には何をつけて食べますか? 王道は醤油とお酢でしょうか。
-
大人になっても苦手な食べ物、ありますか?
大人になっても、我慢してもどうしても食べれないほど苦手なものってありますよね。 あなたにとっての今でもどうしても苦手なものはなんですか?
-
CDの保有枚数を教えてください
ひとむかし前はCDを買ったり借りたりが主流でしたが、サブスクで簡単に音楽が聴ける今、CDを手に取ることも減ってきたかと思います。皆さんは2024年現在、何枚くらいCDをお持ちですか?
-
自分のセンスや笑いの好みに影響を受けた作品を教えて
子どもの頃に読んだ漫画などが その後の笑いの好みや自分自身のユーモアのセンスに影響することがあると思いますが、 「この作品に影響受けてるな~!」というものがあれば教えてください。
-
「お昼の放送」の思い出
小学校から中学校、ところによっては高校まで お昼休みに校内放送で、放送委員が音楽とかおしゃべりとか流してましたよね。 最近は自分でもラジオができるようになって、そのクオリティもすごいことになっていると聞きます。
-
新旧の数値の比較
Excel(エクセル)
-
エクセルで都道府県のリスト作成をしたいです。
Excel(エクセル)
-
Excel VBA 2次元配列を使った具体サンプル
その他(Microsoft Office)
-
-
4
Excelで範囲を可変して参照する関数を教えてください
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
unknownユニキャストフレームと...
-
デジタル時計の時刻合わせの方...
-
Javascript_submit()完了後に処...
-
マイページはどこを開くの
-
リストビューをスクロールさせ...
-
エクセルのシート上に別のシー...
-
ウインドウを毎回同じ位置、大...
-
Excelでワードアートや図を常に...
-
小さな表示窓の呼び方は
-
Outlookでこのような表示がされ...
-
スクリプトって、何ですか?ど...
-
エクセルVBAでフォームのListbo...
-
一定時間おきにアラームやポッ...
-
[Java] Edgeでのアドレスバー非...
-
「Cancel = True」とはどういう...
-
ブラウザ(IE)からエクスプロー...
-
Excel VBAでの右クリックのポッ...
-
VB2005 DataGridView上でクリッ...
-
オシロスコープで出た波形をUSB...
-
html js 横軸の長いチャート
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
unknownユニキャストフレームと...
-
VBAのユーザーフォームのframe...
-
ネスケではフレーム対応してな...
-
フレーム使用のサイトについて...
-
フレーム付のファイルをアップ...
-
このようにフッターに背景の色...
-
仕事で使用しているデータ入力...
-
ヽ(^。^)ノ ワードの「書式...
-
新型goomailの右側フレームを消...
-
(再)フレームレートについて
-
EXCEL VBAでIEアクセスを行な...
-
920Pの画像表示と、カメラ機能...
-
キーボードショートカットMozil...
-
Aviutilでのフレーム補間なので...
-
デジタル時計の時刻合わせの方...
-
マイページはどこを開くの
-
エクセルのシート上に別のシー...
-
スクリプトって、何ですか?ど...
-
Javascript_submit()完了後に処...
-
ウインドウを毎回同じ位置、大...
おすすめ情報