数据展开时自动复制公式

大家好,我有大量的数据每周更新两次。 数据集不断缩小并持续增长。 我的问题是,虽然我很容易手动删除或扩展公式,使数据可用,我想自动化的过程。 这些公式涵盖了10列。

好的 – 需要帮助,我似乎不能让我的头圆Worksheet_change – 请帮助。

工作表被命名为“数据”。

我正在使用Col A标题为“任务号”来扩大公式的基础。

公式是AJ到Y的列。

我想要的是公式扩大自己最后进入行 – 听起来容易??????

目前数据覆盖30,000行,

另一件事,数据是使用复制和粘贴macros导入到电子表格,这是否部分导致我的问题?

在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。

testing场景:

让我们认为,我们有列A和B与可变数据,然后列C和D与公式(一旦你在幕后login,具有公式的列的数量将不重要)。

此外,C列的公式为A + B,D列为AB(C1 = A1 + B1,D1 = A1-B1等)。

Excel中:

  • 在公式中join一个testing来检查A列中是否有任何值。如果没有值,我们不会在单元格中放置任何信息。 例如:C1 = IF(LEN(A1)> 0,A1 + B1,“”)/ D1 = = IF(LEN(A1)> 0,A1-B1,“”)。 使用此公式,您可以将公式复制到没有数据存在的情况下不显示任何内容的整个列。
    • 优点:易于实施
    • 缺点:计算时间可能需要很长的时间取决于你的公式

VBA:

  • 通过使用Worksheet_Change(),您可以实现一个例程,以便在工作表中的数据更改后更新公式。
    • 优点:需要最小的VBA知识(如果SO中的某个人为您构build代码,则几乎不需要)
    • 缺点:如果你不了解VBA,你可以依靠别人去实现。

希望它能指导你解决你的问题!

编辑:

这样做的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 

RGDS

我认为这个片段会帮助你。 它假设你给数据列和公式列之前的hdr单元格分别命名(假定hdr行不会被删除)。 可以调整处理其他scheme来定位范围进行操作。

 ' 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