質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

リストボックス

ユーザーがリストから1つ以上のアイテムを選択できるようにするGUI要素です。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

1回答

507閲覧

チェックボックスの動作に対するコードについて

Ryuhe

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

リストボックス

ユーザーがリストから1つ以上のアイテムを選択できるようにするGUI要素です。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

0グッド

0クリップ

投稿2021/03/16 04:45

ExcelのVBAについてです.
チェックボックスが二つあった時に,AをクリックしたらAにチェックが入り,Bを押したらAのチェックが消えBがチェックされるという風にしたいです.
下記のようなコードでAまたはBを押した時の動作を命令出来ているように見えるのですが,Aを押してからBを押してもBが反応してくれません.どうしたら,説明のような動作が行えますでしょうか.

Dim R As Worksheet Set R = ActiveSheet 'ここを編集 Dim R2 As Range Set R2 = R.Range("D3") '反映元セル名 Dim R3 As Range Set R3 = R.Range("D4") '反映元セル名 Dim R1 As Range Set R1 = R.Range("AI3") '反映先セル名 'チェックボックス1 If ActiveSheet.CheckBoxes("Check Box 1").Value = xlOn Then ActiveSheet.CheckBoxes("Check Box 2").Value = xlOff ActiveSheet.CheckBoxes("Check Box 3").Value = xlOff ActiveSheet.CheckBoxes("Check Box 4").Value = xlOff ActiveSheet.CheckBoxes("Check Box 5").Value = xlOff ActiveSheet.CheckBoxes("Check Box 6").Value = xlOff R1.Value = R2.Value ElseIf ActiveSheet.CheckBoxes("Check Box 2").Value = xlOn Then ActiveSheet.CheckBoxes("Check Box 1").Value = xlOff ActiveSheet.CheckBoxes("Check Box 3").Value = xlOff ActiveSheet.CheckBoxes("Check Box 4").Value = xlOff ActiveSheet.CheckBoxes("Check Box 5").Value = xlOff ActiveSheet.CheckBoxes("Check Box 6").Value = xlOff R1.Value = R3.Value ElseIf ActiveSheet.CheckBoxes("Check Box 1").Value = xlOff Then R1.Value = "" End If End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

radames1000

2021/03/16 04:49

複数項目から一つ選ぶのであれば、オプションボタンではだめでしょうか。
Ryuhe

2021/03/16 04:52

ありがとうざいます. ボタンを押したうえで,そのボタンに対応する文字をセルに反映させたいです.
radames1000

2021/03/16 05:17

「VBA オプションボタン」で検索すればセルに反映するサンプルも色々ありますので一度ご自身で検索してみてください。
hatena19

2021/03/16 06:48

一つしか選択できない場合はオプションボタン、 複数選択可能な場合はチェックボックス、 という仕様が現在の主要OS、主要ブラウザのUIで採用されてますので、 それに合わせておかないとユーザーに戸惑いを与えます。 オプションボタン にしておけばコード無しで一つしか選択できないです。
Ryuhe

2021/03/16 06:56

@hatena19様ありがとうざいます. 項目1でAorB 項目2でAorB と項目ごとに一つしか選択できないというようなものを作成したいのですが,オプションボタンではそのようなことは可能でしょうか.
hatena19

2021/03/16 06:59

オプションボタン に GroupName プロパティがありますでそれに同じ名前を付ければ、同じGroupName内で一つしか選択できません。
Ryuhe

2021/03/17 05:44

ありがとうございます. ユーザ―フォームを使用することで,グループ化を行い一項目一つだけしか選択できないということが出来るんですね. 勉強になりました.
guest

回答1

0

オプションボタンを使用するのが最適ですが、質問のコードを使用する前提でお答えします。

Excel

1'分岐1 2If ActiveSheet.CheckBoxes("Check Box 1").Value = xlOn Then 3 '処理1 4 ActiveSheet.CheckBoxes("Check Box 2").Value = xlOff 5 ActiveSheet.CheckBoxes("Check Box 3").Value = xlOff 6 ActiveSheet.CheckBoxes("Check Box 4").Value = xlOff 7 ActiveSheet.CheckBoxes("Check Box 5").Value = xlOff 8 ActiveSheet.CheckBoxes("Check Box 6").Value = xlOff 9 R1.Value = R2.Value 10 11'分岐2 12ElseIf ActiveSheet.CheckBoxes("Check Box 2").Value = xlOn Then 13 '処理2 14 ActiveSheet.CheckBoxes("Check Box 1").Value = xlOff 15 ActiveSheet.CheckBoxes("Check Box 3").Value = xlOff 16 ActiveSheet.CheckBoxes("Check Box 4").Value = xlOff 17 ActiveSheet.CheckBoxes("Check Box 5").Value = xlOff 18 ActiveSheet.CheckBoxes("Check Box 6").Value = xlOff 19 R1.Value = R3.Value 20 21'分岐3 22ElseIf ActiveSheet.CheckBoxes("Check Box 1").Value = xlOff Then 23 '処理3 24 R1.Value = "" 25End If

Aをクリックすると分岐1の条件を満たすため、処理1のみを実行します。
その結果Aにチェックが入ります。

Aにチェックが入った状態でBをクリックすると、最初に分岐1の条件を満たすので、処理1のみを実行します。
処理2は実行されないため、Bにチェックは入らず、Aのチェックも消えません。

以下のようなコードなら一応対応できます。

Excel

1Sub チェックA_Click() 2 Dim R2 As Range 3 Set R2 = Range("D3") '反映元セル名 4 Dim R1 As Range 5 Set R1 = Range("AI3") '反映先セル名 6 7 If CheckBoxes("Check Box 1").Value = xlOn Then 8 CheckBoxes("Check Box 2").Value = xlOff 9 CheckBoxes("Check Box 3").Value = xlOff 10 CheckBoxes("Check Box 4").Value = xlOff 11 CheckBoxes("Check Box 5").Value = xlOff 12 CheckBoxes("Check Box 6").Value = xlOff 13 R1.Value = R2.Value 14 end if 15end Sub 16 17Sub チェックB_Click() 18 Dim R3 As Range 19 Set R3 = Range("D4") '反映元セル名 20 Dim R1 As Range 21 Set R1 = Range("AI3") '反映先セル名 22 23 If CheckBoxes("Check Box 2").Value = xlOn Then 24 CheckBoxes("Check Box 1").Value = xlOff 25 CheckBoxes("Check Box 3").Value = xlOff 26 CheckBoxes("Check Box 4").Value = xlOff 27 CheckBoxes("Check Box 5").Value = xlOff 28 CheckBoxes("Check Box 6").Value = xlOff 29 R1.Value = R3.Value 30 end if 31end Sub

チェックボックスの名前は「チェックA」「チェックB」としています。適宜読み替えてください。
ActiveSheetは記述を省略するのが普通なので、省略してあります。

「チェックA」がクリックされたとき、「チェックA」がONなら他のチェックボックスをOFFにします。
「チェックB」がクリックされたとき、「チェックB」がONなら他のチェックボックスをOFFにします。

これなら対応できると思います。

・・・・・・オプションボタンを使うのが一番簡単ですが。

投稿2021/07/08 10:45

toitoburuku9

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問