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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 06.10.2008, 19:15   #1
MOLOTOV
 
Регистрация: 01.10.2008
Сообщений: 3
По умолчанию Как сравнить две таблицы?

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



--------- примечание модератора - вдруг кому пригодится --------------
Цитата:
Надстройка LOOKUP предназначена для сравнения и подстановки значений в таблицах Excel.

Если вам надо сравнить 2 таблицы (по одному столбцу, или по нескольким),
и для совпадающих строк скопировать значения выбранных столбцов из одной таблицы в другую,
надстройка «Lookup» поможет сделать это нажатием одной кнопки.


В настройках программы можно задать:
  • где искать сравниваемые файлы (использовать уже открытый файл, загружать файл по заданному пути, или же выводить диалоговое окно выбора файла)
  • с каких листов брать данные (варианты: активный лист, лист с заданным номером или названием)
  • какие столбцы сравнивать (можно задать несколько столбцов)
  • значения каких столбцов надо копировать в найденные строки (также можно указать несколько столбцов)

Скачать надстройку для сравнения таблиц Excel и копирования данных из одинаковых строк

Если вам требуется собирать данные из прайсов, сравнивая их, —
на сайте ExcelVBA.ru можно скачать универсальную программу обработки прайс-листов:
http://excelvba.ru/programmes/Unification

Цитата:
Программа «Прайс лист», выполненная в виде надстройки для Excel, позволяет вам нажатием одной кнопки преобразовать множество прайс-листов различных форматов к единому виду.
Программа умеет объединять данные из самых разных прайсов (формата CSV и Excel), в том числе из файлов иерархической структуры (выгрузки из 1С).

Возможностей в программе множество — например, она умеет делать наценку (в т.ч. и «сложную»), конвертировать цены из одной валюты в другую, выполнять замены наименований, выделять нужные данные (характеристики) из описания товара при помощи специальных функций.

Создавать итоговый прайс можно в формате Excel (по шаблону XLS) или в CSV (разделители столбцов, кодировка, и всё такое - настраивается)

Вы легко сможете настроить программу обработки прайс-листов под свои нужды.
Если сами не разберётесь — позвоните в Скайп (ник: ExcelVBA.ru), — получите бесплатную консультацию, с демонстрацией возможностей программы.

Программа изначально предназначалась для обработки прайс-листов на автозапчасти, но подойдёт для абсолютно любых файлов Excel.
Для обработки прайс-листов на автомобильные шины и диски, в программу добавлены специальные функции.

Обновления к программе «Прайс-лист» выходят регулярно, — соответственно, в программу постоянно добавляются новые возможности.

Последний раз редактировалось EducatedFool; 30.09.2013 в 09:20.
MOLOTOV вне форума
Старый 07.10.2008, 01:31   #2
КаМММ
Почти "Чайник"
Форумчанин
 
Аватар для КаМММ
 
Регистрация: 09.06.2008
Сообщений: 134
По умолчанию

Можно просто копировать таблицу Б в конец таблицы А
потом запустить макрос:

Код:
Sub Сортировочка()
Dim Строка, i1
Строка = Range("A65536").End(xlUp).Row 'Поиск последней строки
R = "A1:X" & Строка'Предпологаю что столбцов не больше чем 24
Range(R).Select
    Selection.Sort Key1:=Range("A2")
For i1 = 1 To Строка
    If Cells(i1, 1) <> Cells(i1 + 1, 1) Then GoTo дальше 'Проверка совподений
    Cells(i1, 1) = "" 'Удаление совподений
дальше:
Next i1
Range(R).Select
    Selection.Sort Key1:=Range("A2")
Строка = Range("A65536").End(xlUp).Row & ":" & i1
Rows(Строка).Select
Selection.Delete Shift:=xlUp 'Удаление совподений
End Sub
Он отсортирует всё в алфавитном порядке и удалит повторения,
Уверен что существует и более красивое решение.
Но это первое что пришло в голову.
КаМММ вне форума
Старый 07.10.2008, 05:54   #3
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Предлагаю другое решение задачи. К сожалению, автор не указал, где расположены таблицы. В предлагаемом примере предполагается, что таблица "A" находится на 1 листе, а таблица "B" на втором. Обе таблицы начинаются со столбца "A", по которому и нужно искать совпадения.
Создаем новую коллекцию из элементов столбца "A" первой таблицы. Затем, добавляем в коллекцию элементы столбца "A" второй таблицы. Анализируя уникальное свойство коллекции (т.е. двух одинаковых членов коллекции быть не может), добавляем в первую таблицу неповторяющиеся строки второй таблицы. Количество столбцов таблиц - произвольное. Если нужно, в конце процедуры можно добавить сортировку.
Такой способ реализует следующий код:
Код:
Sub Main()
    Dim x As New Collection, i As Long
    Application.ScreenUpdating = False: On Error Resume Next
    Sheets(1).Select: With Sheets(2)
    For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
        x.Add Cells(i, "A"), CStr(Cells(i, "A"))
    Next
    For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row
        On Error Resume Next
        x.Add .Cells(i, "A"), CStr(.Cells(i, "A"))
        If Err = 0 Then .Rows(i).Copy Rows(Cells(Rows.Count, "A").End(xlUp).Row + 1)
    Next
    End With
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 07.10.2008, 08:25   #4
КаМММ
Почти "Чайник"
Форумчанин
 
Аватар для КаМММ
 
Регистрация: 09.06.2008
Сообщений: 134
По умолчанию

Цитата:
Сообщение от КаМММ Посмотреть сообщение
Уверен что существует и более красивое решение.
Я как всегда прав.
А можно для "чайника" пояснить строки кода
КаМММ вне форума
Старый 07.10.2008, 09:32   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
пояснить строки кода
Да я и так, вроде бы, все объяснил.
Вот код с детальными комментариями:
Код:
Sub Main()
    
'Определяем переменные
    Dim x As New Collection, i As Long
'Отключаем обновления экрана и обработчик ошибок
    Application.ScreenUpdating = False: On Error Resume Next
'Переходим на 1 лист (т.к. макрос может быть запущен при любом активном листе
    Sheets(1).Select: With Sheets(2)
'Организуем цикл от ячейки "A1" до последней заполненной ячейки столбца "A" листа 1
    For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
'Добавляем все элементы в созданную коллекцию
        x.Add Cells(i, "A"), CStr(Cells(i, "A"))
    Next
'Организуем цикл от ячейки "A1" до последней заполненной ячейки столбца "A" листа 2
    For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row
        On Error Resume Next
'Добавляем все элементы в созданную коллекцию
        x.Add .Cells(i, "A"), CStr(.Cells(i, "A"))
'Перехватываем ошибку. Если текущего элемента в коллекции нет, то Err = 0
'и тогда копируем текущую строку листа 2 в лист 1 в строку, следующую за
'последней заполненной. Если такой элемент уже содержится в коллекции, то
'Err <> 0, и мы ничего не делаем.
        If Err = 0 Then .Rows(i).Copy Rows(Cells(Rows.Count, "A").End(xlUp).Row + 1)
    Next
    End With
    
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 07.10.2008, 09:44   #6
КаМММ
Почти "Чайник"
Форумчанин
 
Аватар для КаМММ
 
Регистрация: 09.06.2008
Сообщений: 134
По умолчанию

Меня смутила строка Sheets(1).Select: With Sheets(2)
В первом случае
Cells(i, "A"), CStr(.Cells(i, "A"))
обращение было активному листу (1)
А во втором к конструкции With
.Cells(i, "A"), CStr(.Cells(i, "A"))
Красиво задумано но "чайнику" сразу понять сложно (Всего одна точка)
КаМММ вне форума
Старый 07.10.2008, 11:16   #7
MOLOTOV
 
Регистрация: 01.10.2008
Сообщений: 3
По умолчанию

Большое спасибо господа!!! Всё отсортировалось и добавилось!!! Очень здорово что есть форум на котором такие чайники как я могут спросить совета или подсказки. Спасибо что не пожалели своего времени помочь
MOLOTOV вне форума
Старый 15.04.2009, 07:43   #8
Дмитрий Фукс
Пользователь
 
Регистрация: 17.03.2009
Сообщений: 41
По умолчанию А как в моем случае сравнить две таблицы???

А как в моем случае с помощью макроса сравнить две таблицы???
Основание код заказа детали, надо както сравнить цены из прайса и счета.
Вложения
Тип файла: zip Проверка.zip (10.6 Кб, 97 просмотров)
Дмитрий Фукс вне форума
Старый 20.07.2010, 17:14   #9
омарат
 
Регистрация: 03.11.2007
Сообщений: 5
По умолчанию

2-ой столбец прайс 1.....................8-ой прайс 2
заполнить со второй ячейки
не одинаковые останутся на своих местах, а одинаковые передвинутся столбец 3-4
наглядно увидите где чего не хватает, а где лишние
я не программист. но мне кажется этот код более актуален


Sub suncronizatija()

For i = 2 To 1000 'i= stolbec(v dannom slucay 2)(so vtoroy jacejki)
For j = 2 To 1000 'j=stolbec(v dannom slucay 8)(so vtoroy jacejki)
'esli dannye jaceyki stolbca 2=dannye jaceyki stolbca 8, to snjlbec 3 prinimaet dannye stolbca 2, a stolbec 4 jaceyki 8
If Cells(i, 2) = Cells(j, 8) Then Cells(i, 3) = Cells(i, 2): Cells(i, 4) = Cells(j, 8): Cells(i, 2) = "": Cells(j, 8) = "": Exit For

Next j
Next i
MsgBox ("Синхронизация 1000 ячеек, закончился!")
End Sub
омарат вне форума
Старый 20.07.2010, 21:23   #10
gling
Форумчанин
 
Регистрация: 23.01.2010
Сообщений: 261
По умолчанию

Ребята, вы прикалываетесь? Или действительно готовы объяснить работу макросов.
Мне это интересно для самообразования.
gling вне форума
Закрытая тема


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как с помощью формул можно сравнить и вывести данные kutt Microsoft Office Excel 2 24.09.2008 17:05
как сравнить 2 блока памяти7 KORN Общие вопросы Delphi 5 01.04.2008 10:50
помогите! как сравнить BMP файлы? lenivec Мультимедиа в Delphi 20 14.11.2007 21:47
как оператором insert вставить данные сразу в две таблицы? furstenberg БД в Delphi 2 18.10.2007 16:39
Как сравнить элементы 2 массивов между собой? DragonionS Общие вопросы Delphi 1 01.07.2007 21:49