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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.09.2012, 13:29   #1
bulbul
Новичок
Джуниор
 
Регистрация: 03.09.2012
Сообщений: 6
Радость Синхронизация таблиц

Существует две таблицы в одной книге, таблица А(Лист1) и таблица Б(Лист2). Необходимо сравнить их по первым 12 столбцам, таким образом, что при !несовпадении! данных в этих столбцах, данные добавляются из табл.Б в табл.А.

Почти такая же тема существовала-http://programmersforum.ru/showthread.php?t=27281, только я совсем забыл написание макросов и не знаю как добавить сразу все столбцы, если кто нибудь сможет помочь отредактировать скрипт буду очень благодарен!!!
bulbul вне форума Ответить с цитированием
Старый 03.09.2012, 23:53   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Я думаю,этот файл вам может подойти.
Там сравнение идет по всем столбцам
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 04.09.2012, 13:10   #3
bulbul
Новичок
Джуниор
 
Регистрация: 03.09.2012
Сообщений: 6
По умолчанию

К сожалению не работает
Вложения
Тип файла: rar тест.rar (38.4 Кб, 13 просмотров)
bulbul вне форума Ответить с цитированием
Старый 04.09.2012, 13:11   #4
bulbul
Новичок
Джуниор
 
Регистрация: 03.09.2012
Сообщений: 6
По умолчанию

Добавлять необходимо строки, которые различаются...
Постараюсь рассказать подробнее:
1) Существуют 2 базы, они практически идентичны(шапки у них одни и те же), но редактировались разными людьми, соответственно там могут быть отличия
2) Необходимо, чтобы строки отсутствующие в первой базе подтянулись в нее из 2-ой
Как автоматизировать процесс не знаю...
bulbul вне форума Ответить с цитированием
Старый 04.09.2012, 13:22   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Всё стало только непонятнее...
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 04.09.2012 в 13:26.
Hugo121 вне форума Ответить с цитированием
Старый 04.09.2012, 13:43   #6
bulbul
Новичок
Джуниор
 
Регистрация: 03.09.2012
Сообщений: 6
Радость Другая формулировка

Постараюсь объяснить еще раз
1)есть 2 базы данных
2)эти базы-прайс листы(там содержится номенклатура, цена, название и.т.д.)
3)необходимо из одной базы данных вытащить отличающиеся строки, чтобы одна база данных дополнила другую.
Думаю теперь идея более четко сформулирована?
bulbul вне форума Ответить с цитированием
Старый 04.09.2012, 14:12   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Нет.
1. Там и близко нет похожих строк, и судя по примеру - и быть не могут, т.к. заводятся разные подразделения.
Т.е. просто копипастим всё в кучу столбиком, и порядок. Можно несложным макросом.
2. Почему собираете только 2 суммы и одну выборочную строку?
3. Если в собираемых данных будут 2 одинаковые строки (такого быть не может?) - что делать?

В 2007 вручную можно так - сваливаете всё на один лист, затем в свободном столбце собираете вместе данные столбцов-критериев (например через & "|" &), затем инструментом "удалить дубликаты" по этому столбцу удаляете лишнее.

Вообще макросом можно сделать так - циклом по сводному диапазону как критерий собираем вместе значение нужных ячеек строки, заносим его в словарь (тут повторов быть не должно).
Затем циклом по собираемым диапазонам аналогично собираем критерий, проверяем его по словарю - если нет, то заносим в словарь и копируем строку. Если уже есть - пропускаем и идём дальше.
Для скорости работаем не с листами, а с массивами данных с этих листов, и отбираем данные в массив, который в конце выгружаем.
Сделать не сложно - но:
1. не понятно, что именно нужно
2. делать не интересно - таких кодов на форуме по паре за неделю уже было...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 04.09.2012, 15:02   #8
bulbul
Новичок
Джуниор
 
Регистрация: 03.09.2012
Сообщений: 6
Радость

1.Я просто для примера показал, что макрос не работает-перенес разные данные, а он их не свел.
2.Данные просто вырезаны
3.Задача добавить НЕ ИДЕНТИЧНЫЕ строки в первую табличку(если была бы возможность, то еще цвет добавленных строчек поменять)

Вот пример 2 табличек-Лист1 и Лист2, необходимо из Листа2 перенести строки которых нет в Листе1.
Вложения
Тип файла: rar Пример.rar (10.2 Кб, 13 просмотров)
bulbul вне форума Ответить с цитированием
Старый 04.09.2012, 17:00   #9
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Если внести изменения ,то все работает.Правте под себя.
Код:
Sub ComprareX(D02)
        Dim X01() As Comprarer, X02() As Comprarer
        Dim D01, paralast As Long, Sl As String, X As Range
        Dim Sh As Worksheet
        Set Sh = ThisWorkbook.Worksheets("носитель")
        D01 = Sh.UsedRange
        ReDim X01(UBound(D01, 1)): ReDim X02(UBound(D02, 1))

        For n = 2 To UBound(D01, 1)
                Sl = ""
                For m = 2 To UBound(D01, 2)
                        Sl = Sl & D01(n, m) & "@"
                Next
                If D01(n, 1) <> "" Then
                        X01(n).key = D01(n, 3)
                        X01(n).Row = n
                        X01(n).stroka = Sl
                End If
        Next
        For n = 2 To UBound(D02, 1)
                Sl = ""
                For m = 2 To UBound(D02, 2)
                        Sl = Sl & D02(n, m) & "@"
                Next
                If D02(n, 1) <> "" Then
                        X02(n).key = D02(n, 3)
                        X02(n).Row = n
                        X02(n).stroka = Sl
                End If
        Next
With Sh
        For n = 2 To UBound(X02)
                If X02(n).key <> "" Then
                        Set X = .Columns(3).Find(X02(n).key, LookIn:=xlValues, LookAt:=xlWhole)
                        If Not X Is Nothing Then
                                If X02(n).stroka <> X01(X.Row).stroka Then
                                        For m = 2 To UBound(D02, 2)
                                               .Cells(X.Row, m) = D02(n, m)
                                        Next
                                End If
                                Else
                           paralast = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
                                  For m = 1 To UBound(D02, 2)
                                .Cells(paralast, m) = D02(n, m)
                                  Next
                        End If

                End If
        Next

End With
End Sub
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 04.09.2012, 17:40   #10
bulbul
Новичок
Джуниор
 
Регистрация: 03.09.2012
Сообщений: 6
По умолчанию

Большое спасибо!!!
Только с большой базой около 6 тыс строк каждая не работает
Пишет - Subsript out of range
если это было бы возможно, можно было бы в файле прислать?
bulbul вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Синхронизация БД Bright-rider БД в Delphi 3 19.06.2012 07:32
Синхронизация с БД maryan.vetrov Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 1 25.02.2011 14:19
Сформировать из 30 таблиц 15 000 таблиц, за 15 минут. kola672 Фриланс 31 19.10.2010 01:22
Синхронизация kostyan142 Общие вопросы по Java, Java SE, Kotlin 6 13.01.2010 01:39
Синхронизация yarilo Софт 2 07.08.2009 15:50