[[20150113162708]] 『チェックボックスと日付の関連付け』(zunzun) ページの最後に飛ぶ

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

 

『チェックボックスと日付の関連付け』(zunzun)

1.W14からW44に確認のチェックボックス(コントロールボックスで作成)があり、チェックするとAE列にTRUEが表示されるようにリンクするセルを設定しています。
2.X列に確認日を記入する以下のコードを書きましたが、確認をチェック(AE列にはTRUEと表示されている)しても日付が表示させれません。
Private Sub Worksheet_Change(ByVal Target As Range)

 If Target.Row = 13 Or Target.Row > 43 Then Exit Sub
 If Target.Column <> 31 Then Exit Sub
 If Target.Value <> True Then Exit Sub
 Target.Offset(0, -7).Value = Now
 End Sub
ただし、AE列にTRUEを直接入力すると、日付がX列に表示されます。
どこに問題があるのでしょうか?

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


 どこにも問題はありませんが、Worksheet_Change はセルリンクや計算によって値が
 変わったり、書式を変更してもイベントが発生しなかったと思います。

 チェックボックスのイベント処理を直接書くなどの方法を考えてみてはどうでしょうか。
(Mook) 2015/01/13(火) 16:42

Mookさん 返信ありがとございます。
「チェックボックスのイベント処理を直接書くなどの方法を考えてみてはどうでしょうか。」
の具体的内容はどんなことでしょうか?

(zunzun) 2015/01/13(火) 16:55


 ActiveX のチェックボックスなら、シートモジュールにこんなことです。

 Private Sub CheckBox1_Click()
   処理
 End Sub
(Mook) 2015/01/13(火) 16:59

 横から失礼します。
 質問者さんはおそらくフォームのLinkedCellでリンクさせているような?

 もしイベントつけるにしても、
 ちょっと30個のコントロールにイベントそれぞれつけるのは、質問者さんの
 レベルでは大変かもしれないっすよ。
 疑似コントロール配列でもいいと思いますが。

 どうせChangeイベントを設定しているのでしたら、DoubleClickイベントで
 セルの値を□とレ(チェックボックスマーク)に交互に切り替えてはどうでしょう?
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        If Intersect(Target, Range("W14:W44")) Is Nothing Then Exit Sub
        With Target
            If .Value = "□" Then
                .Value = ChrW(9745)
                Cells(.Row, "X").Value = Date
            Else
                .Value = "□"
                Cells(.Row, "X").ClearContents
            End If
        End With
        Cancel = True
    End Sub

 ※ちょっと修正 1708
(稲葉) 2015/01/13(火) 17:04

 あらら、チェックボックスは1つではなかったのですね。
 稲葉さんが言うように、別案の方がよいので先のコメントは無視してください。
(Mook) 2015/01/13(火) 17:16

稲葉さま 返信ありがとうございます。
試しましたが、日付は表示されません。

チェックボックスが□確認になっているので、
□→□確認に変更しましたが、ダメでした。

ちなみにチェックボックスはクリックで
□にレが記入されるので、Doubleを削除
しましたが、ダメでした。
 
(zunzun) 2015/01/13(火) 17:43


 どこまでVBAについてご存じなのでしょう?

 1)コードはシートモジュールに記入しましたか?
 2)W14の「セル」をダブルクリックしてみましたか?
 3)ブレークポイントを置いて、動作することを確かめましたか?

http://www.happy2-island.com/excelsmile/smile03/capter00902.shtml

(稲葉) 2015/01/13(火) 18:17


稲葉さま
初心者です。手さぐりでVBAにチャレンジしています。

1)はシートタブを右クリックして、コードの表示をクリックしてそこにコピペしました。
2)のW14をダブルクリックしましたが、ダメでした。
3)はやり方を勉強して、やってみます。

(zunzun) 2015/01/13(火) 18:55


 修正したコードを都度提示したほうが良いように思います。

 >Doubleを削除しましたが、ダメでした。 
 はダメでしょうね。そういうイベントはありませんので。

 こんなコードにならないでしょうか(右クリックです)。

 Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    If Intersect(Target, Range("W14:W44")) Is Nothing Then Exit Sub
    With Target
        If .Value = "□確認" Then
            .Value = ChrW(9745) & "確認"
            Cells(.Row, "X").Value = Date
        Else
            .Value = "□確認"
            Cells(.Row, "X").ClearContents
        End If
    End With
    Cancel = True
 End Sub

(Mook) 2015/01/13(火) 19:52


 別方向からのアプローチです。
 シートに貼り付けるコントロールは、ヴィジュアル的なことはActiveXには勝てませんが、
 フォームのコントロールの方が便利な面もあります。

 新規ブックの標準モジュールに

 以下のコード・・・、

 Option Explicit
 Sub mk_chkbox()
    Dim g0 As Long
    Dim r As Range
    On Error Resume Next
    ActiveSheet.CheckBoxes.Delete
    On Error GoTo 0
    Rows("14:42").RowHeight = 13.5
    For g0 = 14 To 42
        Set r = Range("a" & g0)
        With ActiveSheet.CheckBoxes.Add(r.Left, r.Top, r.Width, r.Height)
           .OnAction = "chk_click"
        End With
    Next
    Rows("14:42").RowHeight = 15
    Columns("T:T").ColumnWidth = 18
 End Sub
 Sub chk_click()
    Dim chknm As String
    chknm = Application.Caller
    With ActiveSheet.CheckBoxes(chknm)
       If .Value = xlOn Then
          Cells(.TopLeftCell.Row, "t").Value = Now()
       Else
          Cells(.TopLeftCell.Row, "t").Value = ""
       End If
    End With
 End Sub

 まず、mk_chkboxを実行してください。

 14行目から42行目にフォームのチェックボックスが作成されます。

 作成されたチェックボックスをクリックして チェックを入れてください。

 対応するT列に日付が入力されます。

(ichinose ) 2015/01/13(火) 22:24


 4)Application.EnableEventsプロパティがFalseになっていませんか?
 5)ダブルクリックによる編集をCancelしていますが、編集モードになってしまいますか?
   (質問3と同じことを言っています)

 ワークシートのイベントについて
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_event.html

 >Application.Caller
 なるほど!  勉強になります!

  

(稲葉) 2015/01/14(水) 09:02


ichinoneさま 
出来ました。ありがとございました。
追加で教えてください。
A列のチェックボックスの□チェックを□確認に変更することは可能でしょうか?
(zunzun) 2015/01/14(水) 11:24

 >A列のチェックボックスの□チェックを□確認に変更することは可能でしょうか?
 これは、マクロの記録でフォームのチェックボックスを作成し、
 そのチェックボックスの項目を変更して見てください。

 これで作成されたコードにヒントがあると思います。
 どのようなコードで項目を変更できるか 確認してください

(ichinose ) 2015/01/15(木) 03:56


ichinoseさま
ありがとございます。
確認してみます。
(zunzun) 2015/01/15(木) 11:21

コメント返信:

[ 一覧(最新更新順) ]


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