1

私はVBAは初めてですが、数式はかなり得意です。タイムスタンプの問題に取り組んでいます。E3 の検証リストから選択すると、F3 にタイムスタンプが表示されるようにコードを記述しました。これは、E3 から始まる E 列のすべてのセルに当てはまります。500 から 15000 のレコード (行) があります。私が使用しているコードを以下に貼り付けます。ご提案いただきありがとうございます。

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Column = 5 And Target.Row = 3 Then
    If Target.Value = "" Then
      Cells(3, 6).Value = ""
    Else
      Cells(3, 6).Value = Format(Now, "mm/dd/yyyy HH:mm:ss")
    End If
  End If
End Sub
4

2 に答える 2

3

どうですか?

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Column = 5 And Target.Row >= 3 Then
  i = Target.Row
    If Target.Value = "" Then
  Cells(i, 6).Value = ""
Else
  Cells(i, 6).Value = Format(Now, "mm/dd/yyyy HH:mm:ss")
End If
 End If
End Sub
于 2013-11-11T19:58:47.267 に答える
0

これを行う最も速い方法は、範囲全体を選択し、配列を使用して一度値を設定することです。これは、複数のセルが含まれる.Valuea のプロパティで行われます。Range

Private Sub SetDate(ByVal Target As Range, Optional bybal RowCount as Long = 0)
    Dim i as Long
    ' Check if row count needs to be found
    If RowCount = 0 Then
        'Count non-empty rows from target down
        RowCount = Target.Worksheet.Range(Target, Target.End(xlDown).Rows.Count
    End If
    ' Target entire range of cells that are going to be affected
    Set Target = Target.Resize(RowCount, 6)
    Dim vals() as Variant 
    ' Read values from worksheet
    vals = Target.Values        
    ' Make changes in memory here
    For i=1 to RowCount
        if IsEmpty(vals(i,1)) Then
            vals(i, 6) = vbNullString
        Else
            vals(i, 6) = Format(Now, "mm/dd/yyyy HH:mm:ss")
        End If
    Next i
    ' Write values into worksheet
    Target.Value = vals
End Sub
于 2013-11-12T13:13:57.880 に答える