
いつもお世話になっております。
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
- Visual Basic(VBA) シートを選択して、1つのPDFにしたいのですが。 5 2022/10/03 20:18
- PHP $_SESSIONについて教えて下さい。 2 2023/03/02 09:18
- JavaScript Javascript初心者|jQueryの.val()で値を取得し複数の要素を連結させる方法知りたい 2 2022/06/02 12:06
- JavaScript javascriptで移動ボタンを押した際に遷移するボタンを追記したい 1 2022/11/29 03:02
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- 画像編集・動画編集・音楽編集 動画をディスク作成すると画像が乱れる。 4 2022/06/24 07:49
- Access(アクセス) Accessで予定表を作成しようとしてます。 テーブル フィールド名 連番 オートナンバー型 年月日 2 2023/07/23 11:40
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
ユーザ―フォーム上のチェックboxのチェックを外した際のセル反映の取り消し
Excel(エクセル)
-
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
-
4
エクセル・VBA CheckBoxのオブジェクト名に変数を使うことは可能でしょうか?
Excel(エクセル)
-
5
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
6
VBA ユーザーフォーム上のチェックボックスの合計を別シートに標示させるには?
Visual Basic(VBA)
-
7
(VBA)チェックボックスのclickのイベントが、プログラムからの操作でも反応してしまいます。
Visual Basic(VBA)
-
8
Application.Runエラー(1004)
Excel(エクセル)
-
9
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
10
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
11
マクロ実行時、ユーザーフォームにラベルのテキストが表示されません。
Access(アクセス)
-
12
エクセルユーザーフォームのチェックボックスのCaptionにセルの値を入れたい。
Excel(エクセル)
-
13
VBA フォームのテキストボックスにセルの値を表示させたいが改行していたら改行もあわせて表示させたい
Excel(エクセル)
-
14
ユーザーフォームのラベルに日付を表示させる方法があればお願いします。出来ればコード書いていただけると
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセルのdatedif関数を使って...
-
エクセル ドロップダウンリスト...
-
特定のセルだけ結果がおかしい...
-
【マクロ】【配列】3つのシー...
-
【関数】同じ関数なのに、エラ...
-
【マクロ】列を折りたたみ非表...
-
vba テキストボックスとリフト...
-
エクセルのVBAで集計をしたい
-
【マクロ】EXCELで読込したCSV...
-
【条件付き書式】シートの中で...
-
【マクロ】オートフィルターの...
-
ページが変なふうに切れる
-
【マクロ】アクティブセルの時...
-
【マクロ】3行に上から下に並...
-
エクセルの循環参照、?
-
iPhoneのExcelアプリで、別のシ...
-
【マクロ】A列にある、日付(本...
-
エクセル
-
エクセルに、105と入力すると、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのユーザーフォームのframe...
-
unknownユニキャストフレームと...
-
VBAユーザーフォームのチェック...
-
geocitiesの広告を消したいので...
-
N504isで・・・。
-
ブラウザ全体にリンクを張る方法
-
『フレーム』を素人にも解るよ...
-
このホームページと同じ仕組み...
-
線がないのにインターネット出...
-
MP4 ファイルを加工したい
-
仕事で使用しているデータ入力...
-
更新を押すとTOPページに戻っち...
-
BBSについて・・・
-
フレーム付きのホームページで異変
-
ページごとにBGMを貼りたい
-
HP作成中。3フレーム中2つを常...
-
違うフレームのデータを同時に...
-
ネイティブVLANについて
-
(再)フレームレートについて
-
ホームページ フレーム
おすすめ情報