• ベストアンサー

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

EXCEL2007で作業しています。 シートにチェックボックスを配置しています。 ・セルA1の値が「あ」だったら チェックボックス1にチェックを入れる。 ・チェックボックス2にチェックが入っていたら オートシェイプ2を表示させる 上記2つを実現したいです。 どちらかひとつでもおしえていただければと思います。 よろしくお願いいたします!

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.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 以上です。

masunona
質問者

お礼

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

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

>古いバージョンのExcelを使っている人が使うこともある 古いってどんな古いエクセルですか? どーして「古いエクセルを使っている」事が問題だと思われたのか判りませんが,エクセル97以降なら回答した方法で全く問題無く利用できます。 >フォームコントロールを使いたい フォームコントロールに,無理クリ「マクロの登録」してマクロ(動作内容は概ね類似,ただし勿論それ用に調整は必要。アクティブXコントロール用のマクロをただコピーしてもダメという意味です)を作動させれば,まぁ「やればできます」の範疇です。今回回答はアクティブXコントロールでマクロを活用した内容なので,フォームコントロールで無理矢理マクロを取り付けて行う方策については割愛します。 マクロを使わないフォームコントロールだけの機能では ○セルに「あ」を記入すると自動でチェックが入る(外れる) ように細工する事はできます。 既に回答したとおり,マクロを使わない「標準的なフォームコントロールの動作」だけの範疇では,次の問題があります。 ●うっかりチェックボックスの方をクリックすると,作り込んだ細工が破損して以後使えなくなる ●チェックボックスをクリックしてセルに「あ」が入ったり消えたりする細工はできない ●オートシェイプを表示したり消したりも出来ない。

masunona
質問者

お礼

ありがとうございます! 大変失礼しました。 >エクセル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 何度もすみません。よろしくお願いいたします!

masunona
質問者

補足

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

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.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のチェックを入れたりハズしたりする。

masunona
質問者

お礼

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

関連するQ&A

  • Excel VBA 条件を満たしたセル上にあるチェックボックス

    Excel2003を使用しています。 Sheet1のN4セルの値と同じ値が入力されているセルをSheet2のA列(A1:A50)から検索し、その行のB列に配置されているチェックボックスにチェックをつけたいのですが、そのチェックをつけたいチェックボックスを指定する方法がわかりません。 検索してヒットしたセルの1つ右隣のセルにチェックボックスが配置されているということで myNum = Sheets("Sheet1").Range("N4").Value Rng = Sheets("Sheet2").Range("A1:A50").Find(myNum) としたとして、Rng.Offset(, 1).Address と、チェックをつけたいチェックボックスの左上のセルアドレスを比較すればいいのかな?と思っているのですが、そのチェックボックスをどのようにしたら指定できるでしょうか? また、別の方法もありましたら、アドバイスをいただけると嬉しいです。 よろしくお願いします。

  • VBA シート上のチェックボックスの値の取得

    (作業環境 windowsXP Excel2007 作業対象のブックは.xls) シート上に1ブックにつき3000個ほどのチェックボックスがあります。 このブックが現在約1000個、すでに配布・回収されております。 これからチェックボックスの選択状況やセルに入力された値をマクロで収集するのです。 大半のチェックボックスにはすでに「リンクするセル」の設定がされており、そのセルの値を参照すればチェック状態の取得は容易なのですが、 最初にこのブックを作った方が一部のチェックボックス群(3000個中500個程度)にリンクの設定をするのを忘れていたのです。 このリンク設定のされていないチェックボックスの値の取得についてご質問です リンクセルの設定をするのであれば sub a() ActiveSheet.Shapes("Check Box 1").Select Selection.LinkedCell = "$A$1" ・ end sub でいいのでしょうが、これだとselectのはずみで チェックボックスがTrueになってしまします。 リンクせずに直接チェックボックスの値をブール型で取得しようと思い dim a as boolern a = Activesheet.checkboxes(1).value としましたが、ためしに別ブックのシート上に1つだけチェックボックスを作って実行すると、チェック状態にかかわらずTrueが返ります。 checkboxesの使い方がダメなんでしょうか? 求める回答としては (1)上記のやり方でもできるが、間違っている部分がある (2)上記以外のやり方でもっと簡単な(早い)やりかたがある のどちらかのようなアドバイスをいただけると幸甚です。 よろしくおねがいします

  • エクセルVBAでのチェックボックス操作

    エクセルを利用した、VBAで困っています。 所定のsheetに埋め込まれたチェックボックスに対して、 別sheet内のセルの値を参照し、結果をオン、オフという 操作を行いたいのですが、チェックボックスに対するVBAでの指定方法 が分かりません。 イメージとしては (1)Sheet1内にチェックボックスがある。  該当チェックボックスは7個のチェックボックスで構成されており  それぞれにchb1~chb7といったオブジェクト名がある。 (2)sheet2のA1セルに特定の値が入っていればチェックボックス(chb1)  がオン値がなければオフのまま (3)sheet2のB1セルに特定の値が入っていればチェックボックス(chb2)  がオン値がなければオフのまま という感じです。 先方より指定された様式なのでsheet1の内容や書式を変更することが出来ないので、なんとか埋め込まれたオブジェクトを操作したいのですが・・・ 良い方法があれば教えてください。

  • Excelのチェックボックスについて教えてください

    Excel2003使用者です。 今顧客リストを作成しているのですが、 A列にフォームでチェックボックスを入れていて、簡単にはこんな感じになっています。    A       B    C   D  ・・・ 1 チェックボックス 顧客名 部署 住所 ・・・ 営業が訪問した先のチェックボックスにチェックを入れるようになっています。 これをオートフィルタ機能で、チェックをつけたところとつけてないところでフィルタをかけたいのですが、 全て「空白セル」としてフィルタがかかりません。 またオートフィルタをかけるとチェックボックスが寄ってしまいます。 フォームではダメなのかと思って、コントロールツールボックスでチェックボックスを作成したのですが、 それもダメでした。 どなたか解決方法を教えていただけないでしょうか。 オートフィルタでチェックボックスにチェックしたものだけを表示させることはできないのでしょうか。 もしマクロを組まないといけないのでしたら、マクロ初心者なため、 出来ればコードも教えていただきたく、 また、オートフィルタをかけた際にチェックボックスが移動してしまうことも解決したいので、 その点についても教えていただけると幸いです。 お手数ですが、宜しくお願い致します。

  • エクセルユーザーフォームのチェックボックスのCaptionにセルの値を入れたい。

    表題の通りで、エクセルユーザーフォームにチェックボックスを作成し、そのCaptionにセルの値を入れたい場合、どのようにすればいいのでしょうか。 つまり、シートのセルの値が変われば、ユーザーフォームのチェックボックスの文字が変わっているようにしたいのです。 エクセル2003です。 よろしくお願い致します。

  • テキストボックスにセルの値を複写する方法

    Excel VB (Excel 2007) の質問 Sheet1のセルD1、D2、D3に文字が入力されています。 そして同じシート上の任意の場所にテキストボックスが配置されています。 テキストボックスには"テキスト ボックス 1"、"テキスト ボックス 2"、"テキスト ボックス 3"と名前がつけられています。 セルD1の値を"テキスト ボックス 1"に複写、セルD2の値を"テキスト ボックス 2"に、セルD3の値を"テキスト ボックス 3"に 複写したいのですがどのようにすればいいのでしょうか。 インターネットのQ&Aで調べましたが同じような質問でも難しすぎて理解できません。 例えば以下のように簡単にできないでしょうか。 D1の値を"テキスト ボックス 1"に複写する場合 Range("D1").Select Selection.Copy ActiveSheet.Text."テキスト ボックス 1".Activate  'テキストボックスを選択(アクティブ)する記述が解りません。 ActiveSheet.Paste                 ’選択したテキストボックスに貼り付ける方法もわかりません。 勿論上記の記述ではうまくいきません。 VB初心者でお手数をおかけしますがよろしくお願いします。

  • excelでリストボックスで選択した値に定められた値を返す

    excel2000で計算シートを作っています リストボックスで会社名をえらぶと 例:A社 B社 C社 ・セルC2に、A社なら1000 B社なら1200 C社なら800 とあらかじめ定められた値を返す 関数で、値を返すことはできるのですが リストボックスを範囲として指定できないのでしょうか? また、上記をVBAを使わずに、設定することは可能でしょうか? 宜しくお願いいたします

  • エクセル:チェックボックスで他シートの図形を操作。

    質問させていただきます。 現在、エクセルにて sheet1に帳簿内容入力画面 sheet2に入力画面の項目を反映した印刷用帳簿 というものを作成しています。 その中で、sheet1にチェックボックスを設置し、チェックONでsheet2任意の場所に オートシェイプの楕円を表示(チェックOFFで楕円は消える)させたいのですが、 うまくいきません。 試しにsheet1上にチェックボックス・楕円を設置し、 ------------------------------------------- Sub test01() With ActiveSheet If .CheckBoxes(Application.Caller).Value = xlOn Then .Shapes("楕円1").Visible = True Else .Shapes("楕円1").Visible = False End If End With End Sub ------------------------------------------- とイベント設定をしたところ、sheet1上ではチェックON/OFFで楕円の 表示/非表示ができました。 しかし、実際sheet1にチェックボックス、2に楕円と設置すると「オブジェクトが存在しません」と エラーになってしまいます。 IF関数のような(シート名!セル名)的に楕円の場所を指定しなければいけないのかな?と 思い、色々試してみたのですが実現できませんでした。 勉強不足で恐縮なのですが、詳しい方アドバイスをいただきたいです。

  • エクセルのチェックボックスのことで

    初歩的なことですが教えてください。エクセル2003でチェックボックスを作成しました。 配置してあるセルの書式設定の保護からロックをはずしシート保護をかけるのですが、操作すると保護されています。のエラーとなってしまいます。  グループ化してオブジェクトにしてロックをはずしてもエラーとなってしまいます。 チェックボックスの場合、シート保護との関係で何かありますか? どなたかよろしくお願いいたします。 ちなみにチェックボックスの範囲が隣のセルにまたがっていることも想定しましたが違いました。  よろしくお願いいたします。

  • エクセルVBAでコンボボックス

    エクセルVBAのコンボボックスの使い方について質問します。 実現したいプログラムは 「チェックボックスから選んだ数字で計算するプログラム」 です。 具体的には… まず、コンボボックスをシート上に配置します。そのコンボボックスには 数字の1から10を選べるようにしておきます。 次に、コマンドボタンを配置します。これは単にプログラムをスタート させる目的です。 ユーザーは、まずコンボボックスから好きな数字を選択します。 そしてスタートボタン(コマンドボタン)を押します。 すると、選んだ数字の2倍がセルに表示されます。 さらに発展系としては… チェックボックスを4つ配置します。各チェックボックス には、+、-、×、÷を割り振っておきます。 また、コンボボックスを2つ用意し、それぞれ1~10の数字をリストにします。 ユーザーは、チェックボックスから好きな記号を選び、さらにコンボボックスから 好きな数字を選びます。そしてスタートボタンを押すと、選んだ数字を選んだ記号 で計算した値がセルに表示されます。 というようなプログラムを考えているのですが、うまくできません。 ポイントは、 ・チェックボックスにリストを入力する方法 ・チェックボックスの選択状態や、リストボックスから選ばれた数字を、  変数として取得する方法 インターネットで調べているのですが、リストボックスに値を入れるのにもマクロを走らせ なければならない方法とか、ユーザーフォームでの説明ばかりでなかなか実現に至りません。 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_userform05.html プログラムのイメージ図としては添付の図の通りです。 どのようにプログラムを書けばいいのでしょうか。

専門家に質問してみよう