2011-08-25 179 views
0

我有一个表格,它具有的行数是未知的。每次用户将一个项目输入到此表格的列A中时,我都希望表格中的其他列动态获取填入刚刚在列A中输入的项目的公式。EXCEL/VBA - 将公式动态插入单元格

我不想简单地将公式复制到列B,C,D等公式中,因为工作表中的行数未知。

有没有任何有效的方法来做到这一点?

我在VBA的onCalculate和onChange事件中编写代码的尝试看起来非常低效或者导致了永久循环。

+0

得到它.... 私人小组Worksheet_Change(BYVAL目标作为范围) 如果Target.Column = 3然后 Application.ScreenUpdating =假 应用。计算= xlCalculationManual Sheet2.Cells(Target.Row,5).Formula = “= XXX(” “XXX” “” &Target.Address& “E5)” Application.ScreenUpdating =真 Application.Calculation = xlCalculationAutomat ic End If End Sub – stan

+0

如果您愿意,您可以自己回答。 –

回答

1

下面是一个示例,将在空白公式填B,C和d时,您的选择更改:

在的ThisWorkbook:

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) 
    Dim oSh As Worksheet, oUsed As Range, oRng As Range 

    Set oSh = Sh 
    Set oUsed = oSh.UsedRange.Columns("B") 

    'only add to blank formulas 
    Set oRng = oUsed.Find("", LookIn:=xlFormulas) 

    Do While Not oRng Is Nothing 
     'B formula 
     oRng.Offset(, 0).FormulaR1C1 = "=RC[-1] + 100" 
     'C formula 
     oRng.Offset(, 1).FormulaR1C1 = "=RC[-1] + 100" 
     'D formula 
     oRng.Offset(, 2).FormulaR1C1 = "=RC[-1] + 100" 
     Set oRng = oUsed.Find("", oRng, xlFormulas) 
    Loop 
End Sub 

这部作品工作表在工作簿中,因此您可能需要测试您所在的工作表。

+0

我会尽全力检查在正确的列中发生的变化,以加速Excel。将你的代码封装在If Not Intersect(Target,oUsed)是Nothing Then .... End If – RonnieDickson

+0

@RonnieDickson - 我想要做类似的事情,但Target只指定当你从一个单元格移动到另一个单元格时目标单元格是什么。所以如果我从单元格A1移动到单元格B25,Target的地址是B25,因此它不会出现在相交处......不知道如何只检查A列中的更改。加速它的另一种方法是禁用屏幕更新,但这可能是矫枉过正。 – transistor1

2

如果您使用的是Excel 2007或Excel 2010,请将列表范围定义为列表会自动做到这一点!
的最佳宏是没有宏

+0

+1这是处理此问题的最佳方法 – JMax