#excel #vba
#excel #vba
Вопрос:
У меня есть данные в Excel. Я хочу скопировать заголовок и некоторые данные из середины листа в Powerpoint. Я знаю, что вы не можете скопировать выделение несмежных ячеек в Excel, но у меня сложилось впечатление, что это будет работать с VBA.
Моя попытка:
With Workbooks(1).Sheets(1)
Set rng = Union(.Range("B2:K3"), .Range("B45:K85"))
End With
Я могу выбрать «rng», но я не могу вставить его куда угодно, потому что я получаю сообщение об ошибке, что вы не можете вставить несмежные ячейки.
Я также пробовал это, но это привело к копированию всей таблицы (B2: K85):
With ThisWorkbook.Sheets("Sheet1")
Set rng1 = .Range("B2:K3")
Set rng2 = .Range("B45:K85")
Set NewRng = .Range(rng1.Address amp; ":" amp; rng2.Address)
End With
Я искал этот вопрос в Google и пробовал разные вещи, но либо я неправильно понял, что возможно с помощью VBA, либо я совершаю ошибку (снова и снова).
Так мне нужно изменить свой код или мне нужно обойти его? Моим альтернативным решением было бы скопировать-вставить каждый из двух диапазонов, поместить их друг под другом, а затем скопировать весь, теперь непрерывный диапазон.
Ответ №1:
Вы можете использовать Areas
свойство Range
объекта для получения объединенных диапазонов. Код, подобный приведенному ниже, будет перебирать каждый из поддиапазонов, копировать их и вставлять в другое место. Попробуйте адаптироваться к вашим потребностям и напишите ответ, если вам нужна помощь.
Sub Test()
Dim rng As Range
Dim r As Range
Dim destination As Range
Set rng = Union(Range("A1:B3"), Range("D1:E2"))
Set destination = Range("H1")
For Each r In rng.Areas
r.Copy destination
Set destination = destination.Offset(, 3)
Next r
End Sub
Комментарии:
1. Отличный ответ @user3561813! OP, имейте в виду, что копирование ячейки занимает больше времени, чем просто установка значения целевой ячейки в исходное значение (если форматирование для вас не важно). Я не думаю, что в этом очень маленьком масштабе это действительно имело бы значение, но это всегда нужно учитывать.
2. @CharlesPL Это хороший момент. Большие наборы данных могут привести к значительному снижению производительности.
3. Это выглядит довольно хорошо, большое спасибо! Последующий вопрос: у меня есть еще один лист, с которым я бы в принципе сделал то же самое, но я бы скопировал данные в PowerPoint. Мне нужно было бы подумать о том, чтобы поместить их на один лист, но это должно сработать; однако с вашим методом невозможно обойти тот факт, что эти две области представляют собой два разных изображения в PowerPoint, верно? Поэтому их нужно перемещать отдельно.
4. @Alex Я не слишком хорошо знаком с интерфейсом PowerPoint. Один из вариантов, который я могу придумать, — скопировать значения в непрерывный диапазон на временном листе. Оттуда вы можете выбрать весь «объединенный» диапазон как один диапазон для передачи в PowerPoint.
5. @user3561813 Да, это тоже было бы моим решением. Поскольку это не большой набор данных, это не должно быть проблемой. Еще раз спасибо за помощь!