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

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

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

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

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

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

Подскажите, если не затруднит - раньше с VBA в экселе не сталкивался
но неожиданно понадобилась - перечитал все что мог, но так и не понял как сделать :-(

Задача: Есть два файла экселя - нужно сравнить два столбца расположенных в разных книгах и выделить совпадающие значения цветом


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

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


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

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


Последний раз редактировалось EducatedFool; 30.09.2013 в 09:19.
LAnLorD вне форума Ответить с цитированием
Старый 13.11.2008, 13:55   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Пусть нужно сравнить столбцы "A" в файлах "Книга1.xls" и "Книга2.xls".
Следующий макрос подсветит в книге 2 ячейки, значения которых либо имеются в столбце "A" книги 1, либо повторяются в столбце "A" книги 2. Обе книги должны быть открыты
Код:
Sub Main()

    Dim i As Long, x As New Collection
    Application.ScreenUpdating = False
    Workbooks("Книга1.xls").Sheets(1).Activate
    On Error Resume Next
    For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
        x.Add Cells(i, "A"), CStr(Cells(i, "A"))
    Next
    On Error GoTo 0
    
    With Workbooks("Книга2.xls").Sheets(1)
        Columns("A").Interior.ColorIndex = xlNone
        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 .Cells(i, "A").Interior.ColorIndex = 6
            On Error GoTo 0
        Next
    End With
    Set x = Nothing
    
End Sub
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 13.11.2008 в 14:08.
SAS888 вне форума Ответить с цитированием
Старый 13.11.2008, 22:23   #3
LAnLorD
Пользователь
 
Регистрация: 13.11.2008
Сообщений: 13
По умолчанию

Огромное спасибо за ответ!
Общее направление стало понятнее - теперь пойду дальше, нужно чтобы не выделялись повторяющиеся во второй книге значения - т.е. были выделены только те которые согласуются с первой книгой.
Так с цифровым столбцом данных - в нем есть повторяющиеся строки - но они не совпадают с первой книгой (но подсвечиваются). Также необходимо выделить и значения строк в первой книге...
LAnLorD вне форума Ответить с цитированием
Старый 14.11.2008, 05:20   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Ну, тогда можно и так:
Код:
Sub Main()

    Dim i As Long, x As Range, Fst As String
    Application.ScreenUpdating = False
    Workbooks("Книга1.xls").Sheets(1).Activate
    With Workbooks("Книга2.xls").Sheets(1)
        Columns("A").Interior.ColorIndex = xlNone
        .Columns("A").Interior.ColorIndex = xlNone
        For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
            Set x = .Columns("A").Find(what:=Cells(i, "A"), LookAt:=xlWhole)
            If Not x Is Nothing Then
                Cells(i, "A").Interior.ColorIndex = 6
                Fst = x.Address
                Do
                    .Cells(x.Row, "A").Interior.ColorIndex = 6
                    Set x = .Columns("A").FindNext(x)
                Loop While Fst <> x.Address
            End If
        Next
    End With
                    
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 14.11.2008, 12:50   #5
LAnLorD
Пользователь
 
Регистрация: 13.11.2008
Сообщений: 13
По умолчанию

Еще раз спасибо - но где-то опять заковырка
Все еще во второй книге выделяет повторяющиеся только в ней ячейки
LAnLorD вне форума Ответить с цитированием
Старый 18.11.2008, 05:45   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Вариант, предлагаемый в посте № 4 работает следующим образом:
Перебираются все строки столбца "A" в книге "Книга1.xls". Для каждого значения осуществляется поиск в столбце "A" книги "Книга2.xls". В случае обнаружения полного совпадения значений, подсвечивается искомая ячейка (в книге 1) и найденная (в книге 2). Затем поиск продолжается (надо?) если находится еще такое же значение, то оно тоже подсвечивается.
Таким образом, если в книге 2 есть повторяющиеся значения, но их нет в книге 1, то они подсвечены не будут. А если есть повторяющиеся значения в книге 2, которые совпадают с каким-либо значением в книге 1, то они будут подсвечены все.
А как нужно?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 18.11.2008, 10:42   #7
LAnLorD
Пользователь
 
Регистрация: 13.11.2008
Сообщений: 13
По умолчанию

Может я неправильно выразил свои мысли *pardon*
Данные располагаются в двух столбцах, расположенных в разных книгах.
Сопоставляются (сравниваются) строки - по принципу:
А1=А1 - если да то выделяются, если равны то не выделяются
А2=А2
...... и так до окончания столбца.
То есть если А1=А5 (в разных книгах) то это не имеет значения.
Эээх надо учиться писать грамотный вопрос :-)
Искренне благодарю за участие!

Последний раз редактировалось LAnLorD; 18.11.2008 в 10:58. Причина: Пропустил "о" :-)
LAnLorD вне форума Ответить с цитированием
Старый 18.11.2008, 10:50   #8
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Эээх надо учиться писать грамтный вопрос
!!!!!!!!
А сейчас Вы грамотно написали?
Цитата:
А1=А1 - если да то выделяются, если равны то не выделяются
Наверное, имелось ввиду, что нужно примерно так:
Код:
Sub Main()

    Dim i As Long
    Application.ScreenUpdating = False
    Workbooks("Книга1.xls").Sheets(1).Activate
    With Workbooks("Книга2.xls").Sheets(1)
        For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
            If Cells(i, "A") <> "" Then
                If Cells(i, "A") = .Cells(i, "A") Then
                    Cells(i, "A").Interior.ColorIndex = 6
                    .Cells(i, "A").Interior.ColorIndex = 6
                End If
            End If
        Next
    End With
                    
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 18.11.2008, 11:02   #9
LAnLorD
Пользователь
 
Регистрация: 13.11.2008
Сообщений: 13
По умолчанию

И правда - написал еще хуже чем в первый раз - но вы меня поняли абсолютно правильно. Все именно так и нужно - век не забуду *кланяется*
LAnLorD вне форума Ответить с цитированием
Старый 12.02.2009, 13:01   #10
N.S.
 
Регистрация: 12.02.2009
Сообщений: 5
По умолчанию

пользуюсь скриптом из этой темы для сравнения двух файлов уже давно. низкий поклон тому, кто написал скрипт и поделился им с теми, у кого "руки не стоят"

а можно ли написать (переписать) скрипт таким образом, чтобы он не подсвечивал желтым схожие номера, а проставлял, например 1, в пустой колонке рядом?

буду премного благодарна, если кто-то мне поможет.
N.S. вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прибавление данніх из двух столбцов gavrylyuk Microsoft Office Excel 3 01.08.2008 11:40
Нахождение совпадений в двух книгах Professor Hubert Microsoft Office Excel 5 25.07.2008 12:59
Отображение в форме и таблице двух столбцов подстановок smoky Microsoft Office Access 5 01.07.2008 09:27
Сравнение двух списков lelik759 Microsoft Office Excel 7 13.04.2008 22:19
Как извлечь из двух столбцов несовпадающие строки Shavminator Microsoft Office Excel 4 28.12.2007 12:23