- ベストアンサー
エクセル2000のオプションボックスで質問です
いつもお世話になります。 エクセル2000のオプションボタンについて教えて下さい。 過去の質問でグループ化の方法は判ったんですが、今回作ろうと思っているシートに6つの選択肢のオプションボタンを500個位配置したいと思います。 何か簡単な方法は在りませんでしょうか? 宜しくお願い致します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 朝から、ずっと、かなり試行錯誤を繰り返しました。 やっとサマになったのですが、不確定要素がかなりあって、もしかすると、うまく行かないのではないか、と思います。 フォーム・ツールは、コントロールツールよりは軽いけれども、数が多くなると動かなくなる可能性もあります。その場合は、例えば、ダブルクリック・イベントなどに換えてしまったほうが確実ですね。 なお、現在は、「距離」は、G列(7列目)に出力させるようになっております。7列目ではなければ、Const COL As Integer = 7 の部分を変更してください。 また、行の高さは、13.5 を標準にして作られていますので、それ以下では、誤動作の可能性があります。なるべく、新規のシートでお試しになったほうがよいです。 以下は、おまけとして、消去プログラムがついています。 以下のコードは、必ず、<標準モジュール>に設定してください。 '----------------------------------------------- Option Explicit Private Const FIRST_ROW As Integer = 1 '始まりの行 Private Const LAST_ROW As Integer = 80 '終わりの行 Private Const COL As Integer = 7 '7列目に出す Sub AddOptionButton_Groups() 'フォームツール Dim i As Long Dim j As Integer Dim GB As Object Dim DefaultRowHeigth As Double DefaultRowHeigth = ActiveSheet.Cells.EntireRow.RowHeight For i = FIRST_ROW To LAST_ROW + FIRST_ROW - 1 With ActiveSheet.Cells(i, 1) For j = 0 To 5 Set GB = ActiveSheet.GroupBoxes.Add(.Left, .Top, .Resize(, 6).Width, .Height) With GB .Text = "" .Visible = False 'グループボックスのラインが消す End With With ActiveSheet.OptionButtons.Add(.Offset(, j).Left + .Width / 2, .Offset(, j).Top, .Offset(, j).Height, .Offset(, j).Height) .OnAction = "OBIndexOut" .Caption = "" .Locked = True .LockedText = True End With Next j GB.Height = DefaultRowHeigth '高さを再設定 End With Next i End Sub Sub OBIndexOut() 'LinkedCell の変り Dim rng As Range Set rng = ActiveSheet.OptionButtons(Application.Caller).TopLeftCell ActiveSheet.Cells(rng.Row, COL).Value = rng.Column Set rng = Nothing End Sub '=============================================== Sub ObjectClear() 'おまけ-フォームツールを全部消去 ActiveSheet.GroupBoxes.Delete ActiveSheet.OptionButtons.Delete ActiveSheet.Columns(COL).ClearContents End Sub
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
下記をやってみてどうですか。 3セットにとどめています。 縦に並べています。 質問はこんなことではない場合はすみません。 そうなら、後は本を読んで、グループ化や配置やプロパテイを勉強されてはどうでしょう。 Sub test01() ActiveSheet.DrawingObjects.Delete For j = 1 To 3 For i = 1 To 6 ActiveSheet.OLEObjects.Add ClassType:="Forms.OptionButton.1", _ Left:=180, Top:=60 + (j - 1) * 150 + (i - 1) * 20, Width:=16.5, Height:=18 Next i Next j End Sub 500÷6の85セット以上並べて、何をしようとしているのでしょうか。 とても他人に使ってもらうシートとしては問題があるように思いますが。 セルの位置と関連づけるなら、セルのTopの位置に関連づければよい。 Sub test01() ActiveSheet.DrawingObjects.Delete For j = 1 To 3 For i = 1 To 6 ActiveSheet.OLEObjects.Add ClassType:="Forms.OptionButton.1", _ Left:=Cells(1, "B").Left, Top:=Cells((j - 1) * 7 + i + 2, "A").Top, Width:=16.5, Height:=18 Next i Next j End Sub
補足
回答有難う御座いました。 やりたい内容はこんな感じです。 横向きにすれば出来そうです。 ただメチャメチャ容量大きくなりました。 どうしようか検討中です。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。Wendy02です。 不安定な原因が分りました。それは、フォームのツールのそれぞれの実質的な領域があって、グループボックスで囲うと、チェックボックスの上と下が、その範囲をはみ出てしまうのことでした。だから、行の高さ13.5 で作っていくと、うまくいかないのでした。 >リンクするセルのオートフィルタで6番目だけの内容を表示、サマリしたいです。 オプションボックスサンプル A 1 ● *始まりはどこですか?どういうレイアウトですか? 2 ○ 3 ○ 4 ○ 5 ○ 6 ○ *集計はどこに出しますか? 7 ● 8 ○ グループボックスの線は必要ですか?要らなければ消します。 後、コントロールツールと比較してみますと、コントロールツールは、グループ付けが簡単ですが、集計がうまくいきません。また、ひじょうにシート全体が重くなるような気がしました。
補足
分かり難くてすみません。 実際には他の項目がありますがこんな感じです。 ABCDEFという選択肢と、距離の項目があります。 Fが選択された分の距離の集計を出したいです。 A B C D E F 距離 ○ ○ ○ ○ ○ ● 3 ○ ○ ● ○ ○ ○ 5 ○ ○ ○ ● ○ ○ 6 ○ ○ ○ ○ ○ ● 4 ○ ○ ● ○ ○ ○ 2 ○ ○ ○ ○ ○ ● 7 合計11 宜しくお願いいたします。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 オプションボタンはコントロールツールのほうですか?フォームのほうですか? 位置さえ、はっきりしていれば、マクロでできると思います。 ただし、コントロールが500個というのは、同じシート内では、かなり無理が出てくるかと思います。オプションボタンでなければならない理由はおありですか?計数管理だとすれば、いずれにしても、オプションボタンでなければならない、という理由がありませんね。 今、ためしに、フォーム側のオプションボタンを貼り付けるマクロを作ってみましたが、どうも、グループ化が安定していませんので、その原因を探ってみなければなりませんが。
補足
回答有難う御座いました。 やはり無理がありますか… 今は、フォームのグループボックスとオプションボタンで作成しようかと思っています。 やりたい内容は、行毎にオプションボタンを置いて、リンクするセルのオートフィルタで6番目だけの内容を表示、サマリしたいです。
- mshr1962
- ベストアンサー率39% (7417/18945)
ないと思います。 代案1.ユーザーフォームにオプショングループを設定して セルを選択するかボタンを押すとフォームを表示させてグループを選ばせる ※表示上同様のものを見せたいなら、別シートに 選択1 結果1 選択2 結果2.... 選択5 結果5 選択6 結果6 のような表を作成して範囲をコピーして、 元のシートにShiftを押しながら「編集」「図のリンク貼り付け」で結果を表示する 代案2.アクセスがあるならそちらを利用する。 アクセスの場合はフォームの詳細にオプショングループを作成すれば 各レコードにオプションボタンを設定できます。
補足
回答有難う御座いました。 いろんなパソコンで処理したいのでエクセルで(しかも2000で)やりたいと思います。
お礼
回答有難う御座いました。 やりたかった事はバッチリこれでした。 ただやはり容量が大きくなりました。 一度これで作成してアクセスでも作ってみようと思います。