Vinayは、データ入力にExcelワークシートを使用します。情報は列Aに入力され、Vinayは、列Aに入力された値の隣の列Bに、値がいつ入力されたかを示す時間を自動的に追加する方法を望んでいます。

このタスクを実行するには、いくつかの異なる方法があります。 1つ目は、列Bで隣接するセルを選択し、Ctrl + Shift +を押して、手動で時間を入力することです。 (それはセミコロンです)。このショートカットは、セルに現在の時刻を入力します。もちろん、このアプローチの問題は、自動ではなく、実装に余分な動きとキーストロークが必要になることです。

より良いアプローチは、数式を使用して時間を入力することです。 NOW関数は現在の日付と時刻を返し、次のようにセルで使用できます。

=NOW()

もちろん、この単純な数式は、ワークシートが再計算されるたびに更新されます。つまり、この関数は、列Aに値を入力するたびに現在の時刻を返します。これは、前の時刻を更新したくないため、望ましくありません。次のように、数式を使用して列Aに何かがあるかどうかを確認できます。

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

問題は、このような数式がワークシートに循環参照を導入することです。これにより、さまざまな課題が発生します。より良いアプローチは、列Aに何かが入力されるたびに自動的に実行されるマクロを作成することです。データ入力に使用されるワークシートのタブを右クリックし、コンテキストメニューから[コードの表示]を選択します。 Visual Basic Editorにワークシートのコードウィンドウが表示されたら、これをウィンドウに入力します:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

Dim rCell As Range     Dim rChange As Range          On Error GoTo ErrHandler     Set rChange = Intersect(Target, Range("A:A"))

If Not rChange Is Nothing Then         Application.EnableEvents = False         For Each rCell In rChange             If rCell > "" Then                 With rCell.Offset(0, 1)

.Value = Now                     .NumberFormat = "hh:mm:ss"

End With             Else                 rCell.Offset(0, 1).Clear             End If         Next     End If

ExitHandler:

Set rCell = Nothing     Set rChange = Nothing     Application.EnableEvents = True     Exit Sub ErrHandler:

MsgBox Err.Description     Resume ExitHandler End Sub

マクロを配置すると、列Aのセルに何かを入力すると、列Bの隣接するセルに日付と時刻が含まれます(時刻のみを表示するようにフォーマットされます)。列Aの何かを削除すると、列Bの隣接するセルもクリアされます。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(12811)は、Microsoft Excel 2007、2010、および2013に適用されます。Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります。