- ベストアンサー
Excelでセルの値によりチェックボックスを操作
EXCEL2007で作業しています。 シートにチェックボックスを配置しています。 ・セルA1の値が「あ」だったら チェックボックス1にチェックを入れる。 ・チェックボックス2にチェックが入っていたら オートシェイプ2を表示させる 上記2つを実現したいです。 どちらかひとつでもおしえていただければと思います。 よろしくお願いいたします!
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>「あ」と入力するシートとチェックボックスを配置しているシートが別シート 手順: これまでのマクロを「漏れなく全部消去する」 改めて チェックボックスのシートを開く 開発タブでデザインモードを選択,チェックボックスを右クリック,コードの表示を開始 下記のマクロを記載する private sub CheckBox1_Click() application.enableevents = false worksheets("「あ」のシート名").range("F20") = iif(me.checkbox1,"あ","") application.enableevents = true end sub ファイルメニューからエクセルに戻り,忘れずに開発タブで「デザインモード」を終了する 「あ」のシートを開き,シート名タブを右クリック,コードの表示を開始 下記のマクロをコピー貼り付ける private sub Worksheet_Change(byval Target as excel.range) if target.address = "$F$20" then application.enableevents = false worksheets("チェックボックスのシート名").checkbox1 = target = "あ" application.enableevents = true end if end sub 以上です。
その他の回答 (2)
- keithin
- ベストアンサー率66% (5278/7941)
>古いバージョンのExcelを使っている人が使うこともある 古いってどんな古いエクセルですか? どーして「古いエクセルを使っている」事が問題だと思われたのか判りませんが,エクセル97以降なら回答した方法で全く問題無く利用できます。 >フォームコントロールを使いたい フォームコントロールに,無理クリ「マクロの登録」してマクロ(動作内容は概ね類似,ただし勿論それ用に調整は必要。アクティブXコントロール用のマクロをただコピーしてもダメという意味です)を作動させれば,まぁ「やればできます」の範疇です。今回回答はアクティブXコントロールでマクロを活用した内容なので,フォームコントロールで無理矢理マクロを取り付けて行う方策については割愛します。 マクロを使わないフォームコントロールだけの機能では ○セルに「あ」を記入すると自動でチェックが入る(外れる) ように細工する事はできます。 既に回答したとおり,マクロを使わない「標準的なフォームコントロールの動作」だけの範疇では,次の問題があります。 ●うっかりチェックボックスの方をクリックすると,作り込んだ細工が破損して以後使えなくなる ●チェックボックスをクリックしてセルに「あ」が入ったり消えたりする細工はできない ●オートシェイプを表示したり消したりも出来ない。
お礼
ありがとうございます! 大変失礼しました。 >エクセル97以降なら 問題ないです。 早速教えていただいた方法をやってみました。 ただ何点か分からない点がありましのでまたよろしければ教えてください。 1.「あ」と入力するシートとチェックボックスを配置しているシートが別シートなので コードを書き換えようと思ったのですがうまくできません。 以下のようにやってみたのですが反応無しです。 修正点を教えていただきたいです。 Private Sub CheckBox1_Click() Worksheets("シート1").Range("F20") = IIf(Me.CheckBox1, "あ", "") End Sub Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Target.Address = "$F$20" Then Me.CheckBox1 = Target = "あ" End If End Sub 2.こちらも、チェックボックスとオートシェイプを別のシートに置いています。 以下のようにやってみたのですが 「オブジェクトが必要です」とエラーメッセージが出てしまいます。 修正点を教えていただきたいです。 Private Sub CheckBox1_Click() Me.CheckBox1.Value = シート2.Shapes("sp1").Visible End Sub 何度もすみません。よろしくお願いいたします!
補足
失礼しました。 2.は自分で修正点に気付き正常に動作させることができました! 正しいコードは Worksheets("シート1").Shapes("sp1").Visible = Me.CheckBox1.Value でした。 大変失礼しました。
- keithin
- ベストアンサー率66% (5278/7941)
>シートにチェックボックスを配置しています。 エクセル2007では,開発タブの挿入から「フォームコントロール」と「ActiveXコントロール」の2種類のチェックボックスが選べます。 どちらを使っているのか,使いたい理由があるのかに応じて,具体的な使い方や出来る事できない事が変わってきます。 幾つかの理由から今回のご相談に見合う手段としては,「ActiveXコントロール」のチェックボックスを利用します。フォームコントロールだけでは,基本的には下記でヤリタイこと全てを実現することができません。 手順: 新しいシートを用意する アクティブXコントロールのチェックボックスを1個,シート上に配置する 右クリックして「コードの表示」を選ぶ 現れたシートに「checkbox1_click …end sub」が記入されているので下記に加筆し,併せて下記をコピー貼り付ける private sub CheckBox1_Click() range("A1") = iif(me.checkbox1, "あ", "") end sub private sub Worksheet_Change(byval Target as excel.range) if target.address = "$A$1" then me.checkbox1 = target = "あ" end if end sub ファイルメニューから終了してエクセルに戻る 開発タブで「デザインモード」をクリックしてデザインモードを解除する 使い方: A1セルに「あ」とか「い」とか記入する チェックボックスのチェックを入れたりハズしたりする >オートシェイプ シート上に図形を描画し,名前ボックスで myShape と名前を付けておく(必ず行う) ActiveXコントロールのチェックボックス2を配置,右クリックしてコードの表示で下記のようにする private sub CheckBox2_Click() me.shapes("myShape").visible = me.checkbox2.value end sub ファイルメニューから終了してエクセルに戻り,デザインモードを解除する 使い方: チェックボックス2のチェックを入れたりハズしたりする。
お礼
ありがとうございます! いままでフォームコントロールのチェックボックスを使っていて ActiveXコントロールの存在にいまはじめて気づきました! 説明不足で大変申し訳ないのですが 私が作ったものを、古いバージョンのExcelを使っている人が使うこともあるのを 忘れていました。 できればフォームコントロールのチェックボックスを使いたいです。 フォームコントロールのチェックボックスでは やはりできないことがあるのでしょうか?
お礼
何度も有難うございます! 大変助かりました! 早速試してみます!