EXCEL表格某一个单元格内容是不断自动更新的,如何把这些数据按顺序记录到另一列?

自动更新的是来自外部数据!外部数据,所以用每秒钟记录一次的方法!
Sub excute_record()  '放在模块中
   Cells(Rows.Count, "j").End(xlUp).Offset(1, 0).Value = Range("e3").Value     'e3是引用外部数据的单元格,J列是用于储存数据的。
   Application.OnTime Now + TimeValue("0:00:01"), "excute_record"     '用OnTime方法实现每秒执行一次
End Sub这是我给的思路,希望大神能给一个完整的代码方案!或者其它思路也可以,只要可以把自动更新的内容保存到一列即可!E3的内容是来自于外部并且不断更新的,希望把E3更新过的数据按顺序保存到J列

在Excel中,如果某个单元格的内容会不断自动更新,并且你想要将这些更新的数据按顺序记录到另一列中,有几种方法可以达到这个目的:
方法一:使用公式
如果更新的单元格位于列A,比如A1,你可以在B1单元格使用以下公式来捕捉A1的更新:
excel复制代码1=IF(A1<>"", A1, B1)

这个公式的意思是,如果A1非空,就显示A1的值;否则,沿用B1的值。这样,只要你在A1处输入新的值,B1就会自动更新。然后,你可以拖动或填充句柄将此公式应用到B列的其他单元格。
方法二:使用数据透视表
如果数据量非常大,或者更新频率很高,使用数据透视表可能是更好的选择。你可以将源数据设置为数据透视表,然后将更新的单元格添加到行标签或列标签中,这样就能实时展现每次更新的信息。
方法三:使用VBA宏
如果你熟悉VBA,可以写一个简单的宏来监测特定单元格的更新,并将其记录到另一列中。这种方法更为复杂,但是可以实现非常灵活的自动化处理。
以下是一个简单的VBA示例,它会在A1单元格发生变化时将值记录到B1单元格:
vba复制代码1Private Sub Worksheet_Change(ByVal Target As Range)2 If Not Intersect(Target, Me.Range("A1")) Is Nothing Then3 Application.EnableEvents = False4 Range("B1").Value = Range("A1").Value5 Application.EnableEvents = True6 End If7End Sub

将这段代码粘贴到VBA编辑器中,并保存在含有你想要监控的单元格的工作表的模块里。
方法四:使用Excel表格功能
创建一个Excel表格,其中包含不断更新的单元格和需要记录数据的列。表格具有自动扩展的特性,因此,当你输入新的数据时,表格会自动添加新行。
在表内,你可以使用类似于方法一中的公式来捕获和传递数据。
选择哪种方法取决于你的具体需求和偏好。对于简单的数据记录,方法一和方法四通常足够有效。如果涉及到大量数据分析和汇总,方法二可能更为适合。而方法三,即使用VBA宏,则适用于需要高度自动化和定制功能的场景。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-03-30

Ontime可以实现,但高频刷新太消耗内存了。

如果E3是通过公式计算,可以借鉴我之前一个Calculate事件的代码。

如果E3是获取外部数据,我没尝试过可不可用,或者Calculate改为Change?


首先在ThisWorkbook下插入代码:

'Sheets(1)改为你对应那个工作表

Private Sub Workbook_Open()

Public Temp As Variant

Temp = Sheets(1).[E3].Value

End Sub


再到对应工作表下插入代码:


Private Sub Worksheet_Calculate()

If [E3].Value <> Temp Then

Cells(Rows.Count, "j").End(xlUp).Offset(1, 0).Value = [E3].Value

End If

End Sub

追问

大神代码呢?

追答

代码修改在回答你试试看。
如果不能触发,我有个思路,可以用一个单元格公式比如E2=E3
这样你再把代码里面E3都改成E2

人呢?行不行吭气啊。

追问

在床上睡觉呢!不知道可以不可以😄

追答

额~好吧~加个关注好联系

追问

大神这个可以

就是可不可以把最后出现的数字放到J列的最上面,现在是放到了下面

追答

没搞懂你想法,不停刷新J列肯定是从上往下不停往最下面一行空格填入新数据。难道你要覆盖掉之前的数据?要不怎么填最上面?

追问

可以了弄好了

还有,第一个代码根本不需要,只有第二个代码就好了!

追答

嗯嗯,好的,谢谢关注

追问

气死我了!卸载一个软件后,所有的表格都没有了!

本回答被提问者和网友采纳
第2个回答  2022-03-18

'vba change事件

Private Sub Worksheet_Change(ByVal Target As Range) 

    If Target.Address(0, 0) <> "E3" Then

        Exit Sub '当单元格地址不为e3时退出过程

    Else

        Cells(Rows.Count, "j").End(xlUp).Offset(1) = [e3] 

        '否则把e3的值赋值给j列

    End If

End Sub

第3个回答  2020-03-30
Sub excute_record() '放在模块中
[J1].Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Cells(1, "J") = [E3]
Application.OnTime Now + TimeValue("0:00:01"), "excute_record"
End Sub
这是你上次提问,E3更新的数据始终在J1。
'----------------------------------------------------
下面是E3更新的数据在J列最后
Sub excute_record() '放在模块中
Cells(range("j65536").end(xlup).row+1, "J") = [E3]

Application.OnTime Now + TimeValue("0:00:01"), "excute_record"
End Sub
第4个回答  2020-03-30
不知道表二B列的数字是什么意思,按你的描述表二有一行就可以得到所有月份和类别的结果了。
表二E3公式:
=SUMPRODUCT((MONTH(SHEET1!$D$2:$D$1000)=1)*(SHEET1!$E$2:$E$1000=E2)*SHEET1!$C$2:$C$1000)追问

我的意思是E3的数据是来自于外部,并且是不断更新的!如何把E3更新过的所有数据按顺序保存到J列

相似回答