在我的非工作示例中,我使用单元格C5作为单元格来输入值。 我想要做的是:每次在单元格C5中输入新值时,该值应该从A1开始存储在A列中。
(例如:我输入数字1.205 - 它存储在A1中,然后我输入数字1.572 - 它存储在A2中,依此类推。)
我知道我的方法可能远非正确,所以任何帮助都表示赞赏。我已经尝试了几种不同的方法来实现这一点,但我无法使其工作,我已经实现的最大值是能够存储到A列的第2行。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim SourceCell As Range
Dim CheckCell As Range
Dim I As Integer
I = 1
Set SourceCell = Range("C5")
Set CheckCell = Range("A" & I)
If IsEmpty(CheckCell) Then
CheckCell.Value = SourceCell
ElseIf Not IsEmpty(CheckCell) Then
I = I + 1
Set CheckCell = Range("A" & I)
CheckCell.Value = SourceCell
End If
End Sub
答案 0 :(得分:1)
您只需要检查更改的单元格是否为C5,如果是,则查找A列中最后使用的单元格并写下面的值:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$5" Then 'check if changed cell is C5
Dim lRow As Long
lRow = Range("A" & Cells.Rows.Count).End(xlUp).Row 'find last used row in column A
Application.EnableEvents = False 'prevent triggering another change event
Cells(lRow + 1, "A").Value = Target.Value 'write value in column A
Application.EnableEvents = True
End If
End Sub
请注意,我添加了Application.EnableEvents = False
以防止通过将值添加到A列来触发另一个Change
事件。
注意:我建议always use Long
instead of Integer
使用它进行行计数。 Excel有比Integer更多的行。
答案 1 :(得分:0)
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim tgt As Range
Set tgt = Range("C5")
If Intersect(Target, tgt) Is Nothing Then Exit Sub
Application.EnableEvents = False
Cells(LastRow, 1) = Target.Value
Application.EnableEvents = True
End Sub
Function LastRow(Optional ByVal ws As Worksheet = ActiveSheet, Optional ByVal col As Variant = "A") As Long
With ws
LastRow = .Cells(.rows.Count, col).End(xlUp).Row
End With
End Function