ラジオボタンをセルに合わせて配置したいです。
http://oshiete1.goo.ne.jp/qa1194660.html
より
1.コピー&ペーストでアクティブセルに配置
2.数値でセルに合わせて配置
と二つの方法は理解できたのですが。
1.は一度適当なところにボタンを貼り付けなければいけない。
2.は数値による位置指定なのでやや不安定(セルの大きさが変更された場合に対応しなければならない)
ですので簡潔に、
1.アクティブセルを指定
2.セルの大きさに自動的に合わせてオプションボタンを配置
といったことはできないのでしょうか。
No.1ベストアンサー
- 回答日時:
Excel.FormコントロールのOptionButtonは
With ActiveCell
.Worksheet.OptionButtons.Add .Left, .Top, .Width, .Height
End With
ActiveXコントロールのOptionButtonは
With ActiveCell
.Worksheet.OLEObjects.Add ClassType:="Forms.OptionButton.1", _
Left:=.Left, Top:=.Top, _
Width:=.Width, Height:=.Height
End With
どちらもActiveCelの.Left, .Top, .Width, .Height それぞれのプロパティに合わせて配置すれば良いです。
シート上に配置するのは、Formコントロールをおすすめします。
シート上にActiveXコントロールを多数配置する場合、不具合が発生する事が多いと聞きます。
Excel.Formコントロールの方が親和性が良いのだと思います。
この回答への補足
>シート上にActiveXコントロールを多数配置する場合、不具合が発生する事が多いと聞きます。
調べてみたところ、以下のページを発見しました。
http://oshiete1.goo.ne.jp/qa329690.html
当時Excel2000以前でしょうか?
同じ不具合かどうかはハッキリしません。(やや古い記事ですし)
宜しければ不具合の具体的な内容を教えていただけないでしょうか。
現在ActiveXコントロールを多く使っており、Formコントロールを使用した方が良い理由を知りたいです。
回答ありがとうございます。
自動的にセルのLeft,Top~に合わせてはくれないようですね。
ご教授いただいた方法で実現したいと思います。
No.9
- 回答日時:
こんばんは。
Wendy02さん。お返事ありがとうございます。なるほど、『回答する意識の違い』ですね。
ひょっとすると、こういったQ&A掲示板に対する利用ポリシーの違いとでも言えるのでしょうか。
私は別にプロではないので『教えている』という意識は薄く、そのせいかもしれませんね。
どちらかというと、ユーザーの立場でアドバイスしながら自分も勉強させてもらってる意識の方が強いのです。
最終的には、メーカーが機能を切り捨てたら方向性に従うも何もなく、使えないわけですから今からその準備をしておかなくても。
とは個人的には思いますが。
何か大げさだなあ...と思ってるところがきっと納得云々の部分なのでしょう。
VBAヘルプは確かにそういう方向性が見てとれないわけでもないですが、2007のメニュー構成や一般ヘルプにはあまりそういう方向性は感じ取れないもので。
#そう言えばココは『[技術者向] コンピューター > プログラミング > Visual Basic 』カテでした。
いずれにしても、
『ワークシート上にOptionButtonなどのコントロールを多数配置する場合、フォームコントロールの方が優れているが、
問題は発生するけれどもMicrosoftが勧めているActiveXコントロールをやむを得ず使わざるを得ない』
というのがWendy02さんのお考えですね。
先にも書いたように
>経験豊富な回答者の方がフォームコントロールよりもActiveXコントロールを勧められた事例に初めて遭遇しました。
>同様なケースでのアドバイスの仕方も、そろそろ考え直さないといけない時期なのでしょうかね。
という事で私もしばらく考えてみます。
(深く考えるのは苦手なので長続きはしないかもしれませんが)
お答えを頂いて、すっきりしました。ありがとうございました。
質問者のShimantoGaさん、スレッドをお借りした形になってしまったようで申し訳ありません。ありがとうございました。
>質問者のShimantoGaさん、スレッドをお借りした形になってしまったようで
一向に構いません、私も興味深く読ませていただいておりました。
以下私の感想なのですが・・・
>問題は発生するけれどもMicrosoftが勧めているActiveXコントロールをやむを得ず使わざるを得ない
これは色々と問題あるのではないかと。
ActiveXがいかに将来性のある技術であろうと、現時点で問題があるのが発覚した時点でフォームコントロールを使用しなければならないでしょう。
でなければシステムとして成立しませんし、成果物として提出も出来ません。
バージョン制約を受けた場合ActiveXコントロールに問題があることは発覚しているので、フォームコントロールを使用するようにする。
Excel最新版では問題が解消されているので、将来性のあるActiveXコントロールの使用を「推奨」する。
私見ですがこんなイメージでよろしいでしょうか。
No.8
- 回答日時:
こんばんは。
#5に対する返事です。それは、回答する意識の違いです。
納得していただけるとは思いませんが、こちらの考え方を多少書かせていただきます。
>両方のコントロールを使ってみれば解る事で、それぞれ特性の違いがあるわけですから、その特性を把握した上で、自分のスキルと目的に応じて使い分ければ良いだけの話です。
>『現状で使えるものは、そのスタイルにこだわらず、すべて使うというのは、誰に遠慮することもなく、あたりまえのことですからね。』
それは、個人の立場でコーディングしているなら、それで良いと思います。誰にはばかることなく書けばよいと思います。VBAは、本来プライベートなものでチームで共通の書法で構築するものでもありません。(それにしては、私は、質問者さんに余計なことを書きすぎていますが、それは突っ込まないでください。)しかし、私は、一応、掲示板で教えている以上は、人に見せるコードを意識して、ある程度のMicrosoft 側の方向性には従っていくことが良いのではないかと考えています。(ただし、最近、WorksheetFunction.関数を一部Application.関数にしました。コードの無駄が多くなるからです。)
以前になりますが、掲示板では良く知られた人が、私の書いたVer.4マクロ関数を使ったものに対してと、何回も執拗に攻撃をしました。書いている内容は荒唐無稽なものでしたが、回答者として技術的に多少は自信がある人にとって、良く分からないテクニックを他人に書かれるのは面白くない、というのは心理的には分かるような気がします。
その人がOffice の知識に対しては不十分だったとしても、そうした情報を知る手段もなく、まして一般の入門者や初心者の方には、半永久的に届かないテクニックになってしまう可能性が強いと思います。
それと、Microsoft 社自身の開発の考え方というのは、仮にどんなユーザーがいたとしても、最終的には古いものは、時期が来たら切り捨てする、ということを何度もしてきていますから、現行では、Officeの開発のチームリーダが、VBAを除去しないと保証(2008年時)はしても、小出しにオブジェクトを切り捨てすることは起こりうることだ、と思います。それよりも、VBA上では、ヘルプにないということは、何よりも使ってほしくない、と解釈しています。
なお、分析ツールアドインは、Ver.5マクロのフォームを未だに使っています。そして、このアドインは、不具合もあると聞きます。
私は、Excel 2000からVBAを始めて、遡って、Ver.4 やVer.5 のテクニックは、新たに学びました。捨てがたい情報はあります。実際、このアドインはハングすると解除が面倒です。しかし、そうしたテクニックは、唯一無二のものではないようです。ただし、それを補うテクニックは、格段に難しくなることが多いのです。
Ver.5のフォーム・ツール(コントロール)の場合は、オブジェクトのプロパティは分かっても、多くの方は、メソッドまでは良く分からないと思うのです。VBAを始めたばかりの人や初心者の人たちのことを考えていくと、あえて聞かれる以外には、参考程度にしか紹介できないように思っています。事実、Office 関連やここの掲示板でも、Ver.5という認識をする人はいないとは思いますが、Ver.5 のフォーム・ツールに関する質問は極端に減ってきたと思います。
つまり、おっしゃっている
>A)優れているフォームコントロールではなく、Microsoftが勧めているActiveXコントロールを使ったほうが良い。
ということを考えています。良い悪いではなく、やむをえないのです。
No.7
- 回答日時:
[フォームコントロール]と[ActiveXコントロール]についてはヘルプの「フォーム」の項を参照してください。
http://office.microsoft.com/ja-jp/excel/CH102509 …
[フォームコントロール]も[ActiveXコントロール]も、ワークシート上に配置する時
OptionButton や CheckBox などは、必ずしもマクロが必須というわけではないのです。
手作業で配置しリンクセルを設定して、セルのデータと連携しながらセル以外の入出力手段として使えます。
VBA的に違いを把握しようとするなら[オブジェクトブラウザ]を開いてください。(VBEウィンドウで[F2]キー)
[オブジェクトブラウザ]ウィンドウ内で右クリック「非表示のメンバを表示」。
検索ボックス.検索文字列に OptionButton と入力して「検索」。
非表示メンバになっている
Excelライブラリの OptionButton クラスが[フォームコントロール]の OptionButton です。
シート配置する際、2003以前は[フォーム]ツールバーでした。
MSForms のライブラリの OptionButton クラスが[ActiveXコントロール]の OptionButton です。
シート配置する際、2003以前は[コントロールツールボックス]ツールバーでした。
回答ありがとうございます。
>Excelライブラリの OptionButton クラスが[フォームコントロール]の OptionButton です。
確かにExcelライブラリとMSFormsライブラリの二つにOptionButtonクラスが存在していました。(OptionButtonsなんてのもありますが)
見るとフォームコントロールのOptionButtonにはClickイベントが存在しないなど、ActiveXコントロールとは別物のようです。(今さらですが)
このメンバに応じてフォームかActiveX、どちらのコントロールを使用するか決めれば良いということですね。
>シート配置する際、2003以前は[フォーム]ツールバーでした。
>2003以前は[コントロールツールボックス]ツールバーでした。
2003と2007で名前が変わっているとややこしいですね。
No.6
- 回答日時:
こんにちは。
>ユーザーフォームに対してフォームコントロールを乗せる方法しか載っていません。
#1,2さんが書いていたことに対しても、私の書いたことにも、どうやら誤解があるようです。ご質問者さんは、フォームというのは、UserForm ツールのことをおっしゃっているのだと思います。「フォームがシートに親和性が高い」というフォームとは、開発メニュー→挿入→フォームコントロールのツールのことです。
フォーム・ツールの載っている本など、現在では売られてはいませんし、一般の方には、詳しい資料やテクニックは入手できないはずです。
http://oshiete1.goo.ne.jp/qa329690.html
フォームとコントロールツールボックスの違い
一応、フォームのマクロも出しておきますが、もし、フォームについて分からないようでしたら、この件についての書き込みは忘れたほうがよいですね。
なお、
>2.セルの大きさに自動的に合わせてオプションボタンを配置
ということはありません。画面サイズに連動していますから、オプションボタンの大きさ自体は変わりません。
'-------------------------------------------
Sub Test1()
'オプションボタン追加
Dim i As Long
For i = 1 To 10
With Cells(i, 1)
x1 = .Left + 2
y1 = .Top
x2 = .Offset(, 1).Left
y2 = .Offset(1).Top
End With
With ActiveSheet.OptionButtons.Add(x1, y1, x2 - x1, y2 - y1)
.Caption = ""
End With
Next i
With Range("A1")
x1 = .Left
y1 = .Top
x2 = .Offset(, 1).Left
y2 = .Offset(i - 1).Top
End With
With ActiveSheet.GroupBoxes.Add(x1, y1, x2 - x1, y2 - y1)
.Caption = "1"
End With
End Sub
'-------------------------------------------
Sub Test2()
'オプションボタン削除
ActiveSheet.OptionButtons.Delete
ActiveSheet.GroupBoxes.Delete
End Sub
'-------------------------------------------
回答ありがとうございます。
確認しましたところ、UserFormのツールボックスに存在しているアイテムはすべてフォームコントロールではなくActiveXコントロールのようですね。
失礼しました。
No.5
- 回答日時:
よくわかりません。
「Active X コントロールを多く使えば、外部プログラムですから、メモリの負担が多くなり問題が発生するのは言うまでもありません。」
「そういう場合は、Formツールのほうが圧倒的に優れていますが、」
ここまでは解ります。
「だから、Formツールが良いともいえません。」
なぜにそういう結びになるのかが理解できません。
本意はどこにあるのですか?
ワークシート上にActiveXコントロールを多数配置する場合、問題は発生するけど
A)優れているフォームコントロールではなく、Microsoftが勧めているActiveXコントロールを使ったほうが良い。
B)フォームコントロールが良いともいえず、悪いともいえず。どちらでも構わない。
C)各ユーザーが判断するのであって、アドバイスしないほうが良い。
D)その他。
答えて頂く義務はありませんが、何かすっきりしないもので。申し訳ありません。
仮に(A)だとすると、経験豊富な回答者の方がフォームコントロールよりもActiveXコントロールを勧められた事例に初めて遭遇しました。
同様なケースでのアドバイスの仕方も、そろそろ考え直さないといけない時期なのでしょうかね。
ただ、[フォームコントロール]が古いと言っても、例えば2007からExcelを始めた方は[開発]-[コントロール]タブの[挿入]で
[フォームコントロール]、[ActiveXコントロール]と並んで出てくるものを古いと感じないのではないでしょうか。
挿入操作もマクロ記録できる状況で、「裏技」とは言えないでしょう。
両方のコントロールを使ってみれば解る事で、それぞれ特性の違いがあるわけですから、
その特性を把握した上で、自分のスキルと目的に応じて使い分ければ良いだけの話です。
『現状で使えるものは、そのスタイルにこだわらず、すべて使うというのは、誰に遠慮することもなく、あたりまえのことですからね。』
No.4
- 回答日時:
こんにちは。
先の書き込みから、こちらを読ませていただきました。
>現在ActiveXコントロールを多く使っており、Formコントロールを使用した方が良い理由を知りたいです。
それは立場の違いだと思います。ある程度のレベルの人なら、どちらがどうということはいえないのですが、VBAを近年始めた人にとっては、古いもの(レガシー)はお勧めしません。レガシーテクニックを使わざるを得ないときはあります。しかし、それは、今では、「裏技」のような存在になってしまうと思うのです。
ActiveX コントロールのListBox のスクロールのエラーの問題は、前から聞いたことがありますが、それはバグとして認識され、改善されるべき問題であると思います。Formツールは、本来、DialogSheetに使われ、Excel Ver.5で使われていたもので、しょせん、レガシーだと思っています。その周辺のオブジェクトは、今のOffice 2000? 移行のHelp に出てきません。プロパティ自体は、ローカルウィンドウで分かるにしても、ほとんどの方は、メソッドなどは分からないと思うのです。それを、今さら、新しく始めた人たちにまで使ってください、とも言えないのです。事実上、Microsoft 側は、Active X コントロールへの移行を勧めていると思うのです。
Formツールの利点と比較すると、ActiveXコントロールは、いわゆるコレクション形式にはなっていませんので、コントロール配列の真似事などは基本的には出来ません。(使うためには、クラス・インスタンスが必要です。)また、Active X コントロールを多く使えば、外部プログラムですから、メモリの負担が多くなり問題が発生するのは言うまでもありません。そういう場合は、Formツールのほうが圧倒的に優れていますが、だから、Formツールが良いともいえません。
回答ありがとうございます。
わざわざこちらの方までご回答いただき誠に有難うございます。
つまり、「レガシーテクニックを使わざるを得ないとき」以外はActiveXコントロールでの実装を考えた方が良い、ということで宜しいでしょうか。
気になったのはExcel VBAの書籍をみると、ユーザーフォームに対してフォームコントロールを乗せる方法しか載っていません。
ActiveXコントロールを見かけるのはかなり希でした。
そもそもワークシートにコントロールを張り付ける、というやり方自体多くの書籍で紹介されていません。(ほとんどユーザーフォームに対してのみ)
私の参考にした書籍が間違っていた(悪い意味ではなく)だけでしょうか。
No.3
- 回答日時:
シートのセルの画面上の位置とコントロールの位置は全く関係が無く、基本はコントロールを貼り付け設置する人の位置あわせの責任です。
シートに浮いているようなイメージ。でも
(1)コントロールをコードから生成し(ADD)
(2)そのコントロールのLeft,Top、Width、HeightをセルのLeft,Top、Width、Heightに関連付けることができる。
OptionButtonの例で
Sub test02()
For i = 2 To 5
l = Cells(i, "B").Left + 10
t = Cells(i, "B").Top + 5
w = Cells(i, "B").Width - 10
h = Cells(i, "B").Height - 5
With ActiveSheet.OLEObjects.Add(ClassType:="Forms.OptionButton.1")
.Top = t
.Left = l
.Width = w
.Height = h
.Object.Caption = "ボタン" & (i - 1)
End With
Next i
End Sub
こういうことを聞いているのかな。
行高、列幅は適当な大きさに設定しておくこと。
回答ありがとうございます。
ExcelとActiveXを関連付ける手段が提供されているのか、と考えていたのですが。
やはり自分で位置指定してやるしかないようですね。
Dim i As Integer
i = 1
For i To 2 Step 1
ActiveSheet.Cells(i, 1)
'アクティブセルに合わせてOptionButtonを配置
Next
と、こんなことがしたかったんですが。
教えていただいたコードを参考にさせていただきます、ありがとうございました。
No.2
- 回答日時:
>宜しければ不具合の具体的な内容を教えていただけないでしょうか。
>現在ActiveXコントロールを多く使っており、Formコントロールを使用した方が良い理由を知りたいです。
ActiveXコントロール(MSForms.Control)は本来UserFormに配置して使う方が適しているのではないでしょうか。
最近のスレッドで
http://oshiete1.goo.ne.jp/qa5036603.html
こういうのもありました。2003sp3/vba6.5 1024でも同様に、Excelが落ちてました。
今日現在では発生しなくなりましたので更新プログラムがUpdateされていたようです。
ですので、不具合が多いといっても
http://support.microsoft.com/kb/169885/ja
http://support.microsoft.com/kb/211866/ja
http://support.microsoft.com/kb/312949/ja
http://support.microsoft.com/kb/315199/ja
http://support.microsoft.com/kb/320520/ja
http://support.microsoft.com/kb/330157/ja
http://support.microsoft.com/kb/416344/ja
http://support.microsoft.com/kb/417966/ja
http://support.microsoft.com/kb/418780/ja
http://support.microsoft.com/kb/823988/ja
http://support.microsoft.com/kb/834685/ja
http://support.microsoft.com/kb/838006/ja
http://support.microsoft.com/kb/838914/ja
http://support.microsoft.com/kb/842231/ja
バージョンアップやサービスパック、修正パッチなどで解消されるケースも多いのでしょう。
シート配置の場合Formコントロールをおすすめしたのは、例えばオプションボタンを多数配置する時に、
『Formコントロールで事が足りるならば』
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
あえてActiveXコントロールを使わなくても良いのではないでしょうか。という意が強いです。
[フォーム]ツールバーのコントロールはExcelライブラリのものなので、
いわば別アプリのActiveXコントロールよりも、相性が良いような気がします。
不具合情報などを参考に、『そんな事もあるんだ』くらいに受け取っておけば何かの時に対処できますから、
知ってて使う分にはいいんじゃないでしょうか。強固に反対しているわけではありません。
回答ありがとうございます。
参考サイトを読ませていただきました。
Excelのバージョン制約を受ける場合、古いものほどFormコントロールを使用した方がバグが少ない、と認識しました。
Excelの最新版であればどちらでも良い、といった感じでしょうか。
大変勉強になりました、ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カメラスクロールするのを動画...
-
ACCESS2010のVBAでフォーム内ク...
-
'ckbl' コントロールは作成され...
-
エクセル・VBA CheckBoxのオブ...
-
EXCELでactivexコントロールを...
-
エクセル コントロールツール...
-
TreeGridView(オープンソース)...
-
ExcelVBAでListViewが使用できない
-
SQLDataSourceのSQL文を変えて...
-
C# Form上に配置されたコントロ...
-
リストボックスの中にコンボボ...
-
tagプロパティについて
-
コントロールを移動できない
-
ユーザコントロールのイベント...
-
プリンタポートの監視
-
VB.net webアプリケーションで...
-
アクセス特有の書き方?
-
無償で利用できる暗号化ライブラリ
-
EXCEL VBAでテンキー...
-
C# タブのコントロール取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カメラスクロールするのを動画...
-
エクセル・VBA CheckBoxのオブ...
-
ExcelVBAでListViewが使用できない
-
エクセルVBAでオプションボタン...
-
vb.netで画面のコントロールId...
-
C#で角が丸いテキストボックス
-
VBA ユーザーフォームの Keypre...
-
ユーザーフォームで動的(Me.Con...
-
フォーム上の現在アクティブな...
-
Excel VBA で Richtextboxを使...
-
ACCESS2010のVBAでフォーム内ク...
-
Groupboxの配下のコントロール...
-
コントロールを移動できない
-
コンボボックスの文字によるif...
-
(VBA)スピンボタンの大量...
-
Labelコントロールの(左右)余...
-
イメージコントロールに 読み込...
-
間違えて配置してしまったコン...
-
EXCELでactivexコントロールを...
-
OCXって何ですか?
おすすめ情報