こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excelでセルの値によりチェックボックスを操作

EXCEL2007で作業しています。
シートにチェックボックスを配置しています。

・セルA1の値が「あ」だったら
チェックボックス1にチェックを入れる。

・チェックボックス2にチェックが入っていたら
オートシェイプ2を表示させる

上記2つを実現したいです。
どちらかひとつでもおしえていただければと思います。

よろしくお願いいたします!

投稿日時 - 2013-11-25 14:42:13

QNo.8361339

すぐに回答ほしいです

質問者が選んだベストアンサー

>「あ」と入力するシートとチェックボックスを配置しているシートが別シート

手順:
これまでのマクロを「漏れなく全部消去する」

改めて
チェックボックスのシートを開く
開発タブでデザインモードを選択,チェックボックスを右クリック,コードの表示を開始
下記のマクロを記載する

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


以上です。

投稿日時 - 2013-11-26 11:57:55

お礼

何度も有難うございます!
大変助かりました!
早速試してみます!

投稿日時 - 2013-11-27 16:15:54

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

>古いバージョンのExcelを使っている人が使うこともある

古いってどんな古いエクセルですか?
どーして「古いエクセルを使っている」事が問題だと思われたのか判りませんが,エクセル97以降なら回答した方法で全く問題無く利用できます。




>フォームコントロールを使いたい

フォームコントロールに,無理クリ「マクロの登録」してマクロ(動作内容は概ね類似,ただし勿論それ用に調整は必要。アクティブXコントロール用のマクロをただコピーしてもダメという意味です)を作動させれば,まぁ「やればできます」の範疇です。今回回答はアクティブXコントロールでマクロを活用した内容なので,フォームコントロールで無理矢理マクロを取り付けて行う方策については割愛します。


マクロを使わないフォームコントロールだけの機能では
○セルに「あ」を記入すると自動でチェックが入る(外れる)
ように細工する事はできます。

既に回答したとおり,マクロを使わない「標準的なフォームコントロールの動作」だけの範疇では,次の問題があります。
●うっかりチェックボックスの方をクリックすると,作り込んだ細工が破損して以後使えなくなる
●チェックボックスをクリックしてセルに「あ」が入ったり消えたりする細工はできない
●オートシェイプを表示したり消したりも出来ない。

投稿日時 - 2013-11-25 17:41:39

補足

失礼しました。
2.は自分で修正点に気付き正常に動作させることができました!
正しいコードは
Worksheets("シート1").Shapes("sp1").Visible = Me.CheckBox1.Value
でした。

大変失礼しました。

投稿日時 - 2013-11-26 10:50:54

お礼

ありがとうございます!
大変失礼しました。
>エクセル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

何度もすみません。よろしくお願いいたします!

投稿日時 - 2013-11-26 10:42:48

ANo.1

>シートにチェックボックスを配置しています。

エクセル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のチェックを入れたりハズしたりする。

投稿日時 - 2013-11-25 15:34:17

お礼

ありがとうございます!
いままでフォームコントロールのチェックボックスを使っていて
ActiveXコントロールの存在にいまはじめて気づきました!

説明不足で大変申し訳ないのですが
私が作ったものを、古いバージョンのExcelを使っている人が使うこともあるのを
忘れていました。
できればフォームコントロールのチェックボックスを使いたいです。
フォームコントロールのチェックボックスでは
やはりできないことがあるのでしょうか?

投稿日時 - 2013-11-25 16:11:08

あなたにオススメの質問