Копирование значений

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
VanBlack
Сообщения: 69
Зарегистрирован: 26 окт 2013, 15:28

Здравствуйте! Нужно чтобы значения ячеек столбцов E, F и G листа "16" с помощью макроса копировались в ячейки столбцов J, K и L листа "Список"? Значения должны соответствовать участникам соревнования, отображающихся в столбце "B". Можно ли такое сделать? Нужен именно макрос!
Вложения
new 5..zip
(86.03 КБ) 31 скачивание
SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

Можно так:

Код: Выделить всё

Sub Main()
    Dim x As Range, ws1 As Worksheet, ws2 As Worksheet, i As Long
    Application.ScreenUpdating = False
    Set ws1 = Sheets("16"): Set ws2 = Sheets("Список")
    For i = 4 To ws1.Cells(Rows.Count, 2).End(xlUp).Row
        Set x = ws2.[B:B].Find(ws1.Cells(i, 2))
        If Not x Is Nothing Then x.Offset(, 8).Resize(, 3).Value = ws1.Cells(i, 5).Resize(, 3).Value
    Next
End Sub
Пример во вложении. Откройте и запустите макрос "Main".
VanBlack
Сообщения: 69
Зарегистрирован: 26 окт 2013, 15:28

Спасибо огромное! То что нужно!
VanBlack
Сообщения: 69
Зарегистрирован: 26 окт 2013, 15:28

Возникла небольшая проблема... Когда я добавляю все таблицы на лист (пример на листе 16 (2) во вложении) макрос работает, только копирует значения листа 16. Здесь я понял почему, - в макросе прописан лист 16. Я пробовал менять в макросе на 16 (2), - макрос перестаёт работать, точнее работает, но значения копирует далеко не те которые нужно. Что нужно ещё исправить? И как прописать чтобы данные копировались не с листа с определённым именем, а с открытого в данный момент листа, с которого собственно и будет запускаться макрос. Это нужно потому что лист 16 будет использоваться как шаблон, с него будут создаваться копии с разным составом участников, но таблица A3:G19 с которой будут копироваться значения на лист "Список" всегда будет на одном месте.
Вложения
new 5_3..zip
(82.92 КБ) 36 скачиваний
SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

Посмотрите вложение. Для переноса данных, активируйте требуемый лист и запустите макрос "MainXX", который находится в программном модуле "Module2". Данные будут перенесены из активного листа (не зависимо от его имени) в лист "Список".
Т. к. у Вас внизу таблицы находятся дополнительные записи, то обязательное условие в том, чтобы в столбце "B", после последней фамилии в списке, была хотя бы одна пустая ячейка. Именно это условие макрос идентифицирует, как конец списка фамилий.
VanBlack
Сообщения: 69
Зарегистрирован: 26 окт 2013, 15:28

Спасибо огромное! Всё отлично работает! Если от меня что-то требуется, помимо благодарности, - напишите в личку. Ещё раз спасибо!
SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

Рад, что моя помощь оказалась Вам полезной. Обращайтесь. Можно в частном порядке, через e-mail.
Ответить