V aplikaci Microsoft Excel existuje mnoho nástrojů a funkcí, které pomáhají zjednodušit a automatizovat pracovní postup. Jedním z těchto nástrojů je VBA (Visual Basic for Applications), programovací jazyk speciálně vyvinutý pro práci s Excelem.
Kopírování listu je jedním z běžných úkolů, ke kterým dochází při práci s daty v Excelu. Někdy však musíme kopírovat pouze hodnoty, bez vzorců a dalších formátovacích prvků. K vyřešení tohoto problému lze použít kód VBA, který vám umožní automatizovat proces kopírování.
VBA existuje speciální metoda-PasteSpecial, která Vám umožňuje vybrat, které prvky zkopírovaného rozsahu chcete vložit. Pro kopírování pouze hodnot můžeme použít konstantu xlPasteValues. Následující příklad kódu ukazuje, jak zkopírovat pouze hodnoty z listu "zdrojový list" do nového listu:
Sub CopyValuesOnly()
Sheets ("původní list").Range("A1:Z100").Copy
Sheets.Add
ActiveSheet.PasteSpecial Paste:=xlPasteValues
End Sub
Ve výše uvedeném kódu nejprve zkopírujeme požadovaný rozsah (v tomto případě od buňky A1 do Z100) na list "původní list" a poté vytvoříme nový list pomocí metody Sheets.Add a vložíme Zkopírované hodnoty pomocí metody PasteSpecial a jako argument uvedeme konstantu xlPasteValues.
Použití VBA v Excelu tedy umožňuje automatizovat mnoho úkolů, včetně kopírování listu pouze s hodnotami. To pomáhá urychlit a zjednodušit pracovní postup, zejména při práci s velkým množstvím dat.
Metoda 1: použití příkazu PasteSpecial
K použití této metody budete potřebovat následující VBA kód:
| Sub | CopySheetValues() |
| Dim | SourceSheet As Worksheet |
| Dim | DestinationSheet As Worksheet |
| Set | SourceSheet = ThisWorkbook.Tabulky ("Zdroj_list") |
| Set | DestinationSheet = ThisWorkbook.Tabulky ("Cíl_list") |
| SourceSheet.Range("A1:Z100").Copy | DestinationSheet.Range("A1").PasteSpecial xlPasteValues |
| End Sub |
V tomto kódu byste měli nahradit "Zdrojový_list" a "Cílový_list" názvy vašich listů, se kterými pracujete.
V řadě SourceSheet.Range("A1:Z100").Copy musíte zadat rozsah buněk, které chcete zkopírovat.
Po spuštění tohoto kódu budou do nového listu zkopírovány pouze hodnoty z rozsahu. Vzorce a odkazy na jiné buňky nebudou zkopírovány.
Metoda 2: použití příkazu Value
Ke zkopírování listu pouze s hodnotami pomocí této metody lze použít následující kód:
Sub CopySheetValues()Dim SourceSheet As WorksheetDim DestinationSheet As Worksheet' Установить ссылки на исходный и целевой листыSet SourceSheet = Worksheets("Исходный лист")Set DestinationSheet = Worksheets("Целевой лист")' Очистить целевой лист перед копированиемDestinationSheet.UsedRange.ClearContents' Копирование значений из исходного листа в целевойSourceSheet.Cells.Copy Destination:=DestinationSheet.Cells' Применить форматирование и стили (если нужно)DestinationSheet.Cells.PasteSpecial Paste:=xlPasteFormatsDestinationSheet.Cells.PasteSpecial Paste:=xlPasteColumnWidths' Завершить операцию копированияApplication.CutCopyMode = FalseEnd Sub
V tomto kódu nejprve identifikujeme odkazy na původní a cílové listy pomocí operátora Set . Poté vyčistíme obsah cílového listu pomocí metody ClearContents . Dále zkopírujeme hodnoty z původního listu do cílového listu pomocí metody Copy a zadáme cílový rozsah buněk pomocí vlastnosti Cells . Pomocí metody PasteSpecial aplikujeme formátování a styly (pokud je to nutné). Nakonec dokončíme operaci kopírování nastavením hodnoty vlastnosti cutcopymode ve False .
Použití metody Value je efektivní způsob kopírování listu pouze s hodnotami v Excelu pomocí VBA. Umožňuje uložit pouze hodnoty buněk ignorováním formátů, vzorců a dalších atributů. To může být užitečné, když chcete vytvořit kopii listu bez jakýchkoli odkazů na původní data nebo strukturu listu.
Metoda 3: použití příkazu Array
Příklad použití příkazu Array:
| Kód VBA | Popis |
|---|---|
| Sub CopySheetWithArray() | Začátek podprogramu |
| Dim srcSheet As Worksheet | Oznámení proměnné pro původní list |
| Dim destSheet As Worksheet | Oznámení proměnné pro nový list |
| Dim srcRange As Range | Oznámení proměnné pro rozsah hodnot na původním listu |
| Set srcSheet = ThisWorkbook.Sheets ("Zdrojový List") | Přiřazení hodnoty proměnné srcSheet původnímu listu |
| Set destSheet = ThisWorkbook.Sheets.Add | Vytvoření nového listu a přiřazení hodnoty proměnné destSheet |
| Set srcRange = srcSheet.UsedRange | Přiřazení hodnoty proměnné srcRange použitému rozsahu hodnot na původním listu |
| destSheet.Range("A1").Resize(srcRange.Rows.Count, srcRange.Columns.Count).Value = srcRange.Value | Kopírování hodnot z pole srcRange na nový list počínaje první buňkou |
| End Sub | Konec podprogramu |
V tomto příkladu proměnná srcSheet označuje původní list, který se bude kopírovat. Proměnná destSheet odkazuje na nový list, který je vytvořen pomocí příkazu Sheets.Add(). Rozsah srcRange je deklarován jako použitý rozsah hodnot na původním listu.
Tým destSheet.Range("A1").Resize(srcRange.Rows.Count, srcRange.Columns.Count).Value = srcRange.Value kopíruje hodnoty z pole srcRange a na novém listu nahrazuje hodnoty v rozsahu A1:Z.
Pomocí příkazu Array je možné zkopírovat list pouze s hodnotami VBA Excel.