Přejít na hlavní obsah

VBA Excel: kopírování listu pouze s hodnotami

  • Denis Vlčková
  • Tipy

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:

SubCopySheetValues()
DimSourceSheet As Worksheet
DimDestinationSheet As Worksheet
SetSourceSheet = ThisWorkbook.Tabulky ("Zdroj_list")
SetDestinationSheet = ThisWorkbook.Tabulky ("Cíl_list")
SourceSheet.Range("A1:Z100").CopyDestinationSheet.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 VBAPopis
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.