[[20161024141817]] 『チェックボックスを使わずにチェックマークを入れ』(名無し) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『チェックボックスを使わずにチェックマークを入れたい』(名無し)

いつもお世話になっております。

チェックボックスを使用せずに、特定のセルをWクリックするだけで
チェックマークが入るようにしたいと思い、
他のサイトで同じような質問を見つけ、下記のようなコードを入れてみました。

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

Cancel = True
If Intersect(Target, Range("C1")) Is Nothing Then Exit Sub

Select Case Target.Value
Case ""
Target.Value = "✓"
Case "✓"
Target.Value = ""
End Select
End Sub

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

試してみた所、
次のようなエラーメッセージがでました。

「実行時エラー’13’
型が一致しません」

実は「C1」というセルは、一つのセルではなくて
「C1」と「D1」が結合されたセルです。
結合を解除して、「C1」だけをクリックすると、Wクリックで✓印が表示されるようになりました。

凡例としてチェック箇所は1箇所のみですが、実際の作業は結合されたセルが
20個ほどあり、作業を削減させる為にこのコードを完成させたいのですが
結合されたセルでも有効になるにはどのようにすればいいでしょうか?
何卒ご教示願います。

< 使用 Excel:Excel2013、使用 OS:Windows7 >


以下のように、1つ目のセルであることを明示しては?
    Select Case Target(1).Value
(???) 2016/10/24(月) 14:36

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim t As Range
    Cancel = True
    If Intersect(Target, Range("C1")) Is Nothing Then Exit Sub
    For Each t In Target
    Select Case t.Value
    Case ""
    t.Value = "レ": Exit Sub
    Case "レ"
    t.Value = "": Exit Sub
    End Select
    Next t
End Sub
(mm) 2016/10/24(月) 14:49

遅ればせながら。。。使う字を変えてみただけです^^;

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    If Intersect(Range("C:C"), Target) Is Nothing Then Exit Sub
    Cancel = True

    With Target(1)
        Select Case .Value
            Case ChrW(&H2611): .Value = ChrW(&H2610)
            Case Else: .Value = ChrW(&H2611)
        End Select
    End With
End Sub

結合セルの場合、ターゲットに複数セルが与えられるから、
Valueで値が配列になるので、単なる値ではないので、型が違いますになります。
Target(1)と明示したら複数ある1個目の意味になるので、値が得られます。

(まっつわん) 2016/10/24(月) 15:04


ありがとうございます!
悩んでた事が一気に解決しました。

もう一つ、困った事になってしまいました。
該当箇所に✓マークは入りましたが、他の入力箇所(チェックマークとは関係ない箇所)を修正しようとすると
ダブルクリックしてもカーソルが反応しなくなってしまいました。
私がコードの内容を理解していない事もあり、これがどういう症状なのかまったくわかりません。

ご教示頂けたら幸いです。

(名無し) 2016/10/24(月) 15:14


 Cancel = True
 が
 If Intersect(Target, Range("C1")) Is Nothing Then Exit Sub
 の前にある場合は後ろに移してみてはどうか。

 Cancel = True
 でダブルクリック本来の挙動を無しにしているが範囲チェックの前に行ってしまうと
 どこをダブルクリックしてもその挙動(セルの再編集)を無しにしてしまう。
 (なのでまっつわんさんのほうはそうならない)
(ねむねむ) 2016/10/24(月) 15:22

>他の入力箇所(チェックマークとは関係ない箇所)を修正しようとすると
>ダブルクリックしてもカーソルが反応しなくなってしまいました。

Cancel = True

が、ダブルクリックの操作を無効にするスイッチなので、
そちらが提示されたコードでは、まずそのスイッチを無効にしているので、
何が何でも無効になってしまいます。

まずは、この処理をしたいセルを明確にして、
条件分岐で(If〜Then〜の文)で、
こういう時はこう、そういうときはそれと、処理を場合分けしないとだめです。

(まっつわん) 2016/10/24(月) 15:36


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.