アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセル内にチェックボックスとオプションボタンを作成していて
行き詰ってしまったので質問させてください。

例えば、下のようなデザインになっているとして、

Q1.
□A □B (○C ○D)
 ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄ ̄
↑チェックボックス  ↑オプションボタン

チェックボックスAとBのうち、Bにチェックを入れると
右にあるCとDのオプションボタンが選択可能になるという連携スタイルにすることは可能でしょうか?
その場合は併せて、Aにチェックを入れた場合はCとDのオプションボタンが操作できなくなるようにもしたいのです。

どなたか教えて下さい。よろしくお願いします。

A 回答 (5件)

こんばんは。



最初に、
>VBAに関しては、なんとか調べながらできる程度なので

VBAは、覚えるのに時間が掛かるし、その割りにはうまく使えないので、掲示板で上手に人に教わる方法を覚えたほうが早いです。(ブタもおだてりゃ木に登る(^^;。結構そんな程度で人は気を良くして書いてくれるものなのですね。気難しい人には、無視せず、さりげなく。。。)

本題です。(遅くなりました)
#2のimogasiさんので応用は利きますが、こちらで書いてみました。

思ったよりも、先のことを考えると、なかなか難しいです。本当は、Class を使えば、オプションボタンの統一が可能なのですが、今度は設定がややこしくなります。


最初に、オプションボタン(コントロールツール)の横に4つずつ並べて、全部必要な数を並べてください。

○ ○ ○ ○

○ ○ ○ ○

○ ○ ○ ○

○ ○ ○ ○

'以下は、全部シートモジュールでよいです。(コントロールツールのオプションボタンが編集可能-青い三角定規がオン-で、そのコントロールをダブルクリックすると、画面が開きます)
'-----------------------------------------
'(1) グループ分け用のマクロです。

Sub SettingGrouping()
'オプションボタンのグループ別けマクロ
'一度だけ必要です。
  Dim cnt As Long
  Dim cn As Variant
  Dim i As Integer, j As Integer
  For Each cn In OLEObjects
    If TypeOf cn.Object Is MSForms.OptionButton Then
      cnt = cnt + 1
    End If
  Next cn
  For i = 1 To cnt
    j = Int((i - 1) / 2) + 1
    OLEObjects("OptionButton" & i).Object.GroupName = "GR" & j
  Next i
End Sub

'------------------------------------
'オプションボタン用のマクロです。
'4つで1セットです。 3,4 ですが、次が、7,8 となります。
Private Sub OptionButton1_Click()
Dim i As Integer
 For i = 3 To 4
  OLEObjects("OptionButton" & i).Enabled = Not OptionButton1.Value
 Next i
End Sub
Private Sub OptionButton2_Click()
Dim i As Integer
 For i = 3 To 4
  OLEObjects("OptionButton" & i).Enabled = OptionButton2.Value
 Next i
End Sub
'-----------------------------------
'次の行
Private Sub OptionButton5_Click()
Dim i As Integer
 For i = 7 To 8
  OLEObjects("OptionButton" & i).Enabled = Not OptionButton5.Value
 Next i
End Sub
Private Sub OptionButton6_Click()
Dim i As Integer
 For i = 7 To 8
  OLEObjects("OptionButton" & i).Enabled = OptionButton6.Value
 Next i
End Sub

'----------------------------------
'オプションボタンの集計のためのマクロ(サンプル)

Sub SumTotal()
'オプションボタン集計用マクロ
  Dim cnt As Long
  Dim cn As Variant
  Dim n As Integer
  Dim k As Integer
  'オプションボタンの数を取る
  For Each cn In OLEObjects
    If TypeOf cn.Object Is MSForms.OptionButton Then
      cnt = cnt + 1
    End If
  Next cn
 k = 1
 For i = 1 To Int(cnt / 4)
  For j = 1 To 4
   If OLEObjects("OptionButton" & k).Object.Enabled Then
    n = Abs(OLEObjects("OptionButton" & k).Object.Value)
    'J列からの書き出し
    Cells(i, 10 + j - 1).Value = k & "," & n
   Else
    Cells(i, 10 + j - 1).Value = k & ", -"
   End If
   k = k + 1
   Next j
 Next i
End Sub

書き出しは、
J列から

1,1  2,0  3, -  4, -
5,0  6,1  7,0  8,0

このような集計スタイルになります。これは、

k & "," & n
k & ", -"

ここで、違ったスタイルでも、アレンジできます。これは、集計しやすいようにします。当面、どのように集計をするかというサンプルです。
    • good
    • 0
この回答へのお礼

遅い時間にご回答いただき、ありがとうございました!
実は、集計に関してはあまり重要ではなかったのでオプションボタンをコントロールすることができただけで
大変助かりました。本当にありがとうございます。

>VBAは、覚えるのに時間が掛かるし、その割りにはうまく使えないので、掲示板で上手に人に教わる方法を覚えたほうが早いです。

参考になります。ありがとうございます!

お礼日時:2008/02/08 11:32

>すべてオプションボタンで設定した場合は


>どのようにすればいいのでしょうか。

#3 は、読み間違えで回答しました。
改めて書き直します。すみません。しばらく時間ください。
    • good
    • 0
この回答へのお礼

ありがとうございます。
#2の方へのお礼にも記載したのですが、
ダイアログボックスではなく、エクセルのシート上にボタンをおきたいので、
可能でしたらそのやり方を教えていただければ幸いです。

VBAに関しても、すらすらと操作できるほどではないので
基本的なことも質問してしまうかもしれませんが、どうかよろしくお願いいたします。

お礼日時:2008/02/07 11:32

こんばんは。



#1の回答者です。

>それでは、すべてオプションボタンで設定した場合は
>どのようにすればいいのでしょうか。

それは、

>Q1.
>□A □B (○C ○D)
> ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄ ̄
>↑チェックボックス  ↑オプションボタン

このQuestion の内容に依存してくるのではないでしょうか?

例えば、チェックボックス自体も、二者択一ということも可能です。

これは、私の勝手な想像ですが、こういう方法はどうでしょうか?

Aのチェックボックスを選択したら、Bは、オフになる。
Bのチェックボックスを選択したら、Aは、オフになって、なおかつ、オプションボタンの選択をしなくてはならなくなる。(そういうチェックボックスの使い方は間違っているという人もいますから、あえてお勧めはしません)

--ということは、オプションボタン C, D の片方が、デフォルトになる、という方法にします。

私自身は、何度も、似たような質問は受けたことがあるのですが、質問として出てくるものは、どれひとつとして決まったものはありません。おそらく、ご質問者さんが当初考えている以上に、これは、難しい部分があるような予感がします。(そうでなければよいのですが。)理由は、今は、4つのコントロール・オブジェクトしかありませんが、おそらくは、20個とか、30個とか多数になってきます。そうすると、複雑になってきます。

とりあえず、こちらでは、どうするかは決めかねますので、ひとつの方法を選んでください。それに合わせて、考えていきます。Question の質問のサンプル文を出していただいて、こうしたいとおっしゃっても良いです。

なお、返事が遅くなるようでしたら、「お礼側」に入れてください。そうすると、メールがこちらに直接届きます。
    • good
    • 0

#1のお礼部分に関して


userform内に
○OptionButton1
○OptionButton1  ○OptionButton3
         ○OptionButton4
の配置で貼り付ける。
---
Private Sub OptionButton1_Click()
If OptionButton1 = True Then
For i = 3 To 4
UserForm1.Controls("Optionbutton" & i).Enabled = False
Next i
End If
End Sub

Private Sub OptionButton2_Click()
For i = 3 To 4
UserForm1.Controls("Optionbutton" & i).Enabled = True
Next i
End Sub

Private Sub UserForm_Initialize()
For i = 1 To 4
UserForm1.Controls("Optionbutton" & i) = False
Next i
For i = 3 To 4
UserForm1.Controls("Optionbutton" & i).Enabled = False
Next i
For i = 1 To 2
Me.Controls("OptionButton" & i).GroupName = "Group1"
Next i
For i = 3 To 4
Me.Controls("OptionButton" & i).GroupName = "Group2"
Next i
End Sub
---
Userform1が
Initialize時に
全てをFalse
1,2と3,4をグループ化
3,4はEnabeledをFalseに
ーー
1をクリックしたとき
Trueなら3,4をEnabeledをFalseに
ーー
2をクリックしたとき
3,4をEnabeledをTrueに
する。
ーーーーー
仕様がこれでよいかどうか。
しかしVBAのことを質問に一言も書いてない人に判るのかな。
    • good
    • 0
この回答へのお礼

詳しい説明をありがとうございました。
VBAに関しては、なんとか調べながらできる程度なのでご教授いただいたとおりに作業はできたのですが、
ダイアログボックスではなく、エクセルのシート上にボタンを
おきたかったので、今回教えていただいたことを参考にまた少し頑張ってみます。

お礼日時:2008/02/07 11:29

こんにちは。



ちょっと、そのままでは論理が成り立ちません。

>Bにチェックを入れると
>右にあるCとDのオプションボタンが選択可能になるという連携スタイルにすることは可能でしょうか?

というのは可能ですが、

チェックボックスは、二者択一ではなくて、両方がオフも、両方がオンもありますから、論理に食い違いが生じてしまいます。

例えばオプションボタン1,2 は、以下のようにすれば、選択が出来るようになりますし、また、選択が出来ないようにもなりますが、チェックボタンを両方を選択したときは、どちらでもありになってしまいます。少し、考えてみてください。

'コントロールツールのチェックボックスと、オプションボタン
'マクロは、そのツールのシートモジュール
'---------------------------------------------
Private Sub CheckBox2_Click()
Dim i As Integer
 For i = 1 To 2
  
  OLEObjects("OptionButton" & i).Object.Enabled = CheckBox2.Value
 Next i

End Sub
Private Sub CheckBox1_Click()
Dim i As Integer
 For i = 1 To 2
  OLEObjects("OptionButton" & i).Object.Enabled = Not CheckBox1.Value
 Next i
End Sub

この回答への補足

ありがとうございます。
おっしゃるとおりです。

それでは、すべてオプションボタンで設定した場合は
どのようにすればいいのでしょうか。
よろしくお願いいたします。

補足日時:2008/02/06 17:10
    • good
    • 0

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