を使用して
(D2可能であれば
、私は、これはセルC2のためにアクティブにする必要があります)を入力パラメータとしてC2-Cellの値をとるユーザー定義関数(VBAマクロ関数)によって出力し、現在の日付を出力として返します。
D2のUDFの入力パラメータとしてC2を使用すると、C2が変更されるたびにD2を再評価する必要があることがExcelに通知されます(つまり、ブックの式の自動計算がオンになっている場合)。
編集:ここでは
はいくつかのコードです:
UDFの場合:D2での式のよう
Public Function UDF_Date(ByVal data) As Date
UDF_Date = Now()
End Function
:
=UDF_Date(C2)
あなたが与える必要がありますD2-Cellに日付/時刻形式を入力するか、または数字のrepresenを表示します日付値の表現。
C2式をD2式のままにしておくと、式を展開することができます。
注:たびExcelはD2で日付が現在の値にリセットされますワークブックを再計算しているため これはまだ理想的なソリューションではないかもしれません。 C2が最後に変更された時刻のみをD2に反映させるには、C2の過去の値を何らかの形で追跡する必要があります。 これは、例えば、入力パラメーターの値をアドレスにも提供し、入力パラメーターを隠しシートに保管し、UDFが呼び出されるたびに以前の値と比較することで、UDFに実装できます。
補遺:ここ
は、セル値の変化を追跡し、最後の変更が検出された日時を返すUDFの実装例です。それを使用する場合 、ことに注意してください。
UDFの使用上記と同様です。
UDFは、単一セル入力範囲でのみ機能します。
ブックのドキュメントプロパティに変更が検出されたときのセルの最終値と の日時を格納することによって、セル値が追跡されます。計算式が大規模なデータセットで使用されている場合、 によって追跡されるすべてのセルで、ファイルのサイズがかなり大きくなる可能性があります(セルの最終値最終変更日)。 非常に大量のドキュメントプロパティを処理できず、コードは にある点でブレーキをかけることがあります。
ワークシートの名前が変更されると、その中に含まれるセルのすべてのトラッキング情報が失われます。
文字列への変換が非決定的であるセル値の場合、コードが制動することがあります。
以下のコードは、をテストしていないであり、 という概念の証明とみなされるべきです。 自己責任で使用してください。
Public Function UDF_Date(ByVal inData As Range) As Date
Dim wb As Workbook
Dim dProps As DocumentProperties
Dim pValue As DocumentProperty
Dim pDate As DocumentProperty
Dim sName As String
Dim sNameDate As String
Dim bDate As Boolean
Dim bValue As Boolean
Dim bChanged As Boolean
bDate = True
bValue = True
bChanged = False
Dim sVal As String
Dim dDate As Date
sName = inData.Address & "_" & inData.Worksheet.Name
sNameDate = sName & "_dat"
sVal = CStr(inData.Value)
dDate = Now()
Set wb = inData.Worksheet.Parent
Set dProps = wb.CustomDocumentProperties
On Error Resume Next
Set pValue = dProps.Item(sName)
If Err.Number <> 0 Then
bValue = False
Err.Clear
End If
On Error GoTo 0
If Not bValue Then
bChanged = True
Set pValue = dProps.Add(sName, False, msoPropertyTypeString, sVal)
Else
bChanged = pValue.Value <> sVal
If bChanged Then
pValue.Value = sVal
End If
End If
On Error Resume Next
Set pDate = dProps.Item(sNameDate)
If Err.Number <> 0 Then
bDate = False
Err.Clear
End If
On Error GoTo 0
If Not bDate Then
Set pDate = dProps.Add(sNameDate, False, msoPropertyTypeDate, dDate)
End If
If bChanged Then
pDate.Value = dDate
Else
dDate = pDate.Value
End If
UDF_Date = dDate
End Function
「私はVBAコードをたくさん試しました」私たちはあなたに何を試してみたのですか?(http://mattgemmell.com/2008/12/08/what-have-you-tried/) –