Grantorino Пользователь Сообщений: 40 |
#1 24.08.2020 15:40:19 Добрый день, подскажите, хочу скопировать несколько не смежных столбцов таблицы (вместе с заголовками) на новый лист макросом, для одного столбца макрос осилил:
а для нескольких не смежных — не получается. И как лучше для большего массива, копировать не смежные столбцы с использованием имен столбцов или без них (через определение диапазона)? Прикрепленные файлы
Изменено: Grantorino — 24.08.2020 15:51:49 |
||
Mershik Пользователь Сообщений: 8277 |
Grantorino, а что вы хотите скопировать енсмежное? Изменено: Mershik — 24.08.2020 15:43:12 Не бойтесь совершенства. Вам его не достичь. |
Grantorino Пользователь Сообщений: 40 |
Mershik,например столбец материал и столбец стоимость |
New Пользователь Сообщений: 4582 |
#4 24.08.2020 15:57:52
|
||
Grantorino Пользователь Сообщений: 40 |
New, спасибо, но мне необходимо скопировать не весь столбец, а столбец таблицы |
New Пользователь Сообщений: 4582 |
А какая разница, если вы на пустой лист будете вставлять данные? ) |
Aleksey1107 Пользователь Сообщений: 363 Excel 365 |
#7 24.08.2020 16:01:30 Grantorino,добрый день.
|
||
New Пользователь Сообщений: 4582 |
#8 24.08.2020 16:05:03
вариант 2, но копируется без шапки таблицы
вот ещё вариант вам
Изменено: New — 24.08.2020 16:10:32 |
||||||
Grantorino Пользователь Сообщений: 40 |
#9 24.08.2020 16:17:01 Всем большое спасибо!
или так:
|
||||
New Пользователь Сообщений: 4582 |
моё мнение — разницы нет. Изменено: New — 24.08.2020 16:27:50 |
Aleksey1107 Пользователь Сообщений: 363 Excel 365 |
#11 24.08.2020 16:27:12
Нет, но отличие все же есть от моего в #7
|
||||
New Пользователь Сообщений: 4582 |
#12 24.08.2020 16:29:27
я ваш вариант и взял за основу)) |
||
Grantorino Пользователь Сообщений: 40 |
При использовании макроса, возник впорос, как сделать чтобы указанный порядок в макросе учитывался, если мне надо сначала столбец стоимость вставить встолбец А на листе 2, а Материал в столбец B ? почему-то макрос вставляет в исходном порядке, вне зависимости как я перечисляю столбцы в макросе/ И еще прошу помощи, при копировании более 8ми столбцов выдает ошибку method range of object global faied.. необходимо разбить на несколько частей процесс копирования? Изменено: Grantorino — 25.08.2020 11:11:56 |
New Пользователь Сообщений: 4582 |
#14 25.08.2020 11:29:59 Да, копируйте каждый столбец отдельно в нужном порядке |
This is my first attempt to write VBA code. I am mimicking something I found on stackoverflow.
I want to copy certain columns (A, B and E) from one workbook to another and also change the font and color of certain Rows and edit the text in certain cells (replace a long phrase with the word «Group»).
This is the code I copied without change:
Sub CopyColumnToWorkbook()
Dim sourceColumn As Range, targetColumn As Range
Set sourceColumn = Workbooks("Source").Worksheets("Sheet1").Columns("A")
Set targetColumn = Workbooks("Target").Worksheets("Sheet1").Columns("A")
sourceColumn.Copy Destination:=targetColumn
End Sub
I get a runtime error 9 and the line below is highlighted:
Set sourceColumn = Workbooks("Source").Worksheets("Sheet1").Columns("A")
I am attaching the Source and Target files below as I hope they would look like at the end of a successful run.
Source File
Target File
asked Dec 6, 2012 at 23:54
1
You reference a sheet that is not there. Change it to reference the first sheet in the workbook by using its index. You also did not include the extension to the file so it would fail on the workbook object as well.
Sub CopyColumnToWorkbook()
Dim sourceColumn As Range, targetColumn As Range
Set sourceColumn = Workbooks("Source.xlsm").Worksheets(1).Columns("A")
Set targetColumn = Workbooks("Target.xlsm").Worksheets(1).Columns("A")
sourceColumn.Copy Destination:=targetColumn
End Sub
answered Dec 7, 2012 at 0:26
SorceriSorceri
7,8101 gold badge28 silver badges38 bronze badges
5
Вырезание, перемещение, копирование и вставка ячеек (диапазонов) в VBA Excel. Методы Cut, Copy и PasteSpecial объекта Range, метод Paste объекта Worksheet.
Метод Range.Cut
Range.Cut – это метод, который вырезает объект Range (диапазон ячеек) в буфер обмена или перемещает его в указанное место на рабочем листе.
Синтаксис
Параметры
Параметры | Описание |
---|---|
Destination | Необязательный параметр. Диапазон ячеек рабочего листа, в который будет вставлен (перемещен) вырезанный объект Range (достаточно указать верхнюю левую ячейку диапазона). Если этот параметр опущен, объект вырезается в буфер обмена. |
Для вставки на рабочий лист диапазона ячеек, вырезанного в буфер обмена методом Range.Cut, следует использовать метод Worksheet.Paste.
Метод Range.Copy
Range.Copy – это метод, который копирует объект Range (диапазон ячеек) в буфер обмена или в указанное место на рабочем листе.
Синтаксис
Параметры
Параметры | Описание |
---|---|
Destination | Необязательный параметр. Диапазон ячеек рабочего листа, в который будет вставлен скопированный объект Range (достаточно указать верхнюю левую ячейку диапазона). Если этот параметр опущен, объект копируется в буфер обмена. |
Метод Worksheet.Paste
Worksheet.Paste – это метод, который вставляет содержимое буфера обмена на рабочий лист.
Синтаксис
Worksheet.Paste (Destination, Link) |
Метод Worksheet.Paste работает как с диапазонами ячеек, вырезанными в буфер обмена методом Range.Cut, так и скопированными в буфер обмена методом Range.Copy.
Параметры
Параметры | Описание |
---|---|
Destination | Необязательный параметр. Диапазон (ячейка), указывающий место вставки содержимого буфера обмена. Если этот параметр не указан, используется текущий выделенный объект. |
Link | Необязательный параметр. Булево значение, которое указывает, устанавливать ли ссылку на источник вставленных данных: True – устанавливать, False – не устанавливать (значение по умолчанию). |
В выражении с методом Worksheet.Paste можно указать только один из параметров: или Destination, или Link.
Для вставки из буфера обмена отдельных компонентов скопированных ячеек (значения, форматы, примечания и т.д.), а также для проведения транспонирования и вычислений, используйте метод Range.PasteSpecial (специальная вставка).
Примеры
Вырезание и вставка диапазона одной строкой (перемещение):
Range(«A1:C3»).Cut Range(«E1») |
Вырезание ячеек в буфер обмена и вставка методом ActiveSheet.Paste:
Range(«A1:C3»).Cut ActiveSheet.Paste Range(«E1») |
Копирование и вставка диапазона одной строкой:
Range(«A18:C20»).Copy Range(«E18») |
Копирование ячеек в буфер обмена и вставка методом ActiveSheet.Paste:
Range(«A18:C20»).Copy ActiveSheet.Paste Range(«E18») |
Копирование одной ячейки и вставка ее данных во все ячейки заданного диапазона:
Range(«A1»).Copy Range(«B1:D10») |
@davidtaillefer First of all, tho part of the code where you determine to target cell is not correct.
Range("b" & LastColumn + 1 & LastRow + 1)
Suppose LastColumn = 26 and LastRow =153, the above line of code translates to «B» & 26+1 & 153+1, which results in a cell reference «B27154»
I believe the following piece of code does what you want. It copies values and formats from the first sheet into the next empty column in the second sheet from row 4. If B4 in the second sheet is empty (like the very first time you perform the copy/paste operation to an empty sheet) it will start in in B4.
Sub copycolumns()
Dim TargetSheet As Object
Set TargetSheet = Sheets("Productivity Weekly")
Dim TargetColumn As Integer
TargetColumn = TargetSheet.Range("B4").CurrentRegion.Columns.Count + 2
If TargetSheet.Range("B4") = "" Then
TargetColumn = 2
End If
Sheets("Assignments").Range("C18:j167").Copy
TargetSheet.Activate
TargetSheet.Cells(4, TargetColumn).Select
Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End Sub
Not the most elegant piece of programming, but it works for the task you want to perform.
Добрый вечер, уважаемые форумчане!
Прошу Вашей помощи, так как я не знаю vba. Вот уже недели 2 ищу на просторах интернета ответ на простой вопрос: как макросом осуществить перенос (копирование) выборочных столбцов одного листа книги эксель на другой и не нахожу. Везде речь идет только о строках почему-то.
Мне необходимо перенести столбцы листа «подробно» B-E, AF-AH на лист «Лист2» по событию Worksheet_Change (как только заполнили ячейку последнего столбца AH).
1. Желательно предварительное удаление пустых строк перед переносом, если они есть
2.перенос новой информации каждый раз без переписывания старой
3.желательно перенести названия столбцов и форматирование ячеек (без формул)
4. желательно обойтись без цикла, чтобы процедура происходила быстро, без кнопки к тому же
В принципе, все необходимые кусочки кода у меня есть в файле (см.), но я, с одной стороны, не знаю, как правильно обратиться к копируемым диапазонам, с другой-не знаю, как их собрать воедино. Не знаю также, можно ли в один лист вставлять несколько кодов.
Помогите, пожалуйста. Сделала все, что могла-нашла коды, но дальше переработать их не могу .
Добавлено через 5 минут
Простите, не могу послать файл: пишет, что некорректный, но в нем только 72 КБ-файл с поддержкой макросов. Я как-то могу его еще приложить?