Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2012, 12:20   #1
mariyavaryanitsa
Пользователь
 
Регистрация: 28.09.2012
Сообщений: 17
По умолчанию как написать макрос, копирующий столбец из одной книги в другую?

Необходимо из второй книги скопировать столбец G в первую книгу в столбец J, но так, чтобы был корректен столбец B (т.к. ячейки столбца B в книге2 не совпадают с ячейками столбца B в книге1). Ниже вложены файлы в книге1 уже так как должно быть (пользовались функцией ВПР). Буду очень благодарна всем откликнувшимся.
Вложения
Тип файла: zip Книга 1.zip (6.6 Кб, 19 просмотров)
Тип файла: zip Книга 2.zip (6.7 Кб, 15 просмотров)
mariyavaryanitsa вне форума Ответить с цитированием
Старый 29.09.2012, 07:28   #2
mariyavaryanitsa
Пользователь
 
Регистрация: 28.09.2012
Сообщений: 17
По умолчанию

Я придумала, надо пробежаться по всем ячейкам столбца B книги 2, если они совпадают с ячейками столбца В книги 1, тогда столбцу J присваиваем значения ячеек столбца G книги второй. Только как это все на языке VBA написать помогите пожалуйста.
mariyavaryanitsa вне форума Ответить с цитированием
Старый 29.09.2012, 11:36   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

спасибо, натолкнули на мысль. воспользовался любезно изложенным Вами алгоритмом.
Код:
Sub CopyG2toJ1()
  Const wb1 As String = "книга 1.xls"
  Const wb2 As String = "книга 2.xls"
  Dim r As Long, rg As Range
  Workbooks(wb1).Activate
  For r = 2 To Cells(Rows.Count, 2).End(xlUp).Row
    With Workbooks(wb2).Worksheets(1)
      Set rg = .Columns(2).Find(Cells(r, 2), lookat:=xlWhole, LookIn:=xlValues)
      If Not rg Is Nothing Then
        Range("J" & r) = rg
      End If
    End With
  Next
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 29.09.2012, 16:08   #4
mariyavaryanitsa
Пользователь
 
Регистрация: 28.09.2012
Сообщений: 17
По умолчанию

большое спасибо, буду пробовать)
mariyavaryanitsa вне форума Ответить с цитированием
Старый 29.09.2012, 18:36   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Тут нужно на словаре (dictionary) и массивах делать - особенно если данных тысячи.
Таких кодов тут уже было тоже тысячи...
Алгоритм такой - сперва одним циклом запоминаем в словаре данные из второй книги, затем вторым циклом их размещаем в первой. Можно даже без массивов, если не торопитесь
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 03.10.2012, 10:29   #6
mariyavaryanitsa
Пользователь
 
Регистрация: 28.09.2012
Сообщений: 17
По умолчанию

IgorGO, Ваш макрос копирует мне почему то столбец B. А мне надо, если B1(первой книги) = B2 (второй книги), тогда G1 (второй)=J1(первой). И так по всем ячейкам столбца В.
mariyavaryanitsa вне форума Ответить с цитированием
Старый 03.10.2012, 10:39   #7
mariyavaryanitsa
Пользователь
 
Регистрация: 28.09.2012
Сообщений: 17
По умолчанию

удалено пользователем)

Последний раз редактировалось mariyavaryanitsa; 03.10.2012 в 11:56.
mariyavaryanitsa вне форума Ответить с цитированием
Старый 03.10.2012, 10:56   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

извините, ошибся.
исправте
Код:
Range("J" & r) = rg
на
Код:
Range("J" & r) = rg.offset(,5)
и будет Вам счастье. хотя чтобы добиться счастья лучше постоянно повторять мантру "Харе Криш..."
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 03.10.2012, 11:07   #9
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Ну я бы перед работой отсортировал обе таблицы по поисковому столбцу. Тогда каждый следующий поиск можно будет делать от последнего найденного значения. при больших габаритах таблиц будет здорово экономить время.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 03.10.2012, 11:17   #10
mariyavaryanitsa
Пользователь
 
Регистрация: 28.09.2012
Сообщений: 17
По умолчанию

Оу, IgorGO, спасибо Вам спасибо огромное, я так рада, я два дня какую-то муть писала, Вы видели мое рукоделие?! ахахаха
mariyavaryanitsa вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить данные из одной открытой книги в другую? gramp Microsoft Office Excel 14 25.07.2011 10:02
Как скопировать определенные листы из одной книги в другую? Toffifee Microsoft Office Excel 32 20.05.2011 12:25
Копирование из одной книги в другую 804040 Microsoft Office Excel 4 16.08.2010 11:03
Сложное копирование из одной книги в другую kzld Microsoft Office Excel 12 15.07.2009 11:56
макрос который будет копировать столбец А из закрытой книги Данные, и вставлять в книгу Сток в столбец B Utirka66 Microsoft Office Excel 8 06.07.2009 09:53