Žonglování se sloupci v Excelu
Tohle je první příspěvěk z oblasti zajímavých problémů, které řeším a u kterých si myslím, že by mohly být zajímavé i pro ostatní - dnes se podíváme na řešení jednoho problému v Excelu.
Představte si, že musíte každý týden ručně přeskupovat 12 sloupců s vašimi daty – klikání na ‚Vyjmout‘ a ‚Vložit‘, kontrola chyb, ztráta času. Ukážu vám makro, které tohle zredukuje na 2 vteřiny s jediným kliknutím. Jak? Čtěte dál.
Kdy se obecně vyplatí vytvářet makro? Pokud děláte nějakou činnost v excelu opakovaně a je to činnost složitější. Případně dnes se, díky AI, vyplatí i makro na hodně složitou činnost, která se provede i jen jednou.
Společně s Claude 3.7 (většinu práce udělal Claude) jsem si vytvořil makro, které vidíte níže.
Zadání pro Claude bylo poměrně jednoduché:
for specific sheet i have set of columns, i need to rearrange these columns based on new order given by string, so for example 1,4,3,2 is prescription for the output where first column stays first, originally fourth will be second, originally second will be fourth etc.
Po 4 iteracích jsme se dostali k kódu, který funguje bez chyb a má ošetřenu většinu běžných chyb, které se mohou objevit za běhu.
Kód si klidně stáhněte a použijte ve svém projektu.
Proceduru pak budete volat:
ReorderColumns "pokus", "1,2,3,5,8,6,4,7"
pokus - je název listu, na kterém chci sloupce seřadit
1,2,3,5,8,6,4,7 - je nové pořadí sloupců - tzn. původně pátý sloupec bude čtvrtý, osmý pátý, čtvrtý sedmý, sedmý osmý a ostatní si zachovají svoji pozici
POZOR: Tohle makro přímo manipuluje s daty ve vašem sešitě! Před spuštěním se ujistěte, že pracujete s pracovní kopií a máte tak zálohu, ke které se můžete vrátit.
Jak makro funguje - hlavní body
řetězec s novým pořadím si rozloží na pole řetězců
orderArray = Split(columnOrder, ",")
v cyklu (pro všechny sloupce) určuje na jakém místě má být který sloupec
sourceColumn = CLng(Trim(orderArray(i)))
sestaví si výstupní pole pro výstupní sloupec a všechny řádky
For j = 1 To lastRowIndex
outputDataArray(j, destinationColumn) = tempDataArray(j, sourceColumn)
Next j
vyčistí stávající data a nahradí je daty z pole
' Clear existing data
wsheet.UsedRange.Clear
' Write the reordered data back
wsheet.Range(wsheet.Cells(1, 1), wsheet.Cells(lastRowIndex, UBound(orderArray) + 1)).Value = outputDataArray
Postup pro vložení makra do vašeho sešitu
Postup pro uložení VBA kódu do Excelu (Windows / Mac):
Otevři Excel sešit, kam chceš vložit VBA kód.
Otevři VBA editor:
Windows: ALT + F11
Mac: Fn + Option + F11
V editoru VBA klikni v menu na Insert → Module.
Do otevřeného modulu vlož (zkopíruj) VBA kód.
Ulož Excel sešit:
Windows: CTRL + S
Mac: Command + S
Formát souboru nastav na Excel Macro-Enabled Workbook (*.xlsm).
Zavři VBA editor:
Windows: křížkem nebo ALT + Q
Mac: zavři okno VBA editoru kliknutím na červené tlačítko v levém horním rohu (Command + W).
Spusť makro:
Windows: menu Developer → Macros nebo klávesová zkratka ALT + F8
Mac: menu Developer → Macros nebo klávesová zkratka Option + F8
Commenti