#excel #vba #copy-paste #copying #pasting
#excel #vba #копировать-вставить #копирование #вставка
Вопрос:
У меня есть 4 вкладки..
Год 1, год 2, год 3, общие расходы.
Год 1 вставляется на вкладке «Общие расходы» следующим образом:
https://i.stack.imgur.com/SegGE .
Теперь мне нужны данные за 2-й и 3-й годы для копирования из строки 4 вниз и вставки в следующий пробел строки в Total Spend.
Это код, который я использую для обозначения диапазона 2 и 3 года и для попытки найти первую пустую ячейку в столбце A для вставки данных.
Я не могу понять, почему это не работает. Он ничего не вставляет ни в какое место.
Dim Year2 As Range
Dim Year3 As Range
Dim Location As Range
Set Year2 = Sheets("Year 2 Data").Range("4:4").End(xlDown)
Set Year3 = Sheets("Year 3 Data").Range("4:4").End(xlDown)
Set Location = Sheets("Total Spend").Cells(Rows.Count, 1).End(xlUp)
If Len(Location.Value) > 0 Then Set Location = Location.Offset(1)
' This paste is manual so Row 2 stays blank - this is needed in formatting later on.
Sheets("Year 1 Data").Select
Cells.Select
Selection.Copy
Sheets("Total Spend").Select
Cells.Select
ActiveSheet.Paste
Year2.Copy Location
Year3.Copy Location
Комментарии:
1. Вы установили
Year2
иYear3
как весь столбец. Спускаться некуда. Вы намеревались начать сRange("A4")
?2. Исправление: с листа 2 и 3 года: A3, вниз и поперек. Затем последовательно вставляется в последнюю строку данных в таблице «Общие расходы», игнорируя пустую строку в строке 2.
Ответ №1:
используйте это
' Range(Sheets("Year 2 Data").Range("4:4"), Sheets("Year 2 Data").Range("4:4").End(xlDown))
вместо
Sheets("Year 2 Data").Range("4:4").End(xlDown)
то же самое будет применяться для листов («Данные за 3 года»)
Комментарии:
1. Спасибо, я попробую это в ближайшее время.
2. Похоже, это не работает — кажется, что он перезаписывает предыдущие данные и не находит последнюю пустую строку после пустой строки 2. Год 1 — в строке 1 есть данные, строка 2 пуста, строка 3 содержит данные примерно до строки 5000. Год 2 — Мне нужны данные из строки 3 для подопечных, которые будут вставлены в следующую доступную строку после того, как данные года 1 заканчиваются годом 3 — То же, что и выше, но когда данные года 2 заканчиваются. Надеюсь, это немного прояснит ситуацию.
Ответ №2:
После просмотра комментариев, будет ли что-то вроде этого ответом? (Я пока не могу его протестировать, так как ушел с работы.)
Dim Year2 As Range
Dim Year3 As Range
Dim Location As Range
Set Year2 = Range(Sheets("Year 2 Data").Range("4:4"), Sheets("Year 2 Data").Range("4:4").End(xlDown))
Set Year3 = Range(Sheets("Year 3 Data").Range("4:4"), Sheets("Year 3 Data").Range("4:4").End(xlDown))
Set Location = Sheets("Total Spend").Cells(Rows.Count, 3).End(xlUp)
«Я изменил приведенное выше, чтобы начать со строки 3, пропустив пустую строку 2, поэтому теоретически он будет проверять, используя IF из строки 3 вниз.
If Len(Location.Value) > 0 Then Set Location = Location.Offset(1)
«Эта вставка выполняется вручную, поэтому строка 2 остается пустой — это необходимо при форматировании позже.
Sheets("Year 1 Data").Select
Cells.Select
Selection.Copy
Sheets("Total Spend").Select
Cells.Select
ActiveSheet.Paste
Year2.Copy Location
Year3.Copy Location
Ответ №3:
Хорошо, итак, согласно вашей логике, я думаю, приведенный ниже код поможет. Он выберет данные из листа и вставит данные в выходной лист, используя последнюю строку выходного листа.
n A для вставки данных.
Я не могу понять, почему это не работает. Он ничего не вставляет ни в какое место.
Dim Year2 As Range
Затемнить год3 как диапазон
Затемнение местоположения как диапазона
Установите Year2 = диапазон (листы («Данные за год 2»).Диапазон («4: 4»), листы («Данные за 2 года»).Диапазон («4: 4»).Конец (xlDown))
Установите Year3 = диапазон (листы («Данные за год 3»).Диапазон («4: 4»), листы («Данные за 3 года»).Диапазон («4: 4»).Конец (xlDown)) Установите местоположение = листы («Общий расход»).Ячейки (строки.Количество 88, 1).Конец (xlUp).смещение (1, 0)
Если Len(местоположение.Значение)> 0 Затем установите местоположение = Местоположение.Смещение (1)
«Эта вставка выполняется вручную, поэтому строка 2 остается пустой — это необходимо при форматировании позже.
Sheets("Year 1 Data").Select
Cells.Select
Selection.Copy
Sheets("Total Spend").Select
Cells.Select
ActiveSheet.Paste
Листы («Общие расходы»).Ячейки (строки.Количество 88, 1).Конец (xlUp).смещение (1, 0).выберите
Год2.Расположение копирования
Листы («Общие расходы»).Ячейки (строки.Количество 88, 1).Конец (xlUp).смещение (1, 0).выберите
Год3.Расположение копирования
Комментарии:
1. Это выдает ошибку 1004 объекта, определенного по адресу: Set Location = Sheets («Total Spend»). Ячейки (строки. Количество 88, 1).Конец (xlUp).смещение (1, 0)
2. удалите » 88″ из строк.количество
Ответ №4:
Ооо! используйте приведенный ниже код, чтобы устранить эту ошибку. я удалил » 88″ из rows.count, чтобы устранить эту ошибку.
Set Location = Sheets("Total Spend").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)