読者です 読者をやめる 読者になる 読者になる
スポンサーリンク

Excelシート上にチェックボックスを設置して,セルの編集可・不可を切り替えよう

VBA excel

Excel/Wordオフィス製品のTipsまとめへ


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だとロックされない


Excel/Wordオフィス製品のTipsまとめへ