【问题标题】:Sensitivity Analysis Excel Macro灵敏度分析 Excel 宏
【发布时间】:2017-06-17 03:26:17
【问题描述】:

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

所以在下面的示例中,我将 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

【问题讨论】:

  • 那么您是否尝试执行For x = -0.1 To 0.1 Step 0.05 之类的循环和For y = -0.15 To 0.15 Step 0.05 之类的另一个循环?
  • 啊——是的!而已。我需要为此做一个循环。

标签: vba excel


【解决方案1】:

通过使用一些循环,您将能够填充整个表格:

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 具有执行此类操作的内置功能(根据其他地方执行的计算填充表格),但我认为我从未使用过它。

【讨论】:

    【解决方案2】:

    我并不完全清楚你的意思或你想要做什么,但作为开始你可以稍微优化你的代码:

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

    这里我已经摆脱了选择、复制和粘贴……直接说目标范围的值与你最初复制的值相同。

    【讨论】:

    • 是的,我不确定我是否解释得那么好。基本上,我附上的表格一开始是空白的,然后需要填充每个变体,-10% 和 -15%,-10% 和 -10% 等等。这些百分比与电子表格中操纵定价、数量等的其他区域相关联……(销售额增加 10%,减少 10% 等……)。然后,这些场景中的每一个都会重新计算 NPV/IRR。因此,范围 (c52, c57) 在所有这些值之间循环以填充敏感度表。这有帮助吗?也许这太难解释了。
    • 只需逐个处理每个部分 - 您可以使用绝对引用填充范围,基本上只需编写一个您可以拖动填充的 excel 公式......例如如果您上面的表格在第 1 行和 A 列中有百分比,则表格范围将为 B2:F8。要填充将两者相乘,VBA 代码将是: Range("B2:F8").Formula = ("=$A2*B$1") 试试看,看看接下来需要做什么。
    猜你喜欢
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 2011-01-30
    相关资源
    最近更新 更多