- ベストアンサー
OptionButton(フォームとOLEObjects)
エクセル2000です。 1.ワークシートのセル上にオプションボタンを何組か配置する場合、フォームのオプションボタンなら、1つのセルにまず一個を貼り付け、あとはそのセルをドラッグすれば、簡単にたくさん貼り付けることが出来ます。 ところが、「フォーム」ではなく、OLEObjectsというものなのでしょうか、コントロールツールボックスから貼り付けるオプションボタンの場合、貼り付けてドラッグしてもそうはならないようです。 これは、一個一個地道に貼り付けしないといけないのでしょうか? 2.フォームのオプションボタンなら「コントロールの書式設定」でリンクするセルをマウス操作で簡単に指定できますが、OLEObjectsのオプションボタンはプロパティのLincedCellに直接セル番地を入力しないといけないようです。他にもっと簡単にリンクするセルを指定することは出来ないのでしょうか? フォームになれているせいか、OLEObjectsのオプションボタン等は、使い方が良くわかりません。ただ、OLEObjectsのオプションボタンなら一々グループボックスで囲まなくともいいようなので使ってみたいのです。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 最初に、フォームボタンは、コントロール配列になって、そこで、インデックスが排出するのですね。どうも、構造的に、コントロールツールとは違うようですね。コントロールツール側は、インデックスは、排出しないようです。(マクロでは出来ますが) >グループを設定しておけば、グループ内でTrueに出来るのは一個だけという理解でよろしいですか? >同じシートのA1~A20にし、1と2、3と4という具合に、2個ずつグループとする場合、どのようなマクロの記述になるのでしょうか? マクロをみてください。Excel2000 とExcel2003とで試してみましたが、若干、OptionButton の反応が違うようです。 Sub AddControl() Dim i As Integer Dim j As Integer Application.ScreenUpdating = False For i = 1 To 10 For j = 1 To 2 With ActiveSheet.OLEObjects.Add(ClassType:="Forms.OptionButton.1") .Left = Cells(i, j).Left + 5 '中央にずらす .Top = Cells(i, j).Top + 3 '中央にずらす .Height = 13 .Width = 13 'キャプションは、消しておく .Object.Caption = "" 'グループ名を与える .Object.GroupName = "Group" & i 'リンク先セルの位置 .LinkedCell = Cells(i, j + 4).Address .Visible = True '明示的に、On/Off を与える If (j Mod 2) = 1 Then .Object.Value = True Else .Object.Value = False End If End With Next j Next i Application.ScreenUpdating = True End Sub 'おまけ:オプションボタンの削除ツール Sub DeleteOptionButtons() Dim o As Object For Each o In ThisWorkbook.ActiveSheet.OLEObjects If TypeOf o.Object Is MSForms.OptionButton Then o.Delete End If Next End Sub
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。Wendy02です。 >プロパティウィンドウで見てもBackStyleは0-fmBackStyleTransparentになっているのですが・・・。 これは、他のプロパティもいじってみましたが、何か、コントロールツール自体が別のものに変わるようです。透明化は出来ませんでしたね。 #4 onlyromさん曰く >先々のことを考慮すると柔軟性のあるコントロールツールボックスのコントロールを使うほうがベターな気もします。 その「先々」というのは、同感です。私にとって、その「先」があるのかは、本当に未定ですが。フォームツールは、Ver.5 の産物で、ダイアログシートとセットで使えるようになっていますから、表示的には優れているのですが、表現力は落ちます。 コントロールツールは、主にシートオブジェクトに対して設けられることです。その点で、複数のシートに同じようなものが出来ると、なぜか、トラブルを起こすことがあります。それに対して、フォームの属性は、Application側にありますから、意外に軽いし、複数が別々の場所にあっても、トラブルを起こす心配が少ないです。 同じものが二つあるというのは、ややこしいですが、一般ユーザーが使えるようにするには、コントロールツールのプロパティの日本語化が望まれますね。
お礼
有難うございました。 コントロールツールボックスのコントロールは使い慣れてないのでわからないことばかりです。どう柔軟性があるのか、表現力って具体的になんなのか(色をつけられることはわかりましたが)まだぜんぜんわかっていません。 後日、また質問すると思いますのでその節はまたよろしくご指導くださいませ。 有難うございました。
- onlyrom
- ベストアンサー率59% (228/384)
こんにちは。 >1.フォームのオプションボタンなら、1つのセルにまず一個を貼り付け、あとはそのセルをドラッグすれば、簡単にたくさん貼り付けることが出来ます。 >ところが、「フォーム」ではなく、OLEObjectsというものなのでしょうか、コントロールツールボックスから貼り付けるオプションボタンの場合、貼り付けてドラッグしてもそうはならないようです。 フォームのコントロールもコントロールツールボックスのコントロールもそれを貼り付けたセルのフィルハンドルをドラッグすれば、セルと共にコピーできますが、それには条件があります。 (条件)はどちらのコントロールも同じですが。。。 コントロール上で右クリック > コントロールの書式設定 書式設定ダイアログの「プロパティ」をクリック 表示される画面の「オブジェクトの位置関係」で 「セルに合わせて移動やサイズを変更しない」がチェックされてると、セルのドラッグによるコピーは【できません】 それ以外の項目にチェックがされてると、コピー【できます】 質問された時点でコピーできなかったのは恐らく上記が絡んでいたものと思われます。 何はともあれお試しください。 それから、先々のことを考慮すると柔軟性のあるコントロールツールボックスのコントロールを使うほうがベターな気もします。
お礼
>「セルに合わせて移動やサイズを変更しない」がチェックされてると、セルのドラッグによるコピーは【できません】 > それ以外の項目にチェックがされてると、コピー【できます】 お礼がおそくなり申し訳ございません。 有難うございました。 とても勉強になりました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >コントロールツールボックスから貼り付けるオプションボタンの場合、貼り付けてドラッグしてもそうはならないようです。 こちらは、Excel2000で試してみましたが、コントロールツールも、フォームツールも、同じで、コントロールを押しながら、ドラッグすれば、コピーは出来ます。 >OLEObjectsのオプションボタンはプロパティのLincedCellに直接セル番地を入力しないといけないようです。 私には、フォームツールも、コントロールツールもあまり違いは感じられませんが、大量に入れる場合は、マクロを使います。 >OLEObjectsのオプションボタンなら一々グループボックスで囲まなくともいいようなので使ってみたいのです。 プロパティのGroup Name の部分で、グループ名を分けてあげればよいです。フォームツールよりは、誤動作が少ないと思います。 なお、私が、コントロールツール側を好むのは、表現力の豊かさです。イベントもいろいろ持っているし、そのイベントを、クラスによって加工することが可能だからです。
お礼
Wendy02さま、いつもありがとうございます。 1.は、わたしの操作が変だったのか、前回は出来なかったのが今回はドラッグで出来ました。有難うございます。 2.大量にある場合、やはりマクロなんですね。 フォームのオプションボタンならグループのどちらかにリンク先を設定すれば、リンク先のセルは押されたボタンにより、1か2が表示されますが、OLEの場合は、そうではなくすべてのボタンにLinkedCellを指定し、ボタンを押すとLinkedCellがTrueになるし、グループを設定しておけば、グループ内でTrueに出来るのは一個だけという理解でよろしいですか? そうであれば、例えば、OptionButton1~OptionButton20まである場合、それぞれリンク先を同じシートのA1~A20にし、1と2、3と4という具合に、2個ずつグループとする場合、どのようなマクロの記述になるのでしょうか? (やってみましたが、マクロの記録では記録されませんでした。) ご教示いただけると幸いです。
- Ce_faci
- ベストアンサー率36% (46/127)
こんばんわ 1.オプションボタンコントロールが正しいお名前だったと思います。 セルサイズぴったりにボタンを作るのでしたら、矢印キーでボタンの下にカーソルを潜り込ませてコピーして貼り付け先をズラーーーーと選択して張り付ければ同じです。 2.ないのでは 普通はVBAと組み合わせて使用するのかなと思います。 下記の○○○○○○の部分にコードを入れます。 Private Sub OptionButton1_Click() ○○○○○○ End Sub それ以外の使い方としては、 LOOKED CELLにTRUE・FALSEを表示させて、TRUE・FALSEで別セルに関数の結果を導くこともできます。
お礼
1.出来ました!ありがとうございます。 2.そうですか、ありませんか。 有難うございました。
お礼
ありがとうございました。 もう一点だけよろしいでしょうか? 透過させようと思い、コードの中に.Object.BackStyle = 0 を入れてみましたが、透過されず、白く残ってしまいます。 プロパティウィンドウで見てもBackStyleは0-fmBackStyleTransparentになっているのですが・・・。