在数据扩展时自动复制公式

时间:2011-03-31 09:55:44

标签: excel vba worksheet-function

全部,我有大量的数据,每周更新两次。数据集不断缩小和增长。 我的问题是,虽然我很容易手动删除或扩展使数据可用的公式,但我希望自动化该过程。 公式涵盖10列。

好的 - 需要帮助,我似乎无法绕过工作表_转换 - 请帮忙。

工作表名为“data”。

我正在使用标题为“任务号”的Col A来建立公式的扩展。

公式为cols Y to AJ。

我想要的只是将自己扩展到最后一行的公式 - 听起来很简单??????

目前数据涵盖30,000行,

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

在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

请帮助(再次)

2 个答案:

答案 0 :(得分:2)

我可以想到两种方法,一种是直接使用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,“”)。使用此公式,您可以将公式复制到整个列中,以防在没有数据的情况下显示任何内容。
    • 优点:易于实施
    • 缺点:根据您的公式,计算时间可能会很长

<强> VBA:

  • 使用Worksheet_Change(),一旦数据在工作表中发生更改,您就可以实现例程来更新公式。
    • 优点:需要最低限度的VBA知识(如果SO中的一个人为您构建代码,几乎没有任何知识)
    • 缺点:如果您不了解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

答案 1 :(得分:0)

我认为此片段会对您有所帮助。它假定您分别为数据列和公式列之前的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