Nechápem, prečo nechceš pracovať s Excelom normálnym spôsobom. To, že máš v jednej bunke základnú hodnotu, v druhej percento a v tretej vypočítanú hodnotu, je najlepší spôsob, ako to riešiť.
Pridaná hodnota takéhoto makra je nulová. Okrem toho, že používateľ musí povoliť makrá, aby mu to vôbec fungovalo, úplne zbytočne prichádzaš aj o možnosť Undo.
Keď už to chceš tak veľmi riešiť makrom, tak:
1. Vyhoď celý modul s funkciami CalculatePercentage a SetNewBase.
2. Uprav funkciu Workbook_Open v ThisWorkbook na:
Private Sub Workbook_Open()
    Sheet1.Initialize
End Sub3. Do Sheet1 vlož nasledovný kód:Private aPercentageNumbers() As PercentageNumber
Private Type PercentageNumber
    PercentageAddress As String
    NumberAddress As String
    BaseNumber As Variant
End Type
Public Sub Initialize()
    Dim aIndex As Integer
    
    ReDim Preserve aPercentageNumbers(1 To 2)
    
    With aPercentageNumbers(1)
        .PercentageAddress = "P16"
        .NumberAddress = "M16"
    End With
    
    With aPercentageNumbers(2)
        .PercentageAddress = "P17"
        .NumberAddress = "M17"
    End With
    
    For aIndex = LBound(aPercentageNumbers) To UBound(aPercentageNumbers)
        With aPercentageNumbers(aIndex)
            .BaseNumber = Range(.NumberAddress) / (1 - Range(.PercentageAddress))
        End With
    Next aIndex
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim aIndex As Integer
    Application.EnableEvents = False
    For aIndex = LBound(aPercentageNumbers) To UBound(aPercentageNumbers)
        With aPercentageNumbers(aIndex)
            If Not Intersect(Target, Range(.PercentageAddress)) Is Nothing Then
                Range(.NumberAddress).Value = .BaseNumber * (1 - Range(.PercentageAddress))
            End If
            If Not Intersect(Target, Range(.NumberAddress)) Is Nothing Then
                .BaseNumber = Range(.NumberAddress)
                Range(.PercentageAddress).Value = 0
            End If
        End With
    Next aIndex
    Application.EnableEvents = True
End Sub4. Buď ručne spusti makro Initialize, alebo zošit ulož, zatvor a otvor.