[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『オプションボタンの違いについて』(ななな)
はじめまして。
色々検索や資料など見ているのですがオプションボタンの違いが
どうも理解できていなく悩んでいます。
行いたいことはアンケートを作ろうと
オプションボタンで下記のように配置します。
○オプションボタン1 (○オプションボタン5 ○オプションボタン6)
○オプションボタン2 (○オプションボタン7 ○オプションボタン8)
○オプションボタン3 (○オプションボタン9 ○オプションボタン10)
○オプションボタン4
動きとしては
オプションボタン1を選択した時のみオプションボタン5 or オプションボタン6を
選択できる。
オプションボタン2を選択した時のみオプションボタン7 or オプションボタン8を
選択できる。
オプションボタン4を選択すると、どこも選択させない(value=false状態)
というものです。
そこで
現行のExcel2010ではオプションボタンが
2種類(フォームコントロール/ActiveXコントロール)あり、違いが分かっていません。
フォームコントロールとActiveXコントロールでは何がどう違うのでしょうか?
また、AcvtiveXコントロールでは
Private Sub OptionButton1_Change()
OptionButton5.Value = False OptionButton6.Value = False
End Sub でいけるのですが、フォームコントロールで上記動きをさせるには どのようにすればよろしいでしょうか?
初心者的質問で申し訳ないのですが、ご教授よろしくお願いします。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
結論から言えば、やりたいことを行うにはActiveXコントロールを使うことになります。http://office.microsoft.com/ja-jp/excel-help/HA010342745.aspx現在参照不可
しかし、オプションボタンをこれだけ用意する必要が本当あるのでしょうか?
例えば入力規則のリストで選択させ、選択した結果を元に更に入力規則のリストを絞ることが エクセルのシート上で可能です。
やりたいことが労力に見合うのか、メンテナンス性は伴うのか、自分のレベルと比較して背伸び していないか、もう一度考え直した方がいい案件かと思います。 (稲葉) 2014/09/23(火) 09:37
いろいろと駆使すればできないことはないと思いますが、 A-1 A-2 B-1 B-2 C-1 C-2 D のようにしてフラットな構成にしてできないでしょうか。 これだと選ぶのもワンクリックで済み、7つの内の一つしか選択状態になりません。 集計もこの方が楽だと思いますけれど、どうしても今の構成が必要でしょうか。 (Mook) 2014/09/23(火) 12:07
やはりActiveXコントロールになりますか。
フォームコントロールにマクロ登録メニューがあったので
それではできないかと苦慮していました。
考えが単純すぎるのですかね。
オプションボタン1をクリックするとオプションボタン5or6が選択でき
残りは非選択状態とする。
言うのは簡単ですが、おっしゃるように私のレベルから見て背伸びしているのかも…。
(MOOKさん)
アドバイス、ありがとうございます。
設計チームより、オプション1つに対し、2つの機能を選べるようにしたいとの事。
すいません、悩んでいます。
ActiveXコントロールではできそうなんで…。
2つの違いが分かっておらず(お互いの良し悪し等)、こんな質問となっています。
(ななな) 2014/09/23(火) 12:28
これ設問1ですよね? 設問2 設問3 設問4・・・ いくつ作るか分かりませんが、それだけの数クリックイベント作るのでしょうか? ボタン1をクリックしたら、 5・6をEnable = True 7・8・9・10 をEnable = False これを設問毎に明確に分けて作るとなると、ものすごい労力になると思います。
こちらを参考にすればもっと簡単にすることも可能ですが http://www.h3.dion.ne.jp/~sakatsu/Breakthrough_P-Ctrl_Arrays.htm
申し訳ないけど、なななさんがすぐ理解して出来るとは思えないのです・・・
代替案1 セルに「○」と「●」 [A] [B] [C] [D] [E] [F] [1] ○ よくする ○ 毎日 ○ 週3回 [2] ○ たまにする ○ 週1回 ○ 月3回 [3] ● あまりしない ○ 月1回 ● 年3回 [4] ○ しない
クリックしたら交互に入れ替わるようにして、設問毎のブロックで制御を分けてあげる
代替案2 片方オプションボタンをやめて、リストボックにし、 リストボックスの値に応じてオプションボタンのCaptionを変更させる ┌───────┐ │よくする │ │たまにする │ ●毎日 ○週3回 │あまりしない │ ~~~ ~~~~~ │しない │ ↑ ↑ └───────┘ ここの値を選択したリストによって変更する
こんな感じにした方が実装し易いと思います。 (稲葉) 2014/09/23(火) 12:59
なななさんの最初に提示した例をコードにするとこうなります。 '==ここから Private Sub OptionButton1_Click() OptionButton5.Enabled = True OptionButton6.Enabled = True OptionButton7.Enabled = False OptionButton8.Enabled = False OptionButton9.Enabled = False OptionButton10.Enabled = False End Sub Private Sub OptionButton2_Click() OptionButton5.Enabled = False OptionButton6.Enabled = False OptionButton7.Enabled = True OptionButton8.Enabled = True OptionButton9.Enabled = False OptionButton10.Enabled = False End Sub Private Sub OptionButton3_Click() OptionButton5.Enabled = False OptionButton6.Enabled = False OptionButton7.Enabled = False OptionButton8.Enabled = False OptionButton9.Enabled = True OptionButton10.Enabled = True End Sub Private Sub OptionButton4_Click() OptionButton5.Enabled = False OptionButton6.Enabled = False OptionButton7.Enabled = False OptionButton8.Enabled = False OptionButton9.Enabled = False OptionButton10.Enabled = False End Sub '==ここまでが設問1
で私が提案する代替案2は '==ここから Private Sub ListBox1_Change() Dim OP_Cap(1 To 2) As String On Error Resume Next OP_Cap(1) = Array("毎日", "週1回", "月1回")(ListBox1.ListIndex) OP_Cap(2) = Array("週3回", "月3回", "年3回")(ListBox1.ListIndex) On Error GoTo 0 If OP_Cap(1) = "" Then OptionButton11.Enabled = False OptionButton12.Enabled = False Else OptionButton11.Enabled = True OptionButton12.Enabled = True OptionButton11.Caption = OP_Cap(1) OptionButton12.Caption = OP_Cap(2) End If End Sub '==ここまでが設問1
要するにイベントが細分化されてしまうのをどのように少なくするか、が問題なのです。 Mookさんが言うように、フラットにすればVBAすら必要ありません。 また、両方リストボックスにすることで、Captionを書き換えず、ListFillRangeの リンク先を計算式で変更すれば、VBAを使わず動的に選択できます。 (稲葉) 2014/09/23(火) 14:54
>2種類(フォームコントロール/ActiveXコントロール)あり、違いが分かっていません。
私は、既にユーザーにシートを触らせるようなVBA仕様には、殆どしていません。従って、シートに コントロールそのものを貼り付けるという事がないのですが、VBAをやり始めのころの印象では、
フォームコントロールは、持っている機能がActiveXコントロールに比べて少ないですが (例えば、オプションボタンの表示文字列については 殆ど制御できない)、その分シンプルなため 不具合が少ない
対しては、ActiveXコントロールは、細かい機能は多いが、不具合は多い
という印象です。
問題がなければ フォームコントロールを選択していました。
今回の事例をフォームコントロールで行ってみます。
新規ブックの標準モジュールに
'============================================================================================= Option Explicit Sub mk_sample() Dim r As Range Dim g0 As Long Dim g1 As Long With ActiveSheet .DrawingObjects.Delete Set r = .Range("c8:f23") With .GroupBoxes.Add(r.Left, r.Top, r.Width, r.Height) .Caption = "大項目" End With For g0 = 1 To 4 Set r = .Range(.Cells(g0 * 4 + 5, 4), .Cells(g0 * 4 + 6, 5)) With .OptionButtons.Add(r.Left, r.Top, r.Width, r.Height) .Name = "Option" & g0 .Caption = "オプション " & g0 .OnAction = " Opボタン_mng" End With Next g1 = 5 For g0 = 1 To 3 Set r = .Range(.Cells(g0 * 5 + 3, 8), .Cells(g0 * 5 + 6, 14)) With .GroupBoxes.Add(r.Left, r.Top, r.Width, r.Height) .Name = "gbx" & g0 .Caption = "小項目" & g0 End With Set r = .Range(.Cells(g0 * 5 + 4, 9), .Cells(g0 * 5 + 5, 10)) With .OptionButtons.Add(r.Left, r.Top, r.Width, r.Height) .Name = "Option" & g1 .Caption = "オプション " & g1 End With Set r = .Range(.Cells(g0 * 5 + 4, 12), .Cells(g0 * 5 + 5, 13)) With .OptionButtons.Add(r.Left, r.Top, r.Width, r.Height) .Name = "Option" & (g1 + 1) .Caption = "オプション " & (g1 + 1) End With g1 = g1 + 2 Next
End With End Sub '===================================================================== Sub Opボタン_mng() Const ng = 15263976 Dim g0 As Long Dim id As Long id = Replace(Application.Caller, "Option", "") Dim enbdarray As Variant enbdarray = [{5,6;7,8;9,10}] With ActiveSheet For g0 = 5 To 10 With .OptionButtons("Option" & g0) .Value = False .Enabled = False .Interior.Color = ng End With Next Debug.Print id If id <= UBound(enbdarray) Then For g0 = LBound(enbdarray, 2) To UBound(enbdarray, 2) With .OptionButtons("Option" & enbdarray(id, g0)) .Enabled = True .Interior.ColorIndex = xlNone End With Next End If End With End Sub
適当なシートをアクティブにして、mk_sample を実行してください。
投稿された内容に沿って、オプションボタンを作成しました。
mk_sampleの内容は、コードで書きましたが、本来は手動操作で作成するものです。
大項目の枠にあるオプションボタンの4つには、マクロの登録で Opボタン_mng を登録しました。
大項目のオプションボタンを選択してください。
オプション1の選択で 小項目1 オプション2の選択で 小項目2、・・・が選択可能になります。
ひとつの検討材料として、投稿します。 ( ichinose) 2014/09/23(火) 18:16
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.