プロが教えるわが家の防犯対策術!

YES/NOを入力させる為の下記のVBAにおいて、チェックボックス1をチェックすると、アの部分でチェックボックス2の解除を行う関係で?、シート上でチェックボックス2を操作していないのにもかかわらず、勝手にCheckBox2_Click()に入り、命令文イを実行してしまいます。
ただ単にSub CheckBox1_Click()のルーチンの最後までの処理で終わりたいのですが、どうしたらよいのでしょうか。
Private Sub CheckBox1_Click()
If CheckBox1 = True Then
Sheets("sheet1").Range("A1") = 1
Sheets("sheet1").Range("A2") = 0
CheckBox2 = False・・・ア
Else
Sheets("sheet1").Range("A1") = ""
End If
End Sub

Private Sub CheckBox2_Click()
If CheckBox2 = True Then
Sheets("sheet1").Range("A1") = 0
Sheets("sheet1").Range("A2") = 1
CheckBox1 = False
Else
Sheets("sheet1").Range("A2") = ""・・・イ
End If
End Sub

A 回答 (4件)

別途フラグを使用すれば出来ますが、オプションボタンではだめなのでしょうか?


オプションボタンの右クリックメニュー「プロパティ」にある「GroupName」に同じ値(例:Q1)を設定すれば次の様なコードで良いのですが....

Private Sub OptionButton1_Click()
 Call Cell_Set
End Sub

Private Sub OptionButton2_Click()
 Call Cell_Set
End Sub

Private Sub Cell_Set()
 Range("A1").Value = IIf(Me.OptionButton1.Value, 1, 0)
 Range("A2").Value = IIf(Me.OptionButton2.Value, 1, 0)
End Sub

この回答への補足

ありがとうございます。いただいたアドバイスがよく分からないので!かみ砕いてお願いします。
オプションボタン1をクリックするとCell_Setと云うルーチンが実行されるのですね?このルーチンのRange・・・は、何を意味してますか?
私は、YESの場合、A1に1、Noの場合A2に0、未選択の場合、A1,A2にNULLデータを入力したかったのですが。

補足日時:2005/09/29 23:37
    • good
    • 0

こんばんは。



本来は、CheckBox ではなくて、OptionButton の使い方ですね。なぜ、CheckBox でなくてはならないのか良く分りませんが、コードを読んでいると、CheckBoxの片方で、Offにした時に機能を持たせているようですね。贅沢な使い方のようですね。確かに、こればかりは、OptionButtonでは、真似できないような気がしますが、計画倒れになっちゃいましたね(^^\ でも、もっと贅沢に使うなら、MouseDownなんていうのを使えば、もっといろいろ使えます。

>単にSub CheckBox1_Click()のルーチンの最後までの処理で終わりたいのですが、

それなら、単に、フラッグをつければよいだけのことです。でも、なるべく、プロパティのValueなどを入れてくださいね。後々のエラーの原因になりますから。

Dim flg As Boolean
Private Sub CheckBox1_Click()
  If flg = True Then Exit Sub
  If CheckBox1.Value = True Then
   Sheets("Sheet1").Range("A1").Value = 1
   Sheets("Sheet1").Range("A2").Value = 0
   flg = True
   CheckBox2.Value = False
   Else
   Sheets("Sheet1").Range("A1") = ""
  End If
   flg = False
End Sub
Private Sub CheckBox2_Click()
  If flg = True Then Exit Sub
  If CheckBox2.Value = True Then
   Sheets("Sheet1").Range("A1").Value = 0
   Sheets("Sheet1").Range("A2").Value = 1
   flg = True
   CheckBox1.Value = False
   Else
   Sheets("Sheet1").Range("A2").Value = ""
  End If
  flg = False
End Sub

まあ、とりあえず、試してみてください。
    • good
    • 0
この回答へのお礼

ありがとうございました。
Xenさんの2つ目の回答で、スリムに解決しました。

お礼日時:2005/09/30 11:00

本件はチェックボックスの例ですが、オプションボタンを2つ貼り付け、各々のプロパティでLinkedCellをA1セルとA2セルに設定すると、


またGroupNameが全てSheet1になるのを、3・4つ以上のボタンがあって、複数グループにする場合は、グループ別に同一文字列記号に設定しなおすと、質問のようなプログラムは不要になります。
ただ値がFALSE、TRUEになりますが、小生はこれを0、1にする書式設定がわかりません。
CheckBoxの場合
http://www21.tok2.com/home/vbalab/bbs/c-board.cg …
など載ってました。

この回答への補足

お世話になります。実はこの種のボタン使用するの初めてで、アンケート用紙に既に150個ものボタンを作ってしまい、いざ試してみると想定外の動きをしてしまったのです。みなさんのお答えではオプションボタンがいいらしいですね!書かれたコマンドもよく分からない状況なので、勉強してやり直そうと思います。だからポイント発行まで時間かかるかも知れませんがご容赦くださいませ。

補足日時:2005/09/29 23:15
    • good
    • 0

#1です。


未選択の状態がありえるのですね。
その場合チェックボックスの方で良いと思います。
以下のコードでいかがでしょうか?

Private Sub CheckBox1_Click()
 If Me.CheckBox1.Value = True Then
  Me.CheckBox2.Value = False
 End If
 Range("A1").Value = IIf(Me.CheckBox1.Value, 1, "")
End Sub

Private Sub CheckBox2_Click()
 If Me.CheckBox2.Value = True Then
  Me.CheckBox1.Value = False
 End If
 Range("A2").Value = IIf(Me.CheckBox2.Value, 0, "")
End Sub

IIf(Me.CheckBox1.Value, 1, "")はチェックボックスの状態がTrueであれば1をFalseであれば空文字を返す構文です。
If~Else~End Ifを一行で記述しているだけです。

参考になりますでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございます。
オプションボタンも少し勉強してみたのですが、どうも私が意図してるようには動いてくれませんでした。
Xenさんが教示してくれたこの方法だと、ほぼ私のやりたいことが実現できそうです。

お礼日時:2005/09/30 10:57

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