Excel VBA シート上のチェックボックス、オプションボタン

(チェックボックスなどはフォームコントロールとActiveXコントロールがありますが、この記事ではフォームコントロールに話を限らせていただきます。)

お仕事で、Excelの記入フォーマットに書かれた情報をツールに取り込むというのがあり、そのシートにはチェックボックスが2つありました。

あれぇ、どうやってチェックされてるかどうかを調べるんだっけ?とググってみるのですが、ユーザーフォーム上のチェックボックスやオプションボタンの扱い方は出てくるのですが、シート上の物の扱い方は出て来ない。

勘で

Sheet1.check...

と打ってみてもVBEのヒントが出てこない。

Sheet1.CheckBoxes(
(Boxは複数形です。)

まで打つとヒントが出てくる。
では、カッコの中には何を入れれば良いのか。
もちろん、1,2,3と言った番号でも良いのだが、他人が作ったExcel上に貼られたチェックボックス、どれが1なのか2なのかなんてわからない。

でも、チェックボックスを右クリックすると

チェックボックス名.jpg

ここに名前が出ますよね。
注意が必要なのが、これは”チェック 1"(全角"チェック"、半角スペース、半角"1")です。
ぱっと見で半角スペース無しで入れると当然うまく行きません。

あと、チェックボックスが取りうる値ですが、xlOnかxlOffです。

チェックボックス同様、よく使われそうなのがラジオボタン、と言うかフォームコントロールの種類でいうとオプションボタンですね。
これも、

Sheet1.OptionButtons()

という形です。

こちらも取りうる値はxlOnかxlOff

ということで
こういうシートで

シート.jpg


Sub checkCheckBox()
Dim Check1 As String
Dim Check2 As String
Dim Option1 As String
Dim Option2 As String

Check1 = onOff(Sheet1.CheckBoxes("チェック 1").Value)
Check2 = onOff(Sheet1.CheckBoxes("チェック 2").Value)
Option1 = onOff(Sheet1.OptionButtons("オプション 3").Value)
Option2 = onOff(Sheet1.OptionButtons("オプション 4").Value)

Debug.Print "Check1="; Check1
Debug.Print "Check2="; Check2
Debug.Print "Option1="; Option1
Debug.Print "Option2="; Option2
End Sub

Function onOff(ByVal Value As Long) As String
Select Case Value
Case xlOn
onOff = "ON"
Case xlOff
onOff = "OFF"
End Select
End Function


こんなコードを動かすと

Check1=ON
Check2=OFF
Option1=OFF
Option2=ON

こんな結果が得られます。

それから、CheckBoxesやOptionButtonsはShapesとしても扱えるので


Sub allShapes()
Dim Shp As Shape

For Each Shp In Sheet1.Shapes
Debug.Print Shp.Name
Next Shp
End Sub


このようにすれば、すべてのShapesの名前が得られます。

ただし、上記のように右クリックして名前ボックスに出てくるのとは違い

Check Box 1
Check Box 2
Option Button 3
Option Button 4

この様な書式で得られます。
もちろん、この書式でCheckBoxesやOptionButtonsやShapesのカッコの中に入れても使えます。

ただ、これだと、どの名前がどのShapeを表しているのかがわからなくて、色々とOn、Offの状態にしながらこれらのValueを見ながら特定していくことになりますね。

できる大事典 Excel VBA 2019/2016/2013&Microsoft 365対応 できる大事典シリーズ - 国本 温子, 緑川 吉行, できるシリーズ編集部
できる大事典 Excel VBA 2019/2016/2013&Microsoft 365対応 できる大事典シリーズ - 国本 温子, 緑川 吉行, できるシリーズ編集部

ブログランキング・にほんブログ村へにほんブログ村

この記事へのコメント