Excelシート上にチェックボックスを設置して,セルの編集可・不可を切り替えよう
Excel VBAで,シート上にチェックボックスを設け,
チェックされている時だけ,特定のセルを入力可能にする方法。
流れとしては
(1)ActiveXコントロールを設置
(2)コントロールにマクロを設定
(3)シート保護とセルのロックを設定
という感じ。
(1)ActiveXコントロールを設置
まず,チェックボックスを設置しよう。
Excel2007以降の場合,リボン上に「開発」タブを表示させる。
開発タブ>挿入>ActiveXコントロール>チェックボックス を選択し,シート上でクリックすれば設置完了。
チェックボックスのキャプションを変えたい場合,
開発タブの「デザインモード」がONであることを確認してから,
開発タブ>プロパティ でプロパティウィンドウを表示し,
チェックボックスのCaptionプロパティを編集する。
「編集可能」のような文言に書き変えておくとよい。
(2)コントロールにマクロを設定
次に,チェックボックスを右クリック>マクロの登録 で,
下記のようなVBAコードを登録。
Private Sub CheckBox1_Click() 'MsgBox CheckBox1.Value ' いったんシートの保護を解除 ActiveSheet.Unprotect ' セルのロックを切り替え If CheckBox1.Value = True Then Range("E5").Locked = False Else Range("E5").Locked = True End If ' シートを保護 ActiveSheet.Protect ' ※Rangeプロパティを操作するためには,いったんシート保護の解除が必要。 ' さもないと「RangeクラスのLockedプロパティを設定できません。」 というエラーになる End Sub
(3)シート保護とセルのロックを設定
そして,最後に,
- CTRL+Aで全セルを選択してから,ホーム>セル>書式>セルのロック を実行し,
- ホーム>セル>書式>シートの保護 を実行。
これで,シート上の全セルが編集不能になる(※セルのロック+シート保護の組み合わせで編集不能になる)。
開発タブのデザインモードをOFFにし,チェックボックスのチェック状態が切り替えられるようになる。
チェックされていれば,セルは編集可能。
チェックが外れていれば,セルは書き換え不可能となる。
なお,シートの保護が有効な状態だと,コントロールの編集ができないから,シート保護を適宜オフにすること。
参考資料:
チェックボックスの作り方【エクセル・Excel】
http://www.becoolusers.com/excel/chec...
- [開発]タブ、[コントロール]グループの[挿入]ボタンをクリック
エクセル2007VBAでコマンドボタンのプロパティ表示 | オフィス系ソフトのQ&A【OKWave】
http://okwave.jp/qa/q3441262.html
- EnabledやVisibleを設定できました これはActiveXコントロールのボタンに対して有効です。フォームコントロールのボタンではこの設定はできません。
フォーム コントロールや ActiveX コントロールを選択できない - Excel - Office.com
http://office.microsoft.com/ja-jp/exc...
- Excel がデザイン モードになっていないと、ActiveX コントロールを選択しようとしても、誤ってマクロの実行やチェック ボックスの選択などのアクションが開始される
Excel(エクセル)VBA入門:チェックボックスの使い方
http://www.eurus.dti.ne.jp/~yoneyama/...
- チェックボックスの状態を取得
Windows TIPS:Excelシートの特定のセルを編集禁止にする - @IT
http://www.atmarkit.co.jp/ait/article...
- まずは、保護しなくてもよいセルを選択する。リボンの[ホーム]タブにある「セル」枠−[書式]をクリックする。[セルのロック]をクリックしてオフにする。こうしておくと、後からシート全体の保護を実行しても、指定したセルは自由に編集できる状態が保たれる。
エクセルVBAマクロ - セルの操作 - セルのロック
http://www.excel-vba.net/excel-range-...
- .Locked = True
ロックの解除 - その他の操作 - Excel VBA入門
http://www.officepro.jp/excelvba/cell...
- セルのロックを解除するには、対象となるセル範囲を表すRangeオブジェクトの「Locked」プロパティに「False」を設定
エクセルVBAで Range("C14:I20").Locked=Fale と設定して、その後起動すると「lran...
http://detail.chiebukuro.yahoo.co.jp/...
- シートの保護が設定されていれば、エラーとなります。
シート全体を保護し、任意のセルだけ保護解除する for VBA - 燈明日記
http://d.hatena.ne.jp/chaichanPaPa/20...
- もう少し詳しく言うと、すべてのセルにはロックするかしないかのプロパティ『Locked』があり、Protectメソッドが実行されると、『Locked』の値がTrueのセルはロックされ、Falseだとロックされない