Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
 Аватар для rar
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458

Сцепить скопированный диапазон и вставить на другой лист

20.02.2018, 09:21. Показов 2767. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет
Помогите с задачей на VBA...

На одном листе есть табличка нужно скопировать строки (две вправо от значения "да") если указано условие скопировать, а затем в буфере как бы "сцепить" - не знаю как точно объяснить.. Затем на другом листе провести проверку ячеек определенного столбца и после всех найденных значений "сюда скопировать" вставить этот сцепленный диапазон ниже... описание в картинке
Миниатюры
Сцепить скопированный диапазон и вставить на другой лист  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.02.2018, 09:21
Ответы с готовыми решениями:

Как в Примечание вставить скопированный диапазон ячеек?
Как в Примечание вставить несколько скопированных ячеек?

Сцепить диапазон по столбцам
Добрый день! Подскажите, пожалуйста, как сцепить диапазон ячеек по столбцам (вертикально). В интернете нашла отличный вариант через vba, но...

Как найти минимальное значение и вставить на другой лист
Друзья, привет. Макрос вроде бы не сложный, но все же у меня не получается. У меня есть на листе 1 таблица, в которой 10 строк,...

25
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
20.02.2018, 09:54
Ничего непонятно... От "да" вправо нет никаких строк, есть всего одна строка от влево до вправо, в которой собственно это "да" и есть.
Если делать так, как я понял - можно сперва собрать коллекцию номеров этих строк с "да", затем циклом или поиском по второму листу выявлять ячейки куда нужно копировать и собственно копировать всё, что собрали в коллекцию.
0
 Аватар для rar
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
20.02.2018, 10:07  [ТС]
прошу прощения,
от "да в лево на две ячейки" (на одной картинке показано два разных листа (условно граница каждого литса - толстая черная рамка)

Добавлено через 8 минут

пробегаемся по стобцу "скопировать"

вернее сказать - от слова "да" влево копируем первую ячейку+вторую ячейку

и т.д.

получаем общий диапазон (диапазон 1 (ячейки со значением 1,4)+диапазон2 (ячейки со значением 3,6)) - его копируем в буфер

Добавлено через 3 минуты
Цитата Сообщение от Hugo121 Посмотреть сообщение
затем циклом или поиском по второму листу выявлять ячейки куда нужно копировать и собственно копировать всё, что собрали в коллекцию.
- да все верно)
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
20.02.2018, 10:23
Как собрать коллекцию - это не сложно, понятно.
Сложнее найти место куда копировать, можно например так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub tt()
Dim r As Range
Set r = [f1:g1] 'это например будем копировать
 
Dim c As Range
For Each c In Columns(2).SpecialCells(xlCellTypeBlanks).Areas 'копировать будем например сюда
r.Copy c.Rows(1)
r.Copy c.Rows(2)
Next
End Sub
Про то, что хватит ли места - конечно хватит! Это даже не обсуждается...
1
 Аватар для rar
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
20.02.2018, 11:00  [ТС]
Спасибо! однако у меня в столбце есть кроме заголовков "сюда скопировать" есть и другие - "сюда не копировать " к примеру и т.д. ) как сделать чтобы имено после строки "сюда скопировать" копировалось все ниже

Места да... всегда хватит оно там специально пустыми строками предусмотрено )
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
20.02.2018, 11:09
Цитата Сообщение от rar Посмотреть сообщение
как сделать чтобы имено после строки "сюда скопировать" копировалось
- например проверить что там выше написано.

Добавлено через 43 секунды
Я ориентировался на "пример"
0
 Аватар для rar
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
20.02.2018, 11:10  [ТС]
мда, мой косяк, надо было это сразу оговорить, я не подумал (просто было условие "сюда скопировать")
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
20.02.2018, 11:13
Вообще если нужно копировать именно под эту надпись - то можно делать как я выше писал: циклом или поиском ищем надпись, под неё слепо копируем (а не циклом по пустым областям).
0
 Аватар для rar
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
20.02.2018, 11:19  [ТС]
значит надо указать адрес ячейки ниже "копировать сюда" а затем Range.Paste ?

Добавлено через 2 минуты
а адрес ниже будет

ActiveCell.Cells(1, 2) ?
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
20.02.2018, 11:22
Адрес ниже можете "пощупать" его выделением при пошаговом проходе кода.
Синтаксис завистит от того, как будете писать. Но в любом случае в рабочем варианте не используйте ActiveCell и вообще всякие выделения ячеек.
1
 Аватар для rar
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
20.02.2018, 11:27  [ТС]
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
sub aa()
 
Dim r As Range
Set r = [B3:C5]  
 
For Each c In Columns(6)
 
If c.Value = "Сюда копировать" Then
r.Copy c.Cells(1, 2). Rows(1)
 
End If
Next
 
End Sub
Добавлено через 23 секунды
где ошибка ?
Цитата Сообщение от rar Посмотреть сообщение
If c.Value = "Сюда копировать" Then
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
20.02.2018, 11:30
А "пощупать" не пробовали? Рекомендую:
Visual Basic
1
 c.Select
0
 Аватар для rar
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
20.02.2018, 11:35  [ТС]
Я правильно , в нужном месте "щупнул" ?


Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sub aa()
 
Dim r As Range
Set r = [B3:C5]  
 
For Each c In Columns(6)
c.Select
 
If c.Value = "Сюда копировать" Then
r.Copy c.Cells(1, 2). Rows(1)
 
End If
Next
 
End Sub
Добавлено через 2 минуты
на такой щуп нет реакции...
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
20.02.2018, 11:37
Да.
И что "селектнули"?
И потом когда наладите - можете "селектнуть" c.Cells(1, 2). Rows(1)

Добавлено через 34 секунды
Я говорил
Цитата Сообщение от Hugo121 Посмотреть сообщение
выделением при пошаговом проходе кода
Добавлено через 51 секунду
И только для отладки, не в рабочем варианте!
0
 Аватар для rar
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
20.02.2018, 11:38  [ТС]
ааа, то бишь что то вроде там for i in Column(6) ?

по поводу щупа понял - нужно чтобы понять те ли ячейки выделились
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
20.02.2018, 11:44
Лучший ответ Сообщение было отмечено rar как решение

Решение

Да. Так увидите то ли нашли, затем выделение отключаете и работаете.
И нужно перебирать не столбцы, а ячейки столбца, т.е.
Visual Basic
1
For Each c In Columns(6).cells
Добавлено через 41 секунду
Но перебирать весь возможный миллион - как-то глупо...
1
 Аватар для rar
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
20.02.2018, 12:03  [ТС]
тогда нужно делать поиск в диапазоне от первой заполненной ячейки в столбце до последней ...

Добавлено через 1 минуту
мда...глупо...эксель в шоке...какой то бесконечный процесс начался...

Добавлено через 14 минут
понял

Visual Basic
1
2
3
Set x = ActiveSheet.Range("F:F").SpecialCells(xlCellTypeConstants).SpecialCells(xlCellTypeConstants)
x.Select
For Each c In x.Cells
Добавлено через 1 минуту
еще вопрос

диапазоны можно складывать ?

вроде как

Range_3=Range_1+Range_2 ? (это к вопросу о сцеплении диапазонов)
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
20.02.2018, 12:38
Лучший ответ Сообщение было отмечено rar как решение

Решение

Сцепление - может быть Вам поможет Union?
Типа
Visual Basic
1
Union([a1:a3], [c1:c3]).Select
0
 Аватар для rar
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
20.02.2018, 12:41  [ТС]
видимо да

как это применить тут?

Visual Basic
1
2
3
4
5
6
7
8
9
Set _Range = ActiveSheet.Range("D:D").SpecialCells(xlCellTypeConstants).SpecialCells(xlCellTypeConstants)
 
For Each c In _Range.Cells
 
If c.Value = "да" Then
c.Cells(1, -1).Range(Cells(1, 1), Cells(1, 2)).Select
 
End If
Next
Добавлено через 42 секунды
тут поочередно (построчно) диапазоны верно определяются, но как в итоге всех их сложить в один ?
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
20.02.2018, 13:02
Поищите примеры кодов с union, у меня обед
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.02.2018, 13:02
Помогаю со студенческими работами здесь

При изменении значения в одной книге, вставить лист из другой книги
Здравствуйте! Имеются два файла xls: "Книга рабочая" и "Книга с модулями". Необходимо чтобы, при выборе в "Книга рабочая" в...

Вставить диапазон с 1-го листа на 2-ой и удалить диапазон
Добрый день, всем. Посоветуйте каким образом сделать своеобразную кнопку отмены после вставки диапазона данных. на листе...

Вставить на другой лист по значению первого столбца
Возможен ли такой вариант, чтобы макрос не спрашивал, куда вставить скопированное, а искал на другом листе значение А39 первого листа (в...

Как вставить текст скопированный в системный буфер?
Прочитал кучу документации, сам попробовал не получилось. Мне надо чтобы текст хранящийся в буфере вставлялся в нужный мне richTextBox. ...

MS Office Excel VBA вставить скопированный ячейки в пустую свободную ячейку
Здравствуете, помоги не получается вставить скопированные ячейки на лист2 в этой же книги в первую пустую ячейку по столбцу А Вот такой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru