В Excel VBA копирование таблицы с одного листа на другой можно выполнить различными способами. Эти методы обеспечивают гибкость и автоматизацию, позволяя эффективно манипулировать и организовывать данные. В этой статье блога мы рассмотрим несколько методов с примерами кода, которые помогут вам копировать таблицы в Excel с помощью VBA.
Метод 1: использование Range.Copy и Range.PasteSpecial
Самый простой способ скопировать таблицу — использовать метод Range.Copy для копирования исходной таблицы и метод Range.PasteSpecial для вставки ее в целевой лист..
Sub CopyTable_Method1()
Dim sourceTable As Range
Dim destinationWorksheet As Worksheet
' Set the source table range
Set sourceTable = Worksheets("SourceSheet").Range("A1:D10")
' Set the destination worksheet
Set destinationWorksheet = Worksheets("DestinationSheet")
' Copy and paste the table
sourceTable.Copy
destinationWorksheet.Range("A1").PasteSpecial Paste:=xlPasteValues
End Sub
Метод 2: использование ListObjects.Add и ListObjects.Range.Copy
Другой подход заключается в преобразовании таблицы в ListObject (также известный как структурированная таблица) с помощью метода ListObjects.Add. Затем вы можете использовать метод ListObjects.Range.Copy для копирования таблицы.
Sub CopyTable_Method2()
Dim sourceTable As Range
Dim destinationWorksheet As Worksheet
Dim destinationTable As ListObject
' Set the source table range
Set sourceTable = Worksheets("SourceSheet").Range("A1:D10")
' Set the destination worksheet
Set destinationWorksheet = Worksheets("DestinationSheet")
' Convert the source table to a ListObject
Set destinationTable = destinationWorksheet.ListObjects.Add(xlSrcRange, sourceTable, , xlYes)
' Copy the table
destinationTable.Range.Copy
End Sub
Метод 3: использование Power Query (получение и преобразование данных)
Если у вас есть Excel 2016 или более поздние версии, вы можете использовать Power Query (также известный как получение и преобразование данных) для копирования таблиц между листами. Power Query позволяет выполнять преобразования данных и загружать результат в новый лист.
Sub CopyTable_Method3()
' Assuming the source table is loaded into a worksheet query named "SourceQuery"
' Create a new worksheet query for the destination table
Worksheets.Add.Name = "DestinationSheet"
ActiveWorkbook.Queries.Add Name:="DestinationQuery", Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Source = Excel.CurrentWorkbook(){[Name=""SourceQuery""]}[Content]," & Chr(13) & "" & Chr(10) & " #"Converted to Table"" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error)," & Chr(13) & "" & Chr(10) & " #"Promoted Headers"" = Table.PromoteHeaders(#"Converted to Table"", [PromoteAllScalars=true])," & Chr(13) & "" & Chr(10) & " #"Changed Type"" = Table.TransformColumnTypes(#"Promoted Headers"",{{""Column1"", type text}, {""Column2"", type text}, {""Column3"", type text}, {""Column4"", type text}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " #"Changed Type"""
' Load the destination table into a new worksheet
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=DestinationQuery;Extended Properties=""""" _
, Destination:=Range("$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [DestinationQuery]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.SourceConnectionFile = _
"C:\Users\YourUsername\Documents\DestinationQuery.odc"
.ListObject.DisplayName = "Table_DestinationQuery"
.Refresh BackgroundQuery:=False
End With
' Delete the query connection
ActiveWorkbook.Queries("DestinationQuery").Delete
End Sub
ЗаключениеКопировать таблицы между листами Excel с помощью VBA можно несколькими способами. В этой статье блога мы рассмотрели три подхода:
-
Использование Range.Copy и Range.PasteSpecial. Этот метод включает копирование исходной таблицы с помощью метода Range.Copy и вставку ее в целевой лист с помощью метода Range.PasteSpecial.
-
Использование ListObjects.Add и ListObjects.Range.Copy. Этот метод преобразует исходную таблицу в ListObject с помощью метода ListObjects.Add, а затем копирует таблицу с помощью метода ListObjects.Range.Copy.
-
Использование Power Query (получение и преобразование данных). Если у вас есть Excel 2016 или более поздние версии, вы можете использовать Power Query для копирования таблиц. Этот метод предполагает создание нового запроса к целевой таблице и загрузку результата в новый лист.
Каждый метод имеет свои преимущества, поэтому вы можете выбрать тот, который лучше всего соответствует вашим потребностям. Благодаря этим примерам кода и пояснениям вы теперь можете эффективно копировать таблицы между листами Excel с помощью VBA.