ユーザーフォームに配置したチェックボックスにチェックを入れると、ワークシートの特定のセルにセル文字を転記する為に使いますが、その逆ってできないのかな?って思いませんか?
例えば住所録でDM送付「希望あり」と「希望無し」をチェックボックスで選択しておいて、個人データが呼び出された時に、ユーザーフォームのチェックボックスも自動的にチェックの有無が表示されるようにしたい。
よくよく考えると、チェックボックスのプロパティでの設定は、ユーザーフォームが表示された時にチェックボックスの状態をしていする事しかできないので、普通じゃないんだって思います。
基本的なチェックボックスの使い方については重複してしまうので、ここでは省略しますので下記を参考にしてください。
それならば、自分で考えてやってしまうしかないんですよね。
セルの値からチェックボックスの状態を取得しよう
まず、チェックボックスの状態で、チェックがある状態(True)とチェックが無い状態(False)がありますよね。
そして、DM希望ありをTrueにして、DM希望無しをFalseにします。
そうすることにより、セルA1の値が【DM】となっていたらチェックを入れた状態にして、空欄だったら、チェックをはずすことができれば、セルの状態によってチェックボックスを自在にコントロールできるようになります。

これらを踏まえて、VBAコードを書いてみるとこうなりました。
Private Sub CommandButton1_Click()
If Range(“A1”).Value = “DM” Then
CheckBox1.Value = True
Else
If Range(“A1”).Value = “” Then
CheckBox1.Value = False
End If
End If
End Sub
- コマンドボタン1がクリックされたら
- もしセルA1の値がDMだったら
- チェックボタン1の状態をチェック有にする
- そうではなく
- もしセルA1の値が空欄だったら
- チェックボックス1の状態をチェック無しにする
- Ifステートメント終了
- Ifステートメント終了
- マクロ終了
これでは実際には使い物になりませんが、セルA1の値によってチェックボックスの状態を変えることができることが確認できました。

当然ながら、セルA1が空欄だったらコマンドボタンを押してもチェックボックスには何も入りません。

さあ、ここからが応用編というよりも、実際に使えるようにVBAコードを付け加えていきましょう。
選択されているセルの右〇個目にチェックボックスの値を転記する
エクセル住所録などで顧客検索を行った時に、セルの位置は検索結果の値にありますので、データの書き換えや追記をした時にチェックボックスの値を指定したセルの位置に転記することをやる為の事です。
そうなると、見つけたセルの位置は【Activecell】となり、ここから右に10個目のセルの位置を示すのは【Offset(,10)】となります。
そしてチェックボックスが【True】の時は「DM」をセルに記載させるとするとこのようになります。
Private Sub CommandButton1_Click()
If CheckBox1 = True Then
ActiveCell.Offset(, 10).Value = “DM”
Else
ActiveCell.Offset(, 10).Value = “”
End If
End Sub
- コマンドボタン1がクリックされたら
- もしチェックボタン1にチェックが入っていたら
- 選択されているセルの右0行の10列目の値をDMにする
- そうでなかったら
- 選択されているセルの右0
これで選択されたセルの右〇個めのセルの値をチェックボックスで変えられます。ちなみにこの方法は、データ検索を使った方法になりますので詳しくは住所録データ検索方法をご覧ください。
【データ検索】
【よく使うVBA】



コメント