• ベストアンサー

エクセル2000のオプションボックスで質問です

いつもお世話になります。 エクセル2000のオプションボタンについて教えて下さい。 過去の質問でグループ化の方法は判ったんですが、今回作ろうと思っているシートに6つの選択肢のオプションボタンを500個位配置したいと思います。 何か簡単な方法は在りませんでしょうか? 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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

datasraimu
質問者

お礼

回答有難う御座いました。 やりたかった事はバッチリこれでした。 ただやはり容量が大きくなりました。 一度これで作成してアクセスでも作ってみようと思います。

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

下記をやってみてどうですか。 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

datasraimu
質問者

補足

回答有難う御座いました。 やりたい内容はこんな感じです。 横向きにすれば出来そうです。 ただメチャメチャ容量大きくなりました。 どうしようか検討中です。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。Wendy02です。 不安定な原因が分りました。それは、フォームのツールのそれぞれの実質的な領域があって、グループボックスで囲うと、チェックボックスの上と下が、その範囲をはみ出てしまうのことでした。だから、行の高さ13.5 で作っていくと、うまくいかないのでした。 >リンクするセルのオートフィルタで6番目だけの内容を表示、サマリしたいです。 オプションボックスサンプル   A 1 ●  *始まりはどこですか?どういうレイアウトですか? 2 ○ 3 ○ 4 ○ 5 ○ 6 ○  *集計はどこに出しますか? 7 ● 8 ○ グループボックスの線は必要ですか?要らなければ消します。 後、コントロールツールと比較してみますと、コントロールツールは、グループ付けが簡単ですが、集計がうまくいきません。また、ひじょうにシート全体が重くなるような気がしました。

datasraimu
質問者

補足

分かり難くてすみません。 実際には他の項目がありますがこんな感じです。 ABCDEFという選択肢と、距離の項目があります。 Fが選択された分の距離の集計を出したいです。 A B C D E F 距離 ○ ○ ○ ○ ○ ● 3 ○ ○ ● ○ ○ ○ 5 ○ ○ ○ ● ○ ○ 6 ○ ○ ○ ○ ○ ● 4 ○ ○ ● ○ ○ ○ 2 ○ ○ ○ ○ ○ ● 7        合計11 宜しくお願いいたします。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 オプションボタンはコントロールツールのほうですか?フォームのほうですか? 位置さえ、はっきりしていれば、マクロでできると思います。 ただし、コントロールが500個というのは、同じシート内では、かなり無理が出てくるかと思います。オプションボタンでなければならない理由はおありですか?計数管理だとすれば、いずれにしても、オプションボタンでなければならない、という理由がありませんね。 今、ためしに、フォーム側のオプションボタンを貼り付けるマクロを作ってみましたが、どうも、グループ化が安定していませんので、その原因を探ってみなければなりませんが。

datasraimu
質問者

補足

回答有難う御座いました。 やはり無理がありますか… 今は、フォームのグループボックスとオプションボタンで作成しようかと思っています。 やりたい内容は、行毎にオプションボタンを置いて、リンクするセルのオートフィルタで6番目だけの内容を表示、サマリしたいです。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

ないと思います。 代案1.ユーザーフォームにオプショングループを設定して セルを選択するかボタンを押すとフォームを表示させてグループを選ばせる ※表示上同様のものを見せたいなら、別シートに 選択1 結果1 選択2 結果2.... 選択5 結果5 選択6 結果6 のような表を作成して範囲をコピーして、 元のシートにShiftを押しながら「編集」「図のリンク貼り付け」で結果を表示する 代案2.アクセスがあるならそちらを利用する。 アクセスの場合はフォームの詳細にオプショングループを作成すれば 各レコードにオプションボタンを設定できます。

datasraimu
質問者

補足

回答有難う御座いました。 いろんなパソコンで処理したいのでエクセルで(しかも2000で)やりたいと思います。

関連するQ&A