重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

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

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/03/22 09:02

下記をやってみてどうですか。


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

この回答への補足

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

補足日時:2006/03/18 09:02
    • good
    • 0

こんばんは。

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

宜しくお願いいたします。

補足日時:2006/03/18 08:45
    • good
    • 0

こんにちは。



オプションボタンはコントロールツールのほうですか?フォームのほうですか?

位置さえ、はっきりしていれば、マクロでできると思います。

ただし、コントロールが500個というのは、同じシート内では、かなり無理が出てくるかと思います。オプションボタンでなければならない理由はおありですか?計数管理だとすれば、いずれにしても、オプションボタンでなければならない、という理由がありませんね。

今、ためしに、フォーム側のオプションボタンを貼り付けるマクロを作ってみましたが、どうも、グループ化が安定していませんので、その原因を探ってみなければなりませんが。

この回答への補足

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

補足日時:2006/03/17 16:55
    • good
    • 0

ないと思います。


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

代案2.アクセスがあるならそちらを利用する。
アクセスの場合はフォームの詳細にオプショングループを作成すれば
各レコードにオプションボタンを設定できます。

この回答への補足

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

補足日時:2006/03/17 16:54
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!