北の窓から(芦田っち)

PC関連と私的雑感のブログ。
2015年7月10日、カッコ内に名前を加えました。昔の友だちに気付いてほしくて・・・

おやぢチップス (102):(Excel) ダブルクリックでチェックをオン/オフ

2018-03-19 09:49:04 | おやぢチップス
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 でやり取りした(実際にはメールでやり取りした)内容を利用しています。

  質問者から送られたきたシートは実際の業務で使われており複雑だったので
  このチップスでは簡略化しました。

---------------------------------------------------------
ブログ記事についてのお問い合わせは「質疑応答 掲示板」で・・・

  # ご質問にはできる限りお答えしています。
    ただし、お名前(本名)を書いていただいた場合に限らせていただきます。


ここをクリックして、北窓舎のサイトにもお立ち寄りください・・・

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« おやぢチップス (101):Windo... | トップ | おやぢチップス (103):(WULF... »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

おやぢチップス」カテゴリの最新記事