回答:
これを行う最も簡単な方法は、ユーザー定義関数を使用することです。この関数は、それが参照するセルが変更されると更新されるため、イベントに関連付ける必要はありません。
問題の機能は次のとおりです。
Function Updating_Date(dependent_cell as Range) As Date
Updating_Date = Date
End Function
そのコードをワークブックのモジュールに配置した後、単純に入力=Updating_Date(B5)しC5てコピーすることができます。これにより、列Cの値が変更されるたびにC5の日付が更新されます。
列Bのセルが空白でない場合にのみ日付を表示するには、列Cのセルにif式を適用できます。これは、他の質問で触れました。私がそこに示したのと同じ条件を入力し(つまりISBLANK(B5))""、条件が真の場合は戻り値を空の文字列()にしUpdating_Date(B5)、条件が偽の場合はUDF()にします。
If CellsAreEmpty(Range("A1"), Range("B7"), Range("C9")) Then Debug.Print "Do stuff
以下は、セル「A」に変更があるたびに、セル「B」に今日の日付を入れます。
Private Sub Worksheet_Change(ByVal Target As Range)
' Auto Date
Dim Cell As Range
For Each Cell In Target
If Cell.Column = Range("A:A").Column Then
If Cell.Value <> "" Then
Cells(Cell.Row, "B").Value = Int(Now)
Else
Cells(Cell.Row, "B").Value = ""
End If
End If
Next Cell
End Sub
この動作を発生させるワークシートのVBAモジュールにこのコードを配置する必要があります。
AFIK、VBA経由でこれを行う必要があります。ワークシートの変更を監視し、セルB5〜B39の変更のみを除外し、それに応じてCのセルを更新する関数を作成できます。
更新:おそらくalt-F11を使用してVBAにアクセスすることがわかります。
Sheet1というExcelオブジェクトまたは関心のあるシート(ツリーリストの左上)をダブルクリックして、そのシートのコードを取得します。
2つのドロップダウンからワークシートと変更を選択します。したがって、次のようなコードが得られます。
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
変更されたセルへの参照である変数「ターゲット」が利用可能になりました。
これらの行の間にいくつかのコードを追加します。
debug.Print Target
ctrl-Gを押してイミディエイトウィンドウを表示します
ワークシートでいくつかの変更を行ってコードに戻ると、入力したデータがイミディエイトウィンドウに表示されます。
次に、言うようにコードを変更if Target.すると、Target変数に関連する可能なプロパティのドロップダウンが表示されます。
いくつかの変更により、これを取得できます。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 And (Target.Row > 4 And Target.Row < 40) Then
Debug.Print Target.Value
End If
End Sub
興味のある範囲の変更のみを印刷するようになりました。
セルの値を変更する方法を知りたい場合は、マクロを手動で記録し、コードを調べます。うまくいけば、あなたは今に行くのに十分です そうでない場合はお知らせください。
=TODAY()それを再計算し続けるので、単に使用することはできません...私はあなたがVBAでこれを行う必要があると信じています。「マクロ」または関数を設定し、他のセルに入力したときにトリガーする必要があります(方法はわかりません-すみません:()