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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2011, 13:18   #1
VectorC
 
Регистрация: 09.02.2011
Сообщений: 3
По умолчанию Нужен макрос, объединяющий две таблицы в одну

Здравствуйте!

Существует две таблицы с данными:
  • Таблица Goods в которой хранятся товары.
  • Таблица Costs в которой хранятся цены этих товаров.
Нужно связать эти две таблицы в одну, получив, тем самым таблицу, содержащую в себе как товары, так и их цены (разбиты по городам). В обеих таблица существует поле «Номенклатурный номер», по которому и предполагается связывать данные из исходных таблиц. Проще говоря, нужно получить таблицу Result, добавив в таблицу Goods последние четыре столбца из таблицы Costs, на основании эквивалентности поля «Номенклатурного номер».

Excel 2003
Файл с книгой прикрепил.
Вложения
Тип файла: rar Catalog.rar (352.6 Кб, 64 просмотров)

Последний раз редактировалось VectorC; 09.02.2011 в 13:58.
VectorC вне форума Ответить с цитированием
Старый 09.02.2011, 14:39   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

У Вас там косяк в номере 400019075...
Если последние 4, то отработал код из http://hugo.nxt.ru/CompareFiles.Find.rar
1146 совпадений.

Настройки:
Файл - приёмник: C:\temp\VectorC\Каталог.xls
Файл - источник: C:\temp\VectorC\Каталог.xls
Столбцы сравнения в приёмнике: a
Столбцы сравнения в источнике: a
Лист - приёмник (№): 1
Лист - источник (№): 2
Столбцы - приёмники данных копирования: O,P,Q,R
Столбцы - источники данных копирования: E,F,G,H

Добиваем первый лист данными второго. Можно сперва на лист Result скопировать данные первого листа и добивать туда.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 09.02.2011 в 14:44.
Hugo121 вне форума Ответить с цитированием
Старый 09.02.2011, 15:11   #3
VectorC
 
Регистрация: 09.02.2011
Сообщений: 3
По умолчанию

Спасибо, только у меня почему-то ничего не получилось.
Пишет:

Цитата:
Run-time error '438':

Object doesn't support this property or method
?

В чём косяк номера 400019075?

Последний раз редактировалось VectorC; 09.02.2011 в 15:14.
VectorC вне форума Ответить с цитированием
Старый 09.02.2011, 15:16   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Жаль... Версия Экселя какая у Вас? У меня на 2000 и 2007 работает...
А косяк в том, что 400019075 два раза в таблице - один раз данных больше.

Хотя именно под эту задачу несложно макрос на массиве написать - вечером могу сделать, если раньше не напишут.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 09.02.2011 в 15:23.
Hugo121 вне форума Ответить с цитированием
Старый 09.02.2011, 15:44   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Уже. 2 секунды, без красивостей.
Код:
Option Explicit

Sub Result()

Dim a, b
Dim iLastrow As Long
Dim i As Long, ii As Long
'Dim tm
'tm = Timer

' Для ускорения работы макроса обновление экрана отключается.
Application.ScreenUpdating = False

With Sheets(" Goods ")
iLastrow = .Cells(Rows.Count, 1).End(xlUp).Row
a = Range(.Cells(1, 1), .Cells(iLastrow, 18)).Value
End With

With Sheets(" Costs ")
iLastrow = .Cells(Rows.Count, 1).End(xlUp).Row
b = Range(.Cells(1, 1), .Cells(iLastrow, 8)).Value
End With

For i = 1 To UBound(a)
For ii = 1 To UBound(b)
If a(i, 1) = b(ii, 1) Then
a(i, 15) = b(ii, 5)
a(i, 16) = b(ii, 6)
a(i, 17) = b(ii, 7)
a(i, 18) = b(ii, 8)
Exit For
End If
Next ii, i

Sheets(" Result ").Columns("E:E").NumberFormat = "@"


Sheets(" Result ").[A1].Resize(UBound(a, 1), UBound(a, 2)).Value = a    'выгружаем результат
Application.ScreenUpdating = True
'Debug.Print Timer - tm

End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 09.02.2011 в 15:56. Причина: правил код!!!
Hugo121 вне форума Ответить с цитированием
Старый 09.02.2011, 16:22   #6
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,077
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Жаль... Версия Экселя какая у Вас? У меня на 2000 и 2007 работает...
А косяк в том, что 400019075 два раза в таблице - один раз данных больше.
таких позиций 16
и 37 позиций --есть не во всех городах
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 10.02.2011, 11:15   #7
VectorC
 
Регистрация: 09.02.2011
Сообщений: 3
По умолчанию

Спасибо Hugo121, всё получилось! Сделали с помощью последнего макроса.
VectorC вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очень нужен макрос для таблицы Dorina Microsoft Office Excel 14 08.02.2011 22:52
Создать макрос, объединяющий две строки Vova1987 Microsoft Office Excel 8 15.10.2010 11:59
Объединить две процедуры в одну AndreiFQ Помощь студентам 5 24.06.2010 09:26
C++. Собрать две маленькие программки в одну!! || Flashka || Помощь студентам 0 11.05.2010 13:59
очень срочно нужен макрос на транспонирование таблицы kievlyanin Microsoft Office Excel 10 25.06.2008 13:20