Excel 数据扩展时自动复制公式
大家好,我有大量数据,每周更新两次。数据集不断缩小和增长。 我的问题是,尽管手动删除或扩展使数据可用的公式对我来说很容易,但我希望自动化这个过程。 公式包括10列 好的-需要帮助,我只是好像不能让我的头转过来-请帮助 工作表名为“数据” 我正在使用标题为“任务编号”的列A来扩展公式 这些公式的单位是Y到AJ 我只想让公式扩展到行中的最后一个条目-听起来很简单 目前数据覆盖30000行 还有一件事,数据是使用复制粘贴宏导入到电子表格中的,这是造成我的问题的部分原因吗 在13时30分插入 这是我试过的Excel 数据扩展时自动复制公式,excel,vba,worksheet-function,Excel,Vba,Worksheet Function,大家好,我有大量数据,每周更新两次。数据集不断缩小和增长。 我的问题是,尽管手动删除或扩展使数据可用的公式对我来说很容易,但我希望自动化这个过程。 公式包括10列 好的-需要帮助,我只是好像不能让我的头转过来-请帮助 工作表名为“数据” 我正在使用标题为“任务编号”的列A来扩展公式 这些公式的单位是Y到AJ 我只想让公式扩展到行中的最后一个条目-听起来很简单 目前数据覆盖30000行 还有一件事,数据是使用复制粘贴宏导入到电子表格中的,这是造成我的问题的部分原因吗 在13时30分插入 这是我试过
Sheets("data").Select
Bot = Range("A3").End(xlDown).Row
Range("Y30000", "AJ30000").Select
Range("Y30000", "AJ30000").Copy
Selection.AutoFill Destination:=Range("Y30001" & Bot &, ":AJ30001" & Bot),
Type:=xlFillDefault
请(再次)提供帮助。我可以想出两种方法,一种是直接使用Excel,另一种是使用VBA 测试场景: 假设A列和B列包含变量数据,C列和D列包含公式(一旦您在后台登录,包含公式的列的数量将不重要) 此外,我们在C列中的公式为=A+B,在D列中的公式为=A-B(C1=A1+B1,D1=A1-B1等) Excel:
- 在公式中添加一个测试,以检查a列中是否有任何值。如果没有值,我们将不在单元格中添加任何信息。示例:C1=IF(LEN(A1)>0,A1+B1,”)/D1==IF(LEN(A1)>0,A1-B1,”)。使用此公式,您可以将公式复制到整个列中,如果不存在数据,则不会显示任何内容。
- 优点:易于实施
- 缺点:根据您的公式,计算时间可能会很长
- 您可以使用工作表_Change()实现一个例程,以便在工作表中的数据更改后更新公式。
- 优点:需要最少的VBA知识(如果在SO中有人为您构建代码,则几乎没有)
- 缺点:如果您不了解VBA,则可能需要其他人来实现
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lCellCount As Long
Dim lFormulaCount As Long
Dim oWorkSheet As Excel.Worksheet
Dim oRangeSource As Excel.Range
Dim oRangeDest As Excel.Range
'Define sheet
Set oWorkSheet = Worksheets("Data")
'Count how many entries we have in our dataset now
lCellCount = oWorkSheet.Range("A1").End(xlDown).Row
'Count how many formulas we have to proper delete
lFormulaCount = WorksheetFunction.CountA(oWorkSheet.Columns("Y"))
If lCellCount <> lFormulaCount Then
'I assume we'll have at least one line in our report...
If lFormulaCount > 2 Then oWorkSheet.Range("Y3:AJ" & lFormulaCount).ClearContents
Set oRangeSource = oWorkSheet.Range("Y2:AJ2")
Set oRangeDest = oWorkSheet.Range("Y2:AJ" & lCellCount)
oRangeDest.Formula = oRangeSource.Formula
End If
End Sub
Private子工作表\u更改(ByVal目标作为范围)
暗淡的lCellCount与长
暗淡的颜色和长的颜色一样
将工作表调整为Excel.工作表
淡橙色资源为Excel.Range
暗橙色显示为Excel.Range
'定义工作表
设置工作表=工作表(“数据”)
'计算数据集中现在有多少个条目
lCellCount=oWorkSheet.Range(“A1”).End(xlDown).Row
'计算需要适当删除的公式数
lFormulaCount=WorksheetFunction.CountA(oWorkSheet.Columns(“Y”))
如果lCellCount lFormulaCount,则
“我想我们的报告中至少会有一行。。。
如果lFormulaCount>2,则为oWorkSheet.Range(“Y3:AJ”&lFormulaCount.ClearContents
设置oRangeSource=oWorkSheet.Range(“Y2:AJ2”)
设置OrangeTest=oWorkSheet.Range(“Y2:AJ”和lCellCount)
OrangeTest.Formula=oRangeSource.Formula
如果结束
端接头
Rgds我认为这段代码将对您有所帮助。它假定您为数据列和公式列前面的hdr单元格分别指定了一个范围名称(假设hdr行永远不会被删除)。可以调整以处理用于定位要操作的范围的其他方案
' DA1 = 1st data row, FR1 = first formula row
Dim rgDA1 As Range: Set rgDA1 = Range("HDR_ROW_FOR_DATA").Offset(1)
Dim rgFR1 As Range: Set rgFR1 = Range("HDR_ROW_FOR_FORMULAS").Offset(1)
Dim ws As Worksheet: Set ws = rgDA1.Worksheet
' define range rgDAT to cover ALL data rows, and define rgFRM w the same# rows
Dim rgDAT As Range: Set rgDAT = rgDA1.Resize(1 + ws.Rows.Count - rgDA1.Row)
Set rgDAT = Intersect(rgDAT, ws.UsedRange)
Dim rgFRM As Range: Set rgFRM = rgFR1.Resize(rgDAT.Rows.Count)
' now copy the 1st formula row to the other rows
rgFR1.Select
Selection.Copy
rgFRM.Select
ws.Paste
Application.CutCopyMode = False
谢谢-现在就开始尝试,我有一点VBA知识,所以我将尝试工作表的更改。这是我已经尝试过的工作表(“数据”)。选择Bot=Range(“A3”)。结束(xlDown)。行范围(“Y30000”,“AJ30000”)。选择范围(“Y30000”,“AJ30000”)。复制选择。自动填充目标:=Range(“Y30001”&Bot&,“:AJ30001”&Bot),类型:=xlFillDefaultHi@SteveW1968,我在回答中添加了一个代码。。。您能检查一下吗?它工作正常-谢谢,它突出显示了一个引导问题,因此延迟返回。我发现我在A300052的原始数据中有一个流氓手机!非常感谢。因此,通过运行上面的VB,我认为我的数据已经结束,因此强调了我们的朋友Jean François Corbett教授的流氓细胞,我们应该尽可能避免使用复制粘贴。