2011-12-13 7 views
2
値がこのように別の1に入力されたときに、私は、日付時刻とのセルを更新したい

エクセルのOnChangeイベント

値があるとき、私は日時にB列の値を変更するにはどうすればよい

Aに入りましたか?

if-then-elseのようなものがありますか?

私は条件付き書式設定を試みましたが、成功しませんでした。

実例を投稿してもらえますか?

ありがとうございました

答えて

1

列Aと、列Bのタイムスタンプになります

=IF(A3<>"",IF(B3="",NOW(),B3),"") 

値を使用してみてください、あなたはオプションで反復計算を有効にする必要があります。

これは、値が最初に列Aに入力されたときにのみタイムスタンプを生成することに注意してください。これを使用するには、通常セルの値を編集するのではなく、新しい値を入力します。

これは単なる回避策であり、完全な解決策ではないことに心配します。より便利なものが見つかった場合には、これを更新します。

+0

roninありがとう、私は間違いなくこれを試してみます:) – Herr

+1

これは動作しますが、すべての数式が再計算されるたびに再計算されるかもしれません(例えば...) - 私はこれをチェックする必要があります – JMax

+0

あなたは興味があるようです編集履歴、[この1つ](http://www.tlookup.com/)を試してください – kshenoy

1

あなた自身でこれを試したことがありますか?
私の意見では、最も難しいのは、Changeイベントについて考えていたことです。

Private Sub Worksheet_Change(ByVal Target As Range)  
If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub 
Application.EnableEvents = False 

ActiveSheet.Cells(Target.Row, 2).Value = Format(Now, "h:mm") 
Application.EnableEvents = True 
End Sub 

Formatのコンテンツは、必要に応じて変更できます。

+0

こんにちは、私は間違いなく、私は10年間のプログラマーですが、実際にExcelを使用することを知らないし、実際に数学で最大のものでもありません:)私はこのコードをどこに追加するか分からないしかし、私はそれを試してみます。ありがとうございます:) – Herr

+0

申し訳ありませんが、私はあなたのタイトルを誤解している可能性があります...私が示したのは[イベントプロシージャ]です(http://www.cpearson.com/excel/Events.aspx)、これを追加する必要がありますコードをワークシートに貼り付ける:タブを右クリックし、 'Edit code'をクリックし、私の答えのコードをコピーして貼り付けてください。(私のコメントにも上記のリンクを見てください) – JMax

+2

+1 - あなたのEnableEvents =あなたのIntersectテストの後に3行目にFalse: – brettdj

0

= NOW()は揮発性であり、ワークブック内の何かが変更されたときにいつでも再計算されるので、問題なく使用することができます。

コード内にApplication.Volitileを追加するだけで、別のメモとして、揮発性のUDFを作成することができます。

1
Private Sub Worksheet_Change(ByVal Target As Excel.Range) 
'when entering data in a cell in Col A 
On Error GoTo enditall 
    Application.EnableEvents = False 
If Target.Cells.Column = 1 Then 
     n = Target.Row 
     If Me.Range("A" & n).Value <> "" Then 
      Me.Range("B" & n).Value = Format(Now, "hh:mm:ss") 
     End If 
    End If 
enditall: 
    Application.EnableEvents = True 
End Sub 

使用方法は?

  1. シートタブと[コードを表示]を右クリックします。

  2. コードをそのシートモジュールに貼り付けます。

  3. Excelウィンドウに戻るにはAlt + qを押します。サンプルファイルの

Click here ...

3

ここでユーザ(すなわちセルのブロックを貼り付け)一度に複数のセルを更新する場合を扱う別のイベントプロシージャです。

Worksheet_Changeイベントプロシージャを使用する場合は、最初にイベント処理をオフにして、最後に常にオンに戻すことが必須です。

タイムスタンプの書式を意図的に除外していたことに注意してください。列がまだフォーマットされておらず、フォーマットする必要がある場合は、コード行を追加して.NumberFormatプロパティを設定することをお勧めします。

Private Sub Worksheet_Change(ByVal Target As Range) 
    Application.EnableEvents = False 
    If Target.Column = 1 Then 
     Target.Resize(ColumnSize:=1).Offset(ColumnOffset:=1).Value = Now 
    End If 
    Application.EnableEvents = True 
End Sub 

列Aの変更を追跡するのは簡単です。ユーザーがセルのブロックを貼り付けると、他の列が少しトリッキーになる可能性があります。たとえば、列Dの変更を取得する場合は、C2:D2セルを貼り付けたときにコードを適用する必要があります(Intersectメソッドを使用するか、Target.Columns.Countプロパティを参照してください)。

+1

マルチセルのアップデートで+1良いポイント、あまりにも頻繁に見落とされています。 – brettdj