![当 Excel 中单元格的值发生变化时,将新值添加到表格中](https://linux22.com/image/1571677/%E5%BD%93%20Excel%20%E4%B8%AD%E5%8D%95%E5%85%83%E6%A0%BC%E7%9A%84%E5%80%BC%E5%8F%91%E7%94%9F%E5%8F%98%E5%8C%96%E6%97%B6%EF%BC%8C%E5%B0%86%E6%96%B0%E5%80%BC%E6%B7%BB%E5%8A%A0%E5%88%B0%E8%A1%A8%E6%A0%BC%E4%B8%AD%20.png)
我正在寻找大概是 VBA 脚本。基本上情况是这样的:我有一张表格,可以自动从 API 获取值,因此每当我更新表格时,值都会更改。我想要做的是将某些单元格中的新值添加到另一张表格上的表格中。因此,每当值更改时,新值就会添加到某一列的第一个空行中。我想跟踪历史数据以跟踪这些值随时间的变化。一个不错的额外功能是将该特定更新的确切时间添加到同一行的不同列中,但我也可以手动执行此操作。
答案1
您可以使用这些宏来跟踪特定数据范围的变化。
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:B100")) Is Nothing Then
Call Master
End If
End Sub
笔记:
- 此代码将运行微距(大师)当范围内的任何单元格值发生变化时。
输入下面编写的 VBA 代码作为标准模块。
此代码将把范围中的每个新/更改值复制
A1:B100
到新工作表中MasterSheet
,而不会覆盖旧记录。Sub Master() Dim sourceSheet As Worksheet Dim sourceRange As Range Dim sourceRows As Integer Set sourceSheet = Worksheets("Sheet1") sourceRows = WorksheetFunction.CountA(sourceSheet.Range("A:A")) Set sourceRange = sourceSheet.Range("A1:B" & sourceRows) Dim targetSheet As Worksheet Dim targetRange As Range Dim targetRows As Integer Set targetSheet = Worksheets("MasterSheet") targetRows = WorksheetFunction.CountA(targetSheet.Range("A:A")) Set targetRange = targetSheet.Range("A" & targetRows + 1 & ":B" & targetRows + 1 + sourceRows) sourceRange.Copy Destination:=targetRange End Sub
笔记:
- 为了更好地管理数据和文件,我使用了两个宏。
- 宏使用来
COUNTA
计算有多少行正在被使用。 - 如果源表和主表上有列标题,则它们会重复。因此,您可能希望从
sourceRange
开始A2
。
根据需要调整单元格引用和工作表名称。