【VBA】Excelマクロでチェックボックスを作る(読み取る)方法

VBA
スポンサーリンク

チェックボックスを作ってマクロで読み込み、処理を実行することができます。

ユーザーフォームで条件分岐した結果

チェックボックスを作る(読み取る)方法は以下の2つです。

①の方が簡単ですが、②には拡張性が大きいメリットがあります。

ちなみに、チェックボックスは複数の選択肢を選べます。

1個だけチェックをつけるのはラジオボタンです。↓

“挿入”タグからチェックボックスを作成する方法

チェックボックスを作る

“開発”タブのすぐ下にある”挿入”を押してみましょう。

”挿入”欄にあるチェックボックスのアイコン

下から2行目にチェックボックスがあるので選択してください。

ドラッグして大きさを決めると、チェックボックスができます。

チェックボックスの描画

チェックボックスにプログラムを入れる

チェックボックスを作ると、”開発”タブの”デザインモード”が自動的にONになります。

”デザインモード”がONになっている図

デザインモードがONだと文字やフォントを編集可能です。

ON :編集可能
OFF:編集不可(チェックを入れるか外すだけ)

ONの状態でチェックボックスをダブルクリックしましょう。

チェックボックスをクリックしたときに起動するプログラム

“CheckBox1_Click”と書いてある通り、ここにはチェックを入れた時の処理を書きます。

Private Sub CheckBox1_Click()

MsgBox "chek"

End Sub

“check”という文字をメッセージ表示するプログラムにしました。

“デザインモード”をOFFにしてから、チェックを入れて確認してみましょう。

チェックを入れるとメッセージが表示される

チェックが入っている or 入っていないを判断する

先ほどのプログラムの起動条件は”Click”でした。

これは、チェックを入れても外しても起動する状態です。

本当はチェックを入れたときにだけ実行するようにしたいので、if文で条件分岐をしましょう。

Private Sub CheckBox1_Click()

If CheckBox1.Value Then
    MsgBox "check"
Else
    MsgBox "no check"
End If

End Sub

もしチェックが入っているなら、CheckBox1.ValueがTrueになっています。

チェック有り無しで条件分岐した結果

このように、ValueがTrueかFalseかでチェックの有無を判断しましょう。

チェックボックスのデザインを編集する

プログラムを書く画面(VisualBasic)の左下で書式設定ができます。

書式設定する欄

例えば、チェックボックスに表記する文字やフォントを変えられます。

Caption:表記文字
Font:フォント種類
TextAlign:文字寄せ方向

ボックスの□自体の大きさは変更できません。

メインプログラムとの連携

チェックの有無をメインプログラム(標準モジュール)と連携させましょう。

以下のようにデータが入っているとします。

データが入力されている図

“合計”と”平均”と”最大”のチェックボックスを作りましょう。

3つのチェックボックスを用意した図

”合計”のボックスを作って他はコピペすると簡単です。

チェックを入れた条件に合わせてプログラムを分岐させましょう。

チェックボックスのプログラム

Private Sub CheckBox1_Click()

flag1 = CheckBox1.Value

End Sub

Private Sub CheckBox2_Click()

flag2 = CheckBox2.Value

End Sub

Private Sub CheckBox3_Click()

flag3 = CheckBox3.Value

End Sub

“合計”がCheckBox1、”平均”がCheckBox2、”最大”がCheckBox3に該当します。

それぞれチェックが入っていると、対応するflag1~3がTrueになります。

これでどのボックスにチェックが入っているかを受け取りましょう。

チェックボックスのプログラムを書く場所が見つからないんだけど。。。

という場合は、”デザインモード”をONにしてダブルクリックしましょう。

または、左端のリストにある”Sheet”をダブルクリックすれば出てきます。

VisualBasicの左端にあるリスト

標準モジュールのプログラム

Public flag1
Public flag2
Public flag3
Sub test()

Sum = 0
cnt = 0
Max = 0

For i = 2 To 11
    Sum = Sum + Cells(i, 1)
    cnt = cnt + 1
    If Max < Cells(i, 1) Then
        Max = Cells(i, 1)
    End If
Next i

If flag1 Then
    MsgBox Sum
End If
If flag2 Then
    MsgBox Sum / cnt
End If
If flag3 Then
    MsgBox Max
End If

End Sub

大事な部分は冒頭の”Public”です。

Publicで変数を共有するコード

“Public flag1″で他のプログラムと変数flag1を共有できます。

つまり、チェックボックスのプログラムとflag1が同じだと宣言しています。

次にfor文で合計値とデータ数と最大値を計算しましょう。

最後のif文でflag1がTrueなら合計、flag2がTrueなら平均、flag3がTrueなら最大値を表示しています。

もし1個のみチェックを入れられるようにしたいなら、ラジオボタンを使いましょう。

以上で描画したチェックボックスでプログラムを作成する方法は終わりです。

ユーザーフォームでチェックボックスを作成する方法

チェックボックスを作る

“挿入”から”ユーザーフォーム”をクリックします。

ユーザーフォームを選択する図

すると以下のようなウィンドウが現れるはずです。

ユーザーフォームの初期画面

チェックボックスがあるので選択して描画しましょう。

チェックボックスを描画する図

書式を変えるために左下のリストから”Caption”や”Font”を設定します。

この設定は”挿入”からチェックボックスを作成した時と同じ要領です。

書式設定できるリスト
書式設定後のユーザーフォーム

これでボックスができたので、プログラムを作成しましょう。

プログラムを作成する

チェックボックスのプログラム

描画したチェックボックスをダブルクリックしてください。

すると以下のウィンドウが出てきます。

“CheckBox1_Click”なので、チェックボックスをクリックしたときのプログラムが書けます。

Private Sub CheckBox1_Click()

flag1 = CheckBox1.Value
MsgBox flag1

End Sub

もしチェックが入っているならTrue、入っていないならFalseが表示されるようにしました。

標準モジュールのプログラム

標準モジュールには、ユーザーフォームを呼び出すプログラムを書きます。

ユーザーフォームと標準モジュールを書く場所が違うので注意してください。

ユーザーフォームと標準モジュールの場所
Sub test()

UserForm1.Show

End Sub

UserForm1.Showでユーザーフォームを表示します。

プログラムを起動するとチェックボックスが現れるので、クリックしてみましょう。

チェックを入れた結果の図

チェックを入れたらTrue、外したらFalseが表示されれば成功です。

フォームを閉じたければ×ボタンを押してください。

メインプログラムとの連携

先ほどと同じプログラムを、ユーザーフォームで作成しましょう。

データが入っている図

チェックボックスを3つ作成します。これも”合計”をコピペすると簡単です。

3つのチェックボックスを作ったユーザーフォーム

そしてコマンドボタンを追加しましょう。

計算実行ボタンとして使います。

コマンドボタンを追加する図

コマンドボタンをダブルクリックしてみましょう。

“ボタンをクリックしたときに起動するプログラム”が作れます。

Private Sub CommandButton1_Click()

flag1 = CheckBox1.Value
flag2 = CheckBox2.Value
flag3 = CheckBox3.Value
Sum = 0
cnt = 0
Max = 0

For i = 2 To 11
    Sum = Sum + Cells(i, 1)
    cnt = cnt + 1
    If Max < Cells(i, 1) Then
        Max = Cells(i, 1)
    End If
Next i

Unload Me

If flag1 Then
    MsgBox Sum
End If
If flag2 Then
    MsgBox Sum / cnt
End If
If flag3 Then
    MsgBox Max
End If

End Sub

①のプログラムとほとんど同じです。

途中にある”Unload Me”はユーザーフォームを閉じる命令です。(Xボタンを押すのと同じ)

標準モジュールのプログラムはさっきと同じです。

Sub test()

UserForm1.Show

End Sub

これを実行すると、ユーザーフォームのプログラムに移行します。

ユーザーフォームで条件分岐した結果

チェックを入れて”計算”ボタンを押すと、選択した項目に合わせて結果を出してくれるはずです。

まとめ

今回はチェックボックスを使ったプログラムを紹介しました。

できるだけシンプルな方法が好きな方は、①の”挿入”から作る方法にしましょう。

どんどん機能を足していきたい人には、②のユーザーフォームがおススメです!

コメント

タイトルとURLをコピーしました