0

以下のコードでは、「chrono」という名前のセルの範囲でダブルクリックイベントをキャッチしています。ターゲットセルに値が含まれている場合は、右側の次のセルに適用される数式にすでに含まれている値と連結します。のようなものを取得したいのです=0,1+0,1が、セルは空のままです。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
On Error Resume Next
Dim rng As Range
Set rng = Range("chrono")
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, rng) Is Nothing Then
    Application.EnableEvents = False
    Cancel = True 'stop the edit mode
    With Target
        If .Value = "" Then
            .Value = Time
        Else:
            Dim nextCell As Range
            Set nextCell = ActiveCell.Offset(0, 1)
            If nextCell.Formula = "" Then
                nextCell.Formula = "=" & ((Time - .Value) * 24 * 60 * 60)
            Else:
                nextCell.Formula = nextCell.Formula & "+" & ((Time - .Value) * 24 * 60 * 60)
            End If
            .Value = ""
        End If
    End With
End If
Application.EnableEvents = True
End Sub

編集

不明で申し訳ありませんが、私の英語はあまり上手ではありません。2回のダブルクリック間の経過時間を計算したい(したがって、既存のデータはありません)。私はこれを行うことでこのタスクを達成することができます:

nextCell.Value = Time - .Value

さらに、これを行うことで複数の入力を合計することができます。

If nextCell.Value = "" Then
    nextCell.Value = Time - .Value
Else:
    nextCell.Value = nextCell.Value + Time - .Value

nextCell.Value問題は、すべての入力を追跡したいのに、すべての新しい入力が上書きされることです。最初のコードサンプルで公開されている式()を使用しようとし=t1+t2ましたが、ダブルクリックしても結果が得られません。


編集

ストップウォッチを作ろうとしています。私の目標は、タスクに費やされた時間を計算することです。物事をさらに明確にするために、これが私がやろうとしていることです。

  1. 2つのセル:A1とB1
  2. A1をダブルクリックします
  3. A1値:現在時刻
  4. A1をダブルクリックします
  5. B1式: "="&(現在の時刻-A1値)
  6. A1値:空
  7. 2、3、4を繰り返す
  8. B1式:B1式& "+"&(現在の時刻-A1値)
  9. 2、3、4を繰り返す
  10. 等々...
4

3 に答える 3

2

私はついに問題が私が働いている特定の言語から来ていることを理解しました。私は単に置き換えましFormulaた、FormulaLocalそして今それは働きます!追加として、(Time - .Value) * 1経過時間を対応する10進値に変換できます。みんなに感謝します:)

于 2013-02-01T09:25:42.253 に答える
1

Excelの日付は、1900年1月1日からの日数として内部に保存されます。
したがって、1日=1。
したがって、1時間=1/24。
したがって、時間を10進数で表すには、24 * 60*60を掛けます。


編集:セルの値を
参照するときnextCell.Valueの代わりに、次のように参照しますnextCell.FormulanextCell.Formula = nextCell.Formula & "+" & (Time - .Value)

于 2013-01-31T10:01:09.313 に答える
1

あなたが何を求めているのかまだ理解するのは難しいですが、ここに試してみてください...

次のバージョンは基準時間を設定し、その後のダブルクリックごとにそれ以降の累積時間が表示されます。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
On Error Resume Next
Dim rng As Range
Set rng = Range("chrono")
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, rng) Is Nothing Then
    Application.EnableEvents = False
    Cancel = True 'stop the edit mode
    With Target
        Dim nextCell As Range
        Set nextCell = ActiveCell.Offset(0, 1)
        If .Value = "" Then
            nextCell.Formula = ""
            .Value = Time
        Else:
            If nextCell.Formula = "" Then
                nextCell.Formula = "=" & Round((Time - .Value) * 24 * 60 * 60, 2)
            Else:
                nextCell.Formula = nextCell.Formula & "+" & _
                    Round(((Time - .Value) * 24 * 60 * 60) - nextCell.Value, 2)
            End If
'            .Value = ""  'this commented line can be deleted - we'll use the base time
        End If
    End With
End If
Application.EnableEvents = True
End Sub

基準時刻を設定すると、変更されません。次に、nextCell数式は、増分時間差を追加するだけです。
元。= 2 + 4 + 1 + 0 + 7
各値は、最後のダブルクリックからの秒数です。

于 2013-01-31T17:18:25.087 に答える