Excel のセルにチェックマークを付けたいことがあります。
セルをダブルクリックすればチェックを付けたり外したり・・・
シートを多少工夫し20行程度のコードを書けば、これが簡単にできます。
動作している画像はこのとおり・・・
まずはシート上の工夫から・・・
下の絵をご覧ください。
① C列がチェックマーク用の列です。
ここのフォントを Wingdings にしておきます。
ここに ü(u ウムラウト:u の上に点点がある文字)が入ると、
Wingdings フォントではチェックマークの表示になります。
② VBA のコード上では ü(u ウムラウト)が使えないので
シート上に ü(u ウムラウト)のセルを作っておきます。
上例ではセルC7に ü(u ウムラウト)を置いています。
# ふつうは(通常の運用では)この行を非表示にして
ユーザーが変更できないようにしておくのが良いと思います
コードは次のとおりです。
===== ▼▼ ここから ▼▼ ===========================
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim U_umlaut As String
U_umlaut = Range("C7").Value ' -- C7: Wingdings フォントのチェックマーク
' -----------------
Application.EnableEvents = False
' ---
If (Intersect(Target, Range("C11:C15")) Is Nothing) Then
' --- 変化無しなので、何もしない
Else
' --- 変化したので、チェック状態を反転させる
If (ActiveCell.Value = "") Then
Cells(ActiveCell.Row, 3).Value = U_umlaut
Cells(ActiveCell.Row, 4).Value = "チェックあり"
Else
Cells(ActiveCell.Row, 3).Value = ""
Cells(ActiveCell.Row, 4).Value = ""
End If
End If
' -----------------
Application.EnableEvents = True
Cancel = True
End Sub
===== ▲▲ ここまで ▲▲ ===========================
Worksheet_BeforeDoubleClick というイベントをキャッチしているコードです。
セルC11:C15(チェックマークが入るセル)の値が変化したかを調べています。
変化があれば、次をおこないます。
値がブランクなら ü(u ウムラウト)をセットします。
ブランク以外ならブランクにします。
ü(u ウムラウト)はコードでは書けないので、
シート(セルC7)の値を変数にセットしています。
--------------------------------
Dim U_umlaut As String
U_umlaut = Range("C7").Value ' -- C7: Wingdings フォントのチェックマーク
--------------------------------
なお、分かりやすさのため、D列にはチェックの有無が表示されるようにしています。
ここで大事なのは、次のコードです(説明は割愛・・・)。
Application.EnableEvents = False
' -----------------
(ここが値変化を調べている部分)
' -----------------
Application.EnableEvents = True
Cancel = True
これだけで、ダブルクリックでチェックを付けたり外したりできるようになります。
なお、このチップスは MSDN Forum でやり取りした(実際にはメールでやり取りした)内容を利用しています。
質問者から送られたきたシートは実際の業務で使われており複雑だったので
このチップスでは簡略化しました。
---------------------------------------------------------
ブログ記事についてのお問い合わせは「質疑応答 掲示板」で・・・
# ご質問にはできる限りお答えしています。
ただし、お名前(本名)を書いていただいた場合に限らせていただきます。
ここをクリックして、北窓舎のサイトにもお立ち寄りください・・・
セルをダブルクリックすればチェックを付けたり外したり・・・
シートを多少工夫し20行程度のコードを書けば、これが簡単にできます。
動作している画像はこのとおり・・・
まずはシート上の工夫から・・・
下の絵をご覧ください。
① C列がチェックマーク用の列です。
ここのフォントを Wingdings にしておきます。
ここに ü(u ウムラウト:u の上に点点がある文字)が入ると、
Wingdings フォントではチェックマークの表示になります。
② VBA のコード上では ü(u ウムラウト)が使えないので
シート上に ü(u ウムラウト)のセルを作っておきます。
上例ではセルC7に ü(u ウムラウト)を置いています。
# ふつうは(通常の運用では)この行を非表示にして
ユーザーが変更できないようにしておくのが良いと思います
コードは次のとおりです。
===== ▼▼ ここから ▼▼ ===========================
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim U_umlaut As String
U_umlaut = Range("C7").Value ' -- C7: Wingdings フォントのチェックマーク
' -----------------
Application.EnableEvents = False
' ---
If (Intersect(Target, Range("C11:C15")) Is Nothing) Then
' --- 変化無しなので、何もしない
Else
' --- 変化したので、チェック状態を反転させる
If (ActiveCell.Value = "") Then
Cells(ActiveCell.Row, 3).Value = U_umlaut
Cells(ActiveCell.Row, 4).Value = "チェックあり"
Else
Cells(ActiveCell.Row, 3).Value = ""
Cells(ActiveCell.Row, 4).Value = ""
End If
End If
' -----------------
Application.EnableEvents = True
Cancel = True
End Sub
===== ▲▲ ここまで ▲▲ ===========================
Worksheet_BeforeDoubleClick というイベントをキャッチしているコードです。
セルC11:C15(チェックマークが入るセル)の値が変化したかを調べています。
変化があれば、次をおこないます。
値がブランクなら ü(u ウムラウト)をセットします。
ブランク以外ならブランクにします。
ü(u ウムラウト)はコードでは書けないので、
シート(セルC7)の値を変数にセットしています。
--------------------------------
Dim U_umlaut As String
U_umlaut = Range("C7").Value ' -- C7: Wingdings フォントのチェックマーク
--------------------------------
なお、分かりやすさのため、D列にはチェックの有無が表示されるようにしています。
ここで大事なのは、次のコードです(説明は割愛・・・)。
Application.EnableEvents = False
' -----------------
(ここが値変化を調べている部分)
' -----------------
Application.EnableEvents = True
Cancel = True
これだけで、ダブルクリックでチェックを付けたり外したりできるようになります。
なお、このチップスは MSDN Forum でやり取りした(実際にはメールでやり取りした)内容を利用しています。
質問者から送られたきたシートは実際の業務で使われており複雑だったので
このチップスでは簡略化しました。
---------------------------------------------------------
ブログ記事についてのお問い合わせは「質疑応答 掲示板」で・・・
# ご質問にはできる限りお答えしています。
ただし、お名前(本名)を書いていただいた場合に限らせていただきます。
ここをクリックして、北窓舎のサイトにもお立ち寄りください・・・