Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Excel - percentá resp. zobrazenie vysledku v bunke povodnej hodnoty

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 Sub
3. 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 Sub
4. Buď ručne spusti makro Initialize, alebo zošit ulož, zatvor a otvor.

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny