
エクセル内にチェックボックスとオプションボタンを作成していて
行き詰ってしまったので質問させてください。
例えば、下のようなデザインになっているとして、
Q1.
□A □B (○C ○D)
 ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄
↑チェックボックス ↑オプションボタン
チェックボックスAとBのうち、Bにチェックを入れると
右にあるCとDのオプションボタンが選択可能になるという連携スタイルにすることは可能でしょうか?
その場合は併せて、Aにチェックを入れた場合はCとDのオプションボタンが操作できなくなるようにもしたいのです。
どなたか教えて下さい。よろしくお願いします。
No.5ベストアンサー
- 回答日時:
こんばんは。
最初に、
>VBAに関しては、なんとか調べながらできる程度なので
VBAは、覚えるのに時間が掛かるし、その割りにはうまく使えないので、掲示板で上手に人に教わる方法を覚えたほうが早いです。(ブタもおだてりゃ木に登る(^^;。結構そんな程度で人は気を良くして書いてくれるものなのですね。気難しい人には、無視せず、さりげなく。。。)
本題です。(遅くなりました)
#2のimogasiさんので応用は利きますが、こちらで書いてみました。
思ったよりも、先のことを考えると、なかなか難しいです。本当は、Class を使えば、オプションボタンの統一が可能なのですが、今度は設定がややこしくなります。
最初に、オプションボタン(コントロールツール)の横に4つずつ並べて、全部必要な数を並べてください。
○ ○ ○ ○
○ ○ ○ ○
○ ○ ○ ○
○ ○ ○ ○
'以下は、全部シートモジュールでよいです。(コントロールツールのオプションボタンが編集可能-青い三角定規がオン-で、そのコントロールをダブルクリックすると、画面が開きます)
'-----------------------------------------
'(1) グループ分け用のマクロです。
Sub SettingGrouping()
'オプションボタンのグループ別けマクロ
'一度だけ必要です。
Dim cnt As Long
Dim cn As Variant
Dim i As Integer, j As Integer
For Each cn In OLEObjects
If TypeOf cn.Object Is MSForms.OptionButton Then
cnt = cnt + 1
End If
Next cn
For i = 1 To cnt
j = Int((i - 1) / 2) + 1
OLEObjects("OptionButton" & i).Object.GroupName = "GR" & j
Next i
End Sub
'------------------------------------
'オプションボタン用のマクロです。
'4つで1セットです。 3,4 ですが、次が、7,8 となります。
Private Sub OptionButton1_Click()
Dim i As Integer
For i = 3 To 4
OLEObjects("OptionButton" & i).Enabled = Not OptionButton1.Value
Next i
End Sub
Private Sub OptionButton2_Click()
Dim i As Integer
For i = 3 To 4
OLEObjects("OptionButton" & i).Enabled = OptionButton2.Value
Next i
End Sub
'-----------------------------------
'次の行
Private Sub OptionButton5_Click()
Dim i As Integer
For i = 7 To 8
OLEObjects("OptionButton" & i).Enabled = Not OptionButton5.Value
Next i
End Sub
Private Sub OptionButton6_Click()
Dim i As Integer
For i = 7 To 8
OLEObjects("OptionButton" & i).Enabled = OptionButton6.Value
Next i
End Sub
'----------------------------------
'オプションボタンの集計のためのマクロ(サンプル)
Sub SumTotal()
'オプションボタン集計用マクロ
Dim cnt As Long
Dim cn As Variant
Dim n As Integer
Dim k As Integer
'オプションボタンの数を取る
For Each cn In OLEObjects
If TypeOf cn.Object Is MSForms.OptionButton Then
cnt = cnt + 1
End If
Next cn
k = 1
For i = 1 To Int(cnt / 4)
For j = 1 To 4
If OLEObjects("OptionButton" & k).Object.Enabled Then
n = Abs(OLEObjects("OptionButton" & k).Object.Value)
'J列からの書き出し
Cells(i, 10 + j - 1).Value = k & "," & n
Else
Cells(i, 10 + j - 1).Value = k & ", -"
End If
k = k + 1
Next j
Next i
End Sub
書き出しは、
J列から
1,1 2,0 3, - 4, -
5,0 6,1 7,0 8,0
このような集計スタイルになります。これは、
k & "," & n
k & ", -"
ここで、違ったスタイルでも、アレンジできます。これは、集計しやすいようにします。当面、どのように集計をするかというサンプルです。
遅い時間にご回答いただき、ありがとうございました!
実は、集計に関してはあまり重要ではなかったのでオプションボタンをコントロールすることができただけで
大変助かりました。本当にありがとうございます。
>VBAは、覚えるのに時間が掛かるし、その割りにはうまく使えないので、掲示板で上手に人に教わる方法を覚えたほうが早いです。
参考になります。ありがとうございます!
No.4
- 回答日時:
>すべてオプションボタンで設定した場合は
>どのようにすればいいのでしょうか。
#3 は、読み間違えで回答しました。
改めて書き直します。すみません。しばらく時間ください。
ありがとうございます。
#2の方へのお礼にも記載したのですが、
ダイアログボックスではなく、エクセルのシート上にボタンをおきたいので、
可能でしたらそのやり方を教えていただければ幸いです。
VBAに関しても、すらすらと操作できるほどではないので
基本的なことも質問してしまうかもしれませんが、どうかよろしくお願いいたします。
No.3
- 回答日時:
こんばんは。
#1の回答者です。
>それでは、すべてオプションボタンで設定した場合は
>どのようにすればいいのでしょうか。
それは、
>Q1.
>□A □B (○C ○D)
> ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄
>↑チェックボックス ↑オプションボタン
このQuestion の内容に依存してくるのではないでしょうか?
例えば、チェックボックス自体も、二者択一ということも可能です。
これは、私の勝手な想像ですが、こういう方法はどうでしょうか?
Aのチェックボックスを選択したら、Bは、オフになる。
Bのチェックボックスを選択したら、Aは、オフになって、なおかつ、オプションボタンの選択をしなくてはならなくなる。(そういうチェックボックスの使い方は間違っているという人もいますから、あえてお勧めはしません)
--ということは、オプションボタン C, D の片方が、デフォルトになる、という方法にします。
私自身は、何度も、似たような質問は受けたことがあるのですが、質問として出てくるものは、どれひとつとして決まったものはありません。おそらく、ご質問者さんが当初考えている以上に、これは、難しい部分があるような予感がします。(そうでなければよいのですが。)理由は、今は、4つのコントロール・オブジェクトしかありませんが、おそらくは、20個とか、30個とか多数になってきます。そうすると、複雑になってきます。
とりあえず、こちらでは、どうするかは決めかねますので、ひとつの方法を選んでください。それに合わせて、考えていきます。Question の質問のサンプル文を出していただいて、こうしたいとおっしゃっても良いです。
なお、返事が遅くなるようでしたら、「お礼側」に入れてください。そうすると、メールがこちらに直接届きます。
No.2
- 回答日時:
#1のお礼部分に関して
userform内に
○OptionButton1
○OptionButton1 ○OptionButton3
○OptionButton4
の配置で貼り付ける。
---
Private Sub OptionButton1_Click()
If OptionButton1 = True Then
For i = 3 To 4
UserForm1.Controls("Optionbutton" & i).Enabled = False
Next i
End If
End Sub
Private Sub OptionButton2_Click()
For i = 3 To 4
UserForm1.Controls("Optionbutton" & i).Enabled = True
Next i
End Sub
Private Sub UserForm_Initialize()
For i = 1 To 4
UserForm1.Controls("Optionbutton" & i) = False
Next i
For i = 3 To 4
UserForm1.Controls("Optionbutton" & i).Enabled = False
Next i
For i = 1 To 2
Me.Controls("OptionButton" & i).GroupName = "Group1"
Next i
For i = 3 To 4
Me.Controls("OptionButton" & i).GroupName = "Group2"
Next i
End Sub
---
Userform1が
Initialize時に
全てをFalse
1,2と3,4をグループ化
3,4はEnabeledをFalseに
ーー
1をクリックしたとき
Trueなら3,4をEnabeledをFalseに
ーー
2をクリックしたとき
3,4をEnabeledをTrueに
する。
ーーーーー
仕様がこれでよいかどうか。
しかしVBAのことを質問に一言も書いてない人に判るのかな。
詳しい説明をありがとうございました。
VBAに関しては、なんとか調べながらできる程度なのでご教授いただいたとおりに作業はできたのですが、
ダイアログボックスではなく、エクセルのシート上にボタンを
おきたかったので、今回教えていただいたことを参考にまた少し頑張ってみます。
No.1
- 回答日時:
こんにちは。
ちょっと、そのままでは論理が成り立ちません。
>Bにチェックを入れると
>右にあるCとDのオプションボタンが選択可能になるという連携スタイルにすることは可能でしょうか?
というのは可能ですが、
チェックボックスは、二者択一ではなくて、両方がオフも、両方がオンもありますから、論理に食い違いが生じてしまいます。
例えばオプションボタン1,2 は、以下のようにすれば、選択が出来るようになりますし、また、選択が出来ないようにもなりますが、チェックボタンを両方を選択したときは、どちらでもありになってしまいます。少し、考えてみてください。
'コントロールツールのチェックボックスと、オプションボタン
'マクロは、そのツールのシートモジュール
'---------------------------------------------
Private Sub CheckBox2_Click()
Dim i As Integer
For i = 1 To 2
OLEObjects("OptionButton" & i).Object.Enabled = CheckBox2.Value
Next i
End Sub
Private Sub CheckBox1_Click()
Dim i As Integer
For i = 1 To 2
OLEObjects("OptionButton" & i).Object.Enabled = Not CheckBox1.Value
Next i
End Sub
この回答への補足
ありがとうございます。
おっしゃるとおりです。
それでは、すべてオプションボタンで設定した場合は
どのようにすればいいのでしょうか。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- JavaScript jquery 診断コンテンツにチェックボックスを付けたいです 3 2023/01/19 18:31
- JavaScript javaScriptで画面に値を入れるには 1 2022/08/14 12:27
- Excel(エクセル) スプレッドシートのチェックボックスとフィルタを連携させたい 2 2022/09/26 18:02
- Excel(エクセル) [貼り付けオプション]とは? 3 2022/04/17 08:15
- Excel(エクセル) Libreoffice calcで人名を取り消し線を入れたい。 2 2022/09/10 15:27
- Windows 10 Windows10でセーフモードが出来ません。 2 2022/04/22 23:37
- Excel(エクセル) エクセルVBAでチェックボックスにチェックを入れる 1 2022/09/14 00:52
- モニター・ディスプレイ windows10 モニタに表示されなくなった 2 2023/08/04 16:58
- Access(アクセス) Accessで予定表を作成しようとしてます。 テーブル フィールド名 連番 オートナンバー型 年月日 2 2023/07/23 11:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelシート上のマクロを登録し...
-
入力済み、選択したセルに連動...
-
【Excel VBA】マクロボタンを表...
-
マクロを登録しているボタンが...
-
オブジェクト名をVBAで指定...
-
エクセルの画面にユーザーフォ...
-
ボタンを画像で作るか、CSSでデ...
-
参考ボタンは必要?不要?
-
マクロで作ったボタンのサイズ...
-
UPS警告音を止めたい
-
EXCELのマクロが 実行時エラー5...
-
Excelで、ボタンにコメントをつ...
-
HPバナーのもりあがった感じの...
-
エクセルでマクロボタンを押す...
-
フォームコントロールから作っ...
-
Word
-
VBAでフォームの閉じるボタンを...
-
エクセルマクロ 自動でMSGボッ...
-
dynabookのボタンが機能しない
-
EXCELのオプションボタンの使い方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelシート上のマクロを登録し...
-
【Excel VBA】マクロボタンを表...
-
UPS警告音を止めたい
-
エクセルの画面にユーザーフォ...
-
マクロを登録しているボタンが...
-
EXCELのマクロが 実行時エラー5...
-
複数シートのボタンに同一の動...
-
入力済み、選択したセルに連動...
-
フォームコントロールから作っ...
-
Excelで、ボタンにコメントをつ...
-
Excel ラジオボタンのリセット...
-
エクセルで、オプションボタン...
-
マクロで作ったボタンのサイズ...
-
オブジェクト名をVBAで指定...
-
エクセルでマクロボタンを押す...
-
Accessのフォームでタブの色
-
excel スクロールしても常にボ...
-
ユーザーフォームをショートカ...
-
EXCELの塗りつぶしのボタ...
-
パナソニックKX-PW22CLHの電話...
おすすめ情報