Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5814 / 13646 ツリー ←次へ | 前へ→

【48700】クリックイベントのコードの記述について シュウ 07/5/2(水) 16:30 質問[未読]
【48709】Re:クリックイベントのコードの記述について bykin 07/5/2(水) 20:38 回答[未読]
【48715】Re:クリックイベントのコードの記述について シュウ 07/5/2(水) 22:40 質問[未読]
【48716】Re:クリックイベントのコードの記述について bykin 07/5/2(水) 23:09 回答[未読]
【48719】Re:クリックイベントのコードの記述について シュウ 07/5/2(水) 23:38 お礼[未読]
【48721】Re:クリックイベントのコードの記述について bykin 07/5/3(木) 0:10 発言[未読]
【48724】Re:クリックイベントのコードの記述について シュウ 07/5/3(木) 0:57 発言[未読]
【48726】Re:クリックイベントのコードの記述について bykin 07/5/3(木) 1:27 発言[未読]
【48727】Re:クリックイベントのコードの記述について シュウ 07/5/3(木) 1:48 お礼[未読]

【48700】クリックイベントのコードの記述について
質問  シュウ  - 07/5/2(水) 16:30 -

引用なし
パスワード
   こんにちは。VBA初心者です。
よろしくお願いいたします。

オプションボタンを複数配置し、クリックすると、ボタンの背景色が変化し、
"D1"のセルに果物の名前が入力されるようなコードを書きました。

Private Sub OptionButton1_Click()

If OptionButton1.Value = True Then
 Range("D1").Value = "リンゴ"
OptionButton1.BackColor = RGB(238, 73, 119)
OptionButton2.BackColor = RGB(238, 233, 128)
OptionButton3.BackColor = RGB(238, 233, 128)
OptionButton4.BackColor = RGB(238, 233, 128)

End If
 End Sub


Private Sub OptionButton2_Click()

If OptionButton2.Value = True Then
Range("D1").Value = "ミカン"
OptionButton2.BackColor = RGB(238, 73, 119)
OptionButton1.BackColor = RGB(238, 233, 128)
OptionButton3.BackColor = RGB(238, 233, 128)
OptionButton4.BackColor = RGB(238, 233, 128)

End If

End Sub

以下同様にボタン数のぶんコードを記述しています。

これはつまりクリックしたオプションボタンが目立つように背景色を変えている
わけですが、クリックしていないボタンを元の色に戻すためには
やはり、上記のコードのようにそれぞれのボタンについて
記述するしかないのでしょうか。

たとえば、ボタンの数が20個以上なった場合のことを考えると大変だと
思うのです。

クリックしていないボタンを一括で元の色に戻す記述の仕方があるとしたら
お教えいただけないでしょうか。
ネットでも検索しましたが、検索の仕方が悪いのか思うような回答に出会えません
でした。

質問の説明がヘタで判りにくいかもしれませんが、
どうぞよろしくお願いいたします。

【48709】Re:クリックイベントのコードの記述につ...
回答  bykin  - 07/5/2(水) 20:38 -

引用なし
パスワード
   こんばんわ。

クリックしたコントロールを選択色にする。
  ↓
残りのコントロールを非選択色にする。

・・・っちゅう考え方やと、簡略化しにくいですわな。
こういうときは、

全部のコントロールを非選択色にする。
  ↓
クリックしたコントロールを選択色にする。

っていう方法にしたら簡単です。それをサブルーチンにして呼び出せばこんな感じ。

Private Sub ChangeBkColor(ByRef Target As Object, ByRef CellValue As String)
  Dim Opt As Object
  For Each Opt In ActiveSheet.OLEObjects
    Opt.Object.BackColor = RGB(238, 233, 128)
  Next
  Target.Object.BackColor = RGB(238, 73, 119)
  Range("D1").Value = CellValue
End Sub

Private Sub OptionButton1_Click()
  ChangeBkColor OptionButton1, "リンゴ"
End Sub

Private Sub OptionButton2_Click()
  ChangeBkColor OptionButton2, "ミカン"
End Sub

Private Sub OptionButton3_Click()
  ChangeBkColor OptionButton3, "バナナ"
End Sub

Private Sub OptionButton4_Click()
  ChangeBkColor OptionButton4, "イチゴ"
End Sub

ただ、わてやったらマクロ使わんと、フォームツールバーのコントロールと
条件付書式で済ますんやけどなー
ActiveXコントロールをシートに貼り付けるのは重いし遅いし・・・

ま、とりあえずいっぺん試してみてな。
ほな。

【48715】Re:クリックイベントのコードの記述につ...
質問  シュウ  - 07/5/2(水) 22:40 -

引用なし
パスワード
   Bykinさん、ありがとうございます。

確かに考え方を変えると、簡素化できるものですね。

実際に試してみましたが、うまく行きました。

ただ、オプションボタンのほかに、コマンドボタンを配置しているのですが、
このコードだと他のコマンドボタンの色まで
同一になってしまいます。
何かグループ化するなどの方法はあるのでしょうか。

【48716】Re:クリックイベントのコードの記述につ...
回答  bykin  - 07/5/2(水) 23:09 -

引用なし
パスワード
   こんばんわ。

>コマンドボタンの色まで同一になってしまいます。

そーゆーことやったら・・・

Private Sub ChangeBkColor(ByRef Target As Object, ByRef CellValue As String)
  Dim Opt As Object
  For Each Opt In ActiveSheet.OLEObjects
    With Opt
      If TypeName(.Object) = "OptionButton" Then
        .Object.BackColor = RGB(238, 233, 128)
      End If
    End With
  Next
  Target.Object.BackColor = RGB(238, 73, 119)
  Range("D1").Value = CellValue
End Sub

・・・やっぱし、マクロ使わん方法のほうがええなー(独り言)
ほな。

【48719】Re:クリックイベントのコードの記述につ...
お礼  シュウ  - 07/5/2(水) 23:38 -

引用なし
パスワード
   Bykinさん、ご返答、ほんとうにありがとうございます!
思いどおりのものができました!

これを作り出す前、フォームコントロールによる方法も
試みたんですが、オプションボタン上の表示文字のフォントを
変えられないのがネックでした。

以前はエクセルの表示を100%→150%に変えて、表示文字を
大きく見せていたのですが、それだと当り前ですが、全部が
大きくなってしまうんですよね。

今回、シートを作り変えるにあたって、100%に戻し、
ActeveXコントロールを使ってボタン上のフォントも大きめにしたのですが、
今回のような疑問にぶつかってしまった次第です。

何はともあれ、bykinさんからの助言で、とりあえずは解決
しました。
本当にありがとうございました!

【48721】Re:クリックイベントのコードの記述につ...
発言  bykin  - 07/5/3(木) 0:10 -

引用なし
パスワード
   もう見てへんとは思うけど、

>これを作り出す前、フォームコントロールによる方法も
>試みたんですが、オプションボタン上の表示文字のフォントを
>変えられないのがネックでした。

これの解決法・・・

フォームツールバーのオプションボタンは下のセルが透けて見えるから
ボタンの文字列は削除して、その下のセルに好きなフォントで文字を
書けばええんですわ。
コントロールのサイズを下の文字と合わせれば、文字のクリックで黒丸に
できます。

ま、こんな方法もあるってことで。
ほな。

【48724】Re:クリックイベントのコードの記述につ...
発言  シュウ  - 07/5/3(木) 0:57 -

引用なし
パスワード
   なるほど、Bykinさん。
そのやり方だとフォントも変えられますね。
オプションボタンの下に表示文字入り、塗りつぶし色つきの
オプションボタンと同じサイズの図形を置いても
いいですね。

ActiveXコントロールのそれより動きもいいようです。
このオプションボタンをクリックしたときに色が変わるように
するのに、条件付き書式を使うとできるようになるのでしょうか。
私の知識ではどのようにすればいいのか、わかりません。

しかし、エクセルの機能をいろいろ組み合わせると色々なことが
できるんですね。
すごい、すごいって感じです。

【48726】Re:クリックイベントのコードの記述につ...
発言  bykin  - 07/5/3(木) 1:27 -

引用なし
パスワード
   こんばんわ。

オプションボタンのリンクするセルを設定すると、選択したボタンによって
当該セルの数値が変化します。(1個設定すると他も自動的に設定される)
この数値を基にオプションボタンが乗っかってるセルの条件付き書式を設定
すればええんです。

例えばリンクするセルをA1にしたとして・・・
オプション1の下のセルの条件付き書式の数式は =A1=1
オプション2なら =A1=2
などとし、書式には塗りつぶしパターンを設定します。

これで、オプションボタン関連はマクロ不要ってことになるわけです。
※リンクするセルは非表示にしてもよい。

ま、いっぺん試してみてな。

・・・ところで、Bykin やのうて bykin(bは小文字)なんですわ。
全角半角はどっちでも構わんねんけど(笑)

よろしゅーに。
ほな。

【48727】Re:クリックイベントのコードの記述につ...
お礼  シュウ  - 07/5/3(木) 1:48 -

引用なし
パスワード
   bykinさん、遅くまでありがとうございます。
お名前、よく見たら小文字でした、失礼いたしました m(__)m

なるほど、リンクするセルの数値を利用するんですね。
言われてみると「なるほど」なんですが、全く思いつきませんでした。
勉強になります。

この度は細かくご教授いただきありがとうございました。
すべて解決しました。
また、これからもよろしくお願いいたします。

5814 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free