使用结果有效填充列

时间:2018-04-17 15:17:12

标签: excel vba excel-vba

我试图用变量" ReportedPipeline"填充AO列(从AO2到lastrow),它是根据同一行的列中的值计算的(列O,P,T,U, W)。

虽然我已经能够计算" ReportedPipeline",但我很难有效地将值填充到最后一行。

我创建了一个循环,用于填充AO2中的值,然后将activecell向下移动1行,尽管效率非常低。我已经看过"如何避免在Excel VBA中使用Select"文章虽然无法弄清楚我如何应用它。

我使用的变量:

Dim oppstart As Date            'actual opportunity start
Dim oppend As Date              'actual opportunity end
Dim confidence As Integer       'opportunity confidence
Dim outstanding As Single       'outstanding amount
Dim status As String            'opportunity status - Lost or Open
Dim thisyear As Integer         'value of this year
Dim nextyear As Integer         'value of next year
Dim ReportedPipeline As Single  '(Outstanding amount / The subs' length in months)* months of this sub in this year
Dim monthsdiff As Integer       'How long the full length of the subscription is in months
Dim monthslength As Integer     'Length in months of subscription this year

status = Range("w" & ActiveCell.Row).Value
oppstart = Range("t" & ActiveCell.Row).Value
oppend = Range("u" & ActiveCell.Row).Value
confidence = Range("p" & ActiveCell.Row).Value
outstanding = Range("o" & ActiveCell.Row).Value 

如果有帮助我可以分享完整的代码。

谢谢!

2 个答案:

答案 0 :(得分:0)

你最好在循环中循环,例如:

i = 2 to Range("O" & Rows.Count).End(xlUp).Row
    status = Range("w" & i).Value
    oppstart = Range("t" & i).Value
    oppend = Range("u" & i).Value
    confidence = Range("p" & i).Value
    outstanding = Range("o" & i).Value 

    'Do you calculation here

    Range("AO" & i).Value = Foo 'Foo is the result of you calculation

Next i

为了加快速度你也可以使用:

Application.ScreenUpdating = False

在您的子

的开头

也就是说,如果可以使用公式进行计算,那么在AO列中使用公式可能会更好

答案 1 :(得分:0)

而不是循环遍历范围 - 当数据在Excel和VBA之间传输时,这会对循环的每次迭代产生开销 - 要么简单地使用VBA来填充Excel中的列中的公式(这需要更高效)一次传输)或使用Variant Array一次性将数据导入VBA,在VBA中迭代数组,然后一次性将其发送回Excel。