Jak kopírovat uzavřený blok buněk se vzorci? Řekněme, že máte oblast buněk (ucelenou tabulku, jakýsi nezávislý, soběstačný ekosystém), jejíž hranice nepřekračují vzorce uvnitř. V těchto vzorcích přitom používáte absolutní adresování (zjednodušeně řečeno dolary v odkazech na buňky), a vy si přejete tento blok zkopírovat jinam (v příkladu níže se jedná o oblast B4:E6). Jak to dopadne s klasickým CTRL+C a CTRL+V, vidíte na obrázku – absolutní část odkazů se drží původního umístění.
Zbavit se absolutní adresace dost dobře nelze, bez její funkčnosti by nebylo možné efektivně vytvořit původní tabulku. Co s tím? Nebudu vás napínat. Řešením je dvojí transpozice během kopírování, tj. využití dialogu Vložit jinak…
Postup není všespásný. Nepříjemná je samozřejmě nutnost odkládací plochy v mezikroku, resp. potřeba tolika řádků v ní, kolik sloupců má původní oblast.
Jinou možností je po vytvoření úvodní tabulky změnit v jejích vzorcích adresování na čistě relativní (ručně odstraněním dolarů v dialogu Najít a nahradit), a pak teprve aplikovat kopírování.
Jak zrcadlit blok buněk
A co přesně opačný postup, kdy naopak máme kompletně zpracovanou tabulku a chceme vytvářet její obsahové kopie (klony, zrcadla)? Jako nejjednodušší se jeví přetažení původní tabulky za hranu pravým tlačítkem myši a volba Vytvořit zde propojení…
V nové tabulce se tak všechny buňky budou prostým odkazem vázat na původní tabulku (nebude se opakovat mnohdy složitý výpočet ve vzorcích původní tabulky).
Teď by to ještě chtělo… Zaměnit relativní adresy za absolutní, abychom si nadále vystačili s CTRL+V? To ale jednoduše nejde, jen s pomocí maker a metodou Application.ConvertFormula aplikovanou na každou buňku oblasti.
1 2 3 4 5 6 7 8 9 10 11 12 | Sub ZmenaAdresace() Dim rngBunka As Range For Each rngBunka In Selection If rngBunka.HasFormula = True Then rngBunka.Formula = Application.ConvertFormula(rngBunka.Formula, _ xlA1, xlA1, xlAbsolute) End If Next rngBunka End Sub |
K zamyšlení: Pomohl by vám v něčem styl adresování R1C1?