2017-06-15 603 views
0

下表是一个示例敏感性分析,我希望能够以更专业的方式进行更新(代码方式)。我已经能够录制一个宏,并修改它有点想知道(我敢肯定),如果有更干净的方式来做到这一点。每个%都会影响电子表格中显示新值的某个部分。我将这两个新值粘贴到一个表格中(一次一个单元格块)。敏感性分析Excel宏

因此,在下面的示例中,我将2个修改单元设置为-10%/ -15%,并将新值(NPV/IRR)复制到单元块中。然后继续查看%的列表并粘贴硬编码的值。所以只是想知道是否有一种方法可以在设定的范围内进行循环(在灵敏度变化的情况下)。

Range("C52").Value = "-10%" 
    Range("C57").Value = "-15%" 
     Range("E54:E55").Select 
      Selection.Copy 
      Range("L48").Select 
      Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
      :=False, Transpose:=False 

Sensitivity Analysis

+0

那么你是否试图做一个循环,例如'For x = -0.1 To 0.1 Step 0.05'和另一个循环如'For y = -0.15 To 0.15 Step 0.05'? – YowE3K

+0

啊 - 是的!而已。我需要为此做一个循环。 –

回答

0

利用一些循环,你将能够填充你的整个表:

Sub test() 
    Dim x As Long 
    Dim y As Long 

    'Loop across each column 
    For x = 0 To 4 
     'Use a value which is 5% higher each time, starting from -10% 
     Range("C52").Value = x * 0.05 - 0.1 
     'or possibly 
     'Range("C52").Value = Cells(47, 12 + x).Value 

     'Within each column, loop across each row 
     For y = 0 To 6 
      'Use a value which is 5% higher each time, starting from -15% 
      Range("C57").Value = y * 0.05 - 0.15 
      'or possibly 
      'Range("C57").Value = Cells(49 + 2 * y, "K").Value 

      'Place the calculated values into the appropriate spots in the table 
      Cells(48 + 2 * y, 12 + 1 * x).Value = Range("E54").Value 
      Cells(49 + 2 * y, 12 + 1 * x).Value = Range("E55").Value 

     'Repeat for next row in this column 
     Next 

    'Repeat for next column 
    Next 

End Sub 

注:我认为Excel有一个内置的功能做这样的事情(填充表的基础上计算在其他地方演出),但我不认为我曾经使用它。

0

我不完全清楚你的意思是什么,或者你正在试图做的,但作为一个开始,你可以有所优化代码:

Range("C52").Value = "-10%" 
Range("C57").Value = "-15%" 
Range("L48:L49").Value = Range("E54:E55").Value 

这里我已经摆脱了选择,复制和粘贴......并且直接说目标范围的值与您最初复制的值相同。

+0

是的,我不确定我是否解释得那么好。基本上,我附加的表格将从空白处开始,然后它需要填充每个变化,-10%和-15%,-10%和-10%等。这些百分比与电子表格中其他可以操纵定价,数量等的区域相关联(增加10%的销售额,减少10%等等)。然后,这些情景中的每一个重新计算NPV/IRR。 因此,范围(c52,c57)在所有这些值之间循环以填充灵敏度表。这有帮助吗?也许这太难解释了。 –

+1

只需逐个处理每个部分 - 您可以使用绝对引用来填充范围,基本上只需编写一个要拖动以填充的excel公式即可。如果您的表格具有第1行和第A列的百分比,则表格范围将为B2:F8。为了将两者相乘,VBA代码应该是:Range(“B2:F8”)。Formula =(“= $ A2 * B $ 1”)试试看看接下来需要做什么。 – jamheadart