Excelでチェックボックスを使ってデータ入力をできるようにする方法をご紹介してきました。
「チェックボックスを『レ』ではなく『X』にすることはできないのでしょうか?」
というご質問をいただいたことがあります。
フォームやコントロールツールボックスから作成したチェックボックスは、Onにすると「レ」型のチェックとなりますが、これを「X」になるようにできないのか、というご質問です。
フォームやコントロールツールボックスから作成できるチェックボックスは、「レ」型にしかならないので別の方法を考えるしかありません。
以前このサイトでご紹介した、「Excel Hacks―プロが教える究極のテクニック100選」の、Hack86「セルをチェックボックスのように動作させる」で、Marlettフォントを使って、レ型のチェックマークを表示させるコードが紹介されています。
この考え方を利用して、□にX型のチェックマークを表示させる以下のようなコードを書いてみました。
※B1・B3・B5セルをクリックするとX型チェックマークのOn/Offが切り替わる例 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Target
If _
.Address() = "$B$1" Or _
.Address() = "$B$3" Or _
.Address() = "$B$5" _
Then
.Font.Name = "Wingdings 2"
If .Value = ChrW(83) Then
.Value = ChrW(163)
Else
.Value = ChrW(83)
End If
End If
End With
End Sub
「Wingdings 2」フォントには、空の□と、□にXの表示された形状が用意されています。
文字コード(ユニコード)の
「83」が□にXの表示された形状
「163」が□
です。
.Font.Name = "Wingdings 2"
If .Value = ChrW(83) Then
.Value = ChrW(163)
Else
.Value = ChrW(83)
End If
の部分で、フォントを「Wingdings 2」にして、
セルの値が「ChrW(83)」なら「ChrW(163)」に
そうでなければ「ChrW(83)」にすることで、
チェックマークのOn/Offを入れ替えています。
If _
.Address() = "$B$1" Or _
.Address() = "$B$3" Or _
.Address() = "$B$5" _
Then
の部分で、どのセルを対象にするかを指定しています。
格好いいコードとは思えませんが、チェックマークを表示させるセルを追加したければ、この箇所に追加してください。
なおこのコードには若干の問題もあります。
Worksheet_SelectionChangeイベントプロシージャを利用しているので、あくまでも選択箇所が変更されたときにだけ有効になるという点です。
つまり上記のコードでは、B1セルがアクティブなときにB3セルをクリックすればB3セルのOn/Offは切り替わりますが、B3セルがアクティブな状態でB3セルをもう一度クリックしたとしてもB3セルのOn/Offは切り替わることはありません。
- Newer:ITmedia Biz.ID:田口元の「ひとりで作るネットサービス」探訪
- Older:透かし文字はどこへ?
Home » エクセルマクロ・Excel VBAの使い方 » イベントプロシージャ » X型のチェックボックスを作成したい−SelectionChange