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

Ahojte,

prosím Vás v MS Excel
1. do bunky A1 zadám hodnotu napr.: 55€
2. do bunky A6 zadám percentá o ktoré chcem hodnotu A1 ponížiť napr.: 13 percent
3. výsledok je 47,85 €
4. tento výsledok by som chcel zobraziť v bunke A1 bez toho aby som ten výsledok po prepočte niekde inde zobrazoval.

Neviem či sa chápeme ale proste ak mám nejakú hodnotu v bunke A1 a keď tú hodnotu budem chcieť pomocou bunky A6 ponížiť o nejaké percento, aby mi tú A1 hodnotu automaticky prepočítalo.

Ďakujem za radu.

Předmět Autor Datum
Spustíš makro: Sub Macro1() Range("A1").Value = Range("A1").Value - (Range("A1").Value * Range("A6"…
Moas 18.01.2013 07:58
Moas
Nedalo by sa ti to ukázať na konkrétnom príklade resp. v ukážkovom súbore?
Ondrej Jasenek 18.01.2013 08:25
Ondrej Jasenek
Jinak než makrem mě to nenapadá.
Moas 18.01.2013 08:34
Moas
No toto nie je zlé ale čo v prípade že tú cenu chcem zmeniť napr. na pôvodnú? Keď tam zadám 0 percen…
Ondrej Jasenek 18.01.2013 10:50
Ondrej Jasenek
Doplnis do makra podmienku if A6 = 0 then A1 = 55. Syntax nie je presna, ja makra nerobim, ale v pri…
fleg 18.01.2013 11:25
fleg
Ahoj, lenže to číslo nebude stále 55 €
Ondrej Jasenek 18.01.2013 11:34
Ondrej Jasenek
Je potřeba mít jasno v tom, pro kolik čísel toto řešíme. Prakticky omezeni nejsme, můžem vytvořit tř…
Moas 18.01.2013 11:40
Moas
mam jasne akurat dve bunky! A1 - kde zadavam lubovolne cislo resp. hodnotu v € a druhu bunku kde zno…
Ondrej Jasenek 18.01.2013 11:52
Ondrej Jasenek
Takto sa s Excelom nepracuje, zbytočne si komplikuješ život.
los 18.01.2013 11:56
los
Ufff, takže takto?
Moas 18.01.2013 12:57
Moas
Presne! len mám jeden problémik a to je nasledovne. Pri otvorení súboru mi to dáva chybu: Run-time…
Ondrej Jasenek 18.01.2013 15:13
Ondrej Jasenek
Tak klikni na debug a uvidíš kam tě to zavede. Pravděpodobně bude zrada někde v ThisWorkbook
Siki83 18.01.2013 15:34
Siki83
To už som medzičasom vyriešil ano bolo to tam ale aký zápis bude pri viacerých takýchto kombinácii?…
Ondrej Jasenek 18.01.2013 15:45
Ondrej Jasenek
Nechápem, prečo nechceš pracovať s Excelom normálnym spôsobom. To, že máš v jednej bunke základnú ho…
los 18.01.2013 17:30
los
Funguje mi to v CZ Excel 2007 a EN Excel 2010... na vícero počítačích. Těžko mi to debugovat.
Moas 18.01.2013 18:45
Moas
Moas - veľmi si mi pomohol veľmi pekne ďakujem! los, Siki83 - Vám tiež ďakujem za pomoc ale potrebu…
Ondrej Jasenek 19.01.2013 01:24
Ondrej Jasenek
Jestli ti to hází pořád nějakou chybu, tak mi dej verzi Excelu, co máš a ještě se na to podívám. poslední
Moas 19.01.2013 20:57
Moas

No toto nie je zlé ale čo v prípade že tú cenu chcem zmeniť napr. na pôvodnú? Keď tam zadám 0 percent neurobí to nič.
Skôr by som potreboval spôsob kde môžem "operovať" s percentami tak ako si mi ukázál, ale v prípade že sa potrebujem dostať na počiatočnú hodnotu tak po zadaní 0 percent mi ju ukáže. Proste aby bola v "pamati" stále ta mnou zadaná hodnota vtej bunke.

Ďakujem aj za túto pomoc!

Je potřeba mít jasno v tom, pro kolik čísel toto řešíme. Prakticky omezeni nejsme, můžem vytvořit třeba pole a do toho ta čísla naládovat, i kdyby jich bylo "milion".
Čím víc se ta čísla schovají, tím hůř se budou kdykoliv později upravovat a přepisovat. Opravdu není možné si je např. "odložit" na jiný list sešitu (nebo i do jiného sešitu)?

mam jasne akurat dve bunky! A1 - kde zadavam lubovolne cislo resp. hodnotu v €
a druhu bunku kde znova zadavam lubovolne percenta o ktore chcem tuto cenu ponizit. Ale ked zadam hodnotu percent=0 tak aby mi tam skocila povodna hodnota by som potreboval. Nieco ako cennikova cena s ktorou chcem potom kalkulovat.

Presne!

len mám jeden problémik a to je nasledovne.
Pri otvorení súboru mi to dáva chybu:
Run-time error "1004":
Method "range"of object "_Global" failed

pocítať to počíta, ukladať to ukladá ale niekde je ešte zádrheľ..

To už som medzičasom vyriešil ano bolo to tam ale aký zápis bude pri viacerých takýchto kombinácii?

môžem to zapísať aj takto?

do hárku zadefinovať:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Target.Worksheet.Range("P16")) Is Nothing Then CalculatePercentage
    If Not Intersect(Target, Target.Worksheet.Range("M16")) Is Nothing Then SetNewBase
    
    If Not Intersect(Target, Target.Worksheet.Range("P17")) Is Nothing Then CalculatePercentage
    If Not Intersect(Target, Target.Worksheet.Range("M17")) Is Nothing Then SetNewBase
End Sub

a do module1 zadefinovať:

Public BaseNumber As Variant

Sub CalculatePercentage()
    Application.EnableEvents = False
    Range("M16").Value = BaseNumber - (BaseNumber * Range("P16").Value)
    Application.EnableEvents = True
    If Range("P16").Value = 0 Then Range("M16").Value = BaseNumber

    Application.EnableEvents = False
    Range("M17").Value = BaseNumber - (BaseNumber * Range("P17").Value)
    Application.EnableEvents = True
    If Range("P17").Value = 0 Then Range("M17").Value = BaseNumber
End Sub

Sub SetNewBase()
    BaseNumber = Range("M16").Value
End Sub
Sub SetNewBase1()
    BaseNumber = Range("M17").Value
End Sub

Evidentne keďže sa pýtam to nie je správne zapísané ale neviem kde robím chybu.

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.

Zpět do poradny Odpovědět na původní otázku Nahoru