Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Je možné v Excelu nahradit uvedené makro vzorci (funkcí)?

Dobrý den.
Potřeboval bych v Excelu do skrytého sloupce např. G vložit funkci, kdy po zadání znaku "s" se buňky A3 se po potvrzení Enter vyplní tato buňka plus další dvě předefinovaným textem. Problém je v tom, že nemohu použít makro. Makra tam nejsou povolené. Zkoušel jsem funkce jako jsou Dosadit, Nahradit a další a u všech jsem skončil na tom, že požadovaný text zobrazí v buňce, kde je vzorec. A to nepotřebuji. Potřebuji ten text vložit do určené jiné buňky než kde je vzorec.

Potřeboval bych zadat do buňky např. G3 (popřípadě i třeba H3 a I3) vzorec, který by odpovídal tomu to makru:

If LCase(Range("A3").Value) = LCase("S") Then
    Range("A3").Select
    ActiveCell.FormulaR1C1 = "start"
    Range("B3").Select
    ActiveCell.FormulaR1C1 = "=NOW()"
    Range("C3").Select
    ActiveCell.FormulaR1C1 = "=ROW()"
    Range("A3").Select
End If

Je to vůbec možné vzorci zajistit?

Předmět Autor Datum
Jakmile něco do té buňky napíšeš, tak přijde o vzorec, který je v ní napsaný. Takže to vzorcem nejde…
Wikan 11.11.2016 15:11
Wikan
To vím. Píšu, že vzorec by byl ve sloupci G až I a vyplňoval by text ve stejném řádku., ale ve sloup…
yorg 11.11.2016 15:37
yorg
Vzorec nemůže měnit jiné buňky. Vzorec určuje hodnotu té buňky, ve které je zapsaný.
Wikan 11.11.2016 16:06
Wikan
...ak som dobre pochopil, ak do stĺpca A zadáš "s", tak v stĺpci G sa ti vypíše "start", zároveň do…
robert13 11.11.2016 17:11
robert13
Ne, myslel jsem to přesně tak jak je to v tom makru. Tzn. že vzorce by byly skryté např. ve sloupci…
yorg 11.11.2016 18:48
yorg
To co požaduješ je možné pouze makrem viz Wikan. Robert špatně pochopil tvůj záměr.
Siki83 11.11.2016 19:03
Siki83
nechápem, prečo tam vôbec spomíname nejaké vzorce, keď to nemá nijakú spojitosť. Pokiaľ by som vedel…
robert13 11.11.2016 19:18
robert13
Ten příklad s makrem jsem dal proto, abych to co potřebuji, nemusel složitě vysvětlovat. Jak vidím,…
yorg 11.11.2016 20:26
yorg
Sám som si tiež robil dochádzkový list, ale, samozrejme, s makrami, ktoré mi poskytujú mnohé vymožen…
robert13 11.11.2016 20:44
robert13
Ano, souvisí to s docházkou. Dík za tip, asi tam skutečně dám ten sloupec lenosti. IFy mám rád, hlav…
yorg 11.11.2016 20:58
yorg
Obsah "sloupce lenosti" môžeš ukryť vlastným formátom, o ktorom píšem vyššie (19:18). Stĺpec buniek…
robert13 11.11.2016 21:16
robert13
... Potřebuji ten text vložit do určené jiné buňky než kde je vzorec. Tím jako myslíš, že třeba vzo…
Zdenál 11.11.2016 16:01
Zdenál
Dík za potvrzení, že to nejde. Pokud by ale přece jen někdo zjistil opak, tak bych to jen přivítal.
yorg 11.11.2016 16:04
yorg
Wikan to přece napsal jasně: Vzorec určuje hodnotu té buňky, ve které je zapsaný.
Zdenál 11.11.2016 16:09
Zdenál
Však o tom píšu v dotazu (před odpovědí Wikana): ... a u všech jsem skončil na tom, že požadovaný t…
yorg 11.11.2016 16:39
yorg
Nešlo by si např. otevřít nový sešit, tam si vložit vzorec do řádku A1 =KDYŽ(SLOUPEC(A1)=1;KDYŽ(E1="… poslední
qdj 11.11.2016 22:54
qdj

...ak som dobre pochopil, ak do stĺpca A zadáš "s", tak v stĺpci G sa ti vypíše "start", zároveň do stĺpca H dátum s časom a zároveň do stĺpca I číslo riadka? To samozrejme ide!

Ale to potom nie je to isté ako to, čo uvádzaš v tom makre.
Makro k tomu, čo si teraz napísal (s vynechaním nadbytočného kódu) by vyzeralo takto:

If LCase(Range("A3").Value) = "s" Then
Range("G3") = "start"
Range("H3").FormulaR1C1 = "=NOW()"
Range("I3").FormulaR1C1 = "=ROW()"
Range("G3").Select
End If

Náhradu tohto makra samozrejme ide urobiť len funkciami.

P.S. Musíš si však uvedomiť, že funkcia NOW() je prepočítavaná pri každej zmene v zošite...
To platí nezávisle od toho, či je funkcia zadaná makrom alebo manuálne ...

Ne, myslel jsem to přesně tak jak je to v tom makru. Tzn. že vzorce by byly skryté např. ve sloupci G až I (nebo jen jeden složitější vzorec ve sloupci G pro všechny 3 položky) a roztažené na požadovaný počet řádků. Po napsání "s" ve sloupci A a potvrzení Enter by se "s" přepsalo na "Start" a ve vedlejším sloupci by byl čas a v dalším číslo řádku (jinak pořadí startujícího). Viz přiložený výstřižek (zde omluva, mohl jsem ho zde přidat hned na začátku).

To Now() vím, zde jsem ho uvedl pro jednodušší zadání.

Náhradu tohto makra samozrejme ide urobiť len funkciami.

Mohl bys prosím tě naznačit jak?

nechápem, prečo tam vôbec spomíname nejaké vzorce, keď to nemá nijakú spojitosť.
Pokiaľ by som vedel, o aké vzorce ide, možno by šlo vymyslieť nejakú fintu.

Inak skutočne nie je možné, aby sa bunka na základe zadania nejakej hodnoty do nej samotnej zmenila na niečo iné. Ide to len makrom.

Ale prečo sa to nedá nejak obísť:
1) prečo to, čo sa má testovať, že či sa to rovná malému písmenu "s", nemôže byť napísané do inej bunky (napr. v stĺpci A)a v prípade, že v stĺpci A bude "s", tak sa do stĺpca B zapíše "start"?
2) iná finta: čo tak využiť automatické dokončovanie: do bunky A1 napíšeš "start" (a ak chceš, obsah ukryješ napríklad vlastným formátom ;;;). Potom ak do A2 napíšeš "s", automatické dokončovanie sa postará, že ti navrhne slovo "start", stačí odentrovať. Akurát, že to nerozlišuje veľké a malé "s"
3) ďalšia "kravina" je trebárs vlastný formát, ktorý ti z "s" urobí "start", je, že nadefinuješ formát bunky , vlastný: @"tart".
Ak do bunky zapíšeš malé "s", bude tam "start". Problém: keď napíšeš napr "x", výsledkom bud "xtart". Takže otázka: bude sa do stĺpca A písať aj niečo iné než "s" alebo si chcel len urýchliť zápis slova "start" zadaním samotného písmena "s"?

Všetky ostatné stĺpce sa už dajú urobiť bezproblémovo vzorcom.

Momentálne ma iný trik nenapadá, snáď ešte dotaz, prečo tam makro nesmie byť. Tým by si to mal poriešené (v takom prípade sa to dá aj výrazne jednoduchšie, než tvojim makrom a síce udalosťou Worksheet.Change, s využitím parametra Target)

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count <> 1 Then
        Exit Sub
        Else: If Target.Column = 1 And Len(Target) = 1 And Asc(Target) = 115 Then Target = "start"
    End If
End Sub

Tento kód Ti naraz rieši celý stĺpec A.
Ostatné stĺpce už riešiš vzorcami.

P.S. funkcia Row() nemá význam, bude to vždy totožné číslo riadka v ktorom je vzorec

Ten příklad s makrem jsem dal proto, abych to co potřebuji, nemusel složitě vysvětlovat. Jak vidím, tak to má přesně opačný efekt. Takže s pravdou ven.

Mám v práci tabulku kde zadávám časy od, do. Žluté jsou editovatelné buňky, které jsou z počátku prázdné, ostatní buňky tabulky jsou uzamčené a needitovatelné. Já je ale mohu dočasně odemknout a upravit. Ve vedlejším sloupci počítám dobu trvání do-od. V dalších sloupcích jsou další výpočty podle jiných oblastí tabulky.

Převážná část položek od, do se ale opakuje např. 6:00-12:00 nebo 8:00-14:00 a 10:00-16:00 a jen malá část jsou skutečné hodiny a skutečné minuty. Chtěl jsem si z lenosti práci ulehčit a místo prvního intervalu napsat ve sloupci A třeba:
"a" a to by se přepsalo na 6:00 a vedle 12:00 a nebo
"s" a to by se přepsalo na 8:00 a vedle 14:00 a nebo
"d" a to by se přepsalo na 10:00 až 16:00. Viz obrázek.

Příslušné vzorce jsem chtěl dát někde za roh vpravo a skrýt je. Jak vidím, tak to byl nereálný požadavek.
Makra jsou zakázané (a nesmím je povolit) a psát opakující se údaje je na zblbnutí. Proto ten dotaz.

Sám som si tiež robil dochádzkový list, ale, samozrejme, s makrami, ktoré mi poskytujú mnohé vymoženosti, okrem iného i tie, ktoré spomínaš:
mám tlačidlo "dovolenka" ktoré stlačím a do buniek aktuálneho riadka zapíše príslušné časy. Mám dve bunky kde jednorazovo zadám štandardný dochádzkový čas a ak stlačím tlačidlo "štandard", prepíšu sa tieto hodnoty do buniek príslušného dňa. Manuálne vypisujem len neštandardné časy.
Očividne robíš niečo podobné. Ale keďže makrá nesmieš povoľovať, vidím jednoduché riešenie Tvojho problému v úplne primitívnom využití pomocného stĺpca.
Do tohto budeš zapisovať svoje skratky a v bunkách "od" a "do" budú vzorce, ktoré dosadia údaj podľa skratky v "sloupci lenosti" ;-)
No a aby si mal možnosť aj manuálneho vstupu a pritom nezničil vzorce, treba do vzorcov zahrnúť i prípad, keď nie je priradená skratka. V takom prípade zapíšeš do pomocnej bunky časy od a do, oddelené napr. čiarkou a vzorce v stĺpcoch "od" a "do" ti tento "manuálny čas" extrahujú podľa pozície čiarky.
Problémom môže byť maximálny počet vnorení zátvoriek pri funkcii IF, ale dá sa to i inak, napr funkciou choose, pričom by sa miesto písmen musel ako "skratka" zadávať index, podľa ktorého by sa z poľa vybrala niektorá prednastavená hodnota času.

Napríklad...

Ano, souvisí to s docházkou.
Dík za tip, asi tam skutečně dám ten sloupec lenosti. IFy mám rád, hlavně když je jich hodně a pak nevím kde jsem. To je pak ta správná detektivka. :-)

Přínosem je pro mě to, že vím, že to Excel neumí. Ale mohl by umět. Občas by se to hodilo.

Obsah "sloupce lenosti" môžeš ukryť vlastným formátom, o ktorom píšem vyššie (19:18).
Stĺpec buniek bude síce viditeľný, ale nebude viditeľný jeho obsah a teda nebude rušiť, ani keď stĺpec nebude skrytý.
Obsah bude potom viditeľný len v editačnom režime bunky alebo v riadku vzorcov.

... Potřebuji ten text vložit do určené jiné buňky než kde je vzorec.

Tím jako myslíš, že třeba vzorce budeš mít ve sloupci G a chceš, aby se výsledek toho vzorce zapsal třeba do sloupce B?
Sice vždycky říkám, že v Excelu jde udělat (skoro) všechno, ale tohle právě padá do toho "skoro" - takže se odvážím tvrdit, že tohle jenom vzorcem bez maker nelze udělat.

Nešlo by si např. otevřít nový sešit, tam si vložit vzorec do řádku A1 =KDYŽ(SLOUPEC(A1)=1;KDYŽ(E1="a";"9:00";KDYŽ(E1="s" ;"6:00";KDYŽ(E1="d";"11:00";E1)));KDYŽ(E1="a";"12: 00";KDYŽ(E1="s";"13:00";KDYŽ(E1="d";"14:00";E1)))) vzorec zkopírovat do vedlejší buňky a do všech řádků pod. Pak stačí psát do buněk E a F hodnoty s, a, d nebo vlastní číslo a vyplní ti to co potřebuješ (hodnoty ze sloupce A a B zkopíruješ do tvého docházkového sešitu).

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