Сравнение значений в excel макросы

Перейти к основному содержанию

Статья даёт ответы на следующие вопросы:

  • Как сравнить две таблицы в Excel с помощью макросов VBA?
  • Как обращаться к ячейкам таблицы Excel с помощью VBA?
  • Как осуществлять перебор ячеек таблицы в цикле с помощью VBA?

В предыдущей статье Сравнение таблиц в Excel мы рассмотрели подход к сравнению сложных таблиц с использованием формул и без программирования.

В данной статье рассмотрим способ сравнения таблиц Excel с помощью VBA макросов на примере тех же исходных данных.

Проиллюстрируем задачу картинкой из первой статьи.

задача сравнения двух таблиц в Excel

Для начала напишем алгоритм наших действий по сравнению таблиц.

  1. Определим диапазоны данных первой и второй таблицы, то есть найдем последние значимые строки и сохраним их номера в переменных (последняя строка таблицы 1 — last_i и последняя строка таблицы 2 — last_j).
  2. Начнем проходить по каждой строке таблицы 2 (внешний цикл), данные из которой нужно перенести в таблицу 1. С первой строки данных (в примере это строка 3) до последней строки таблицы 2.
  3. Для каждой строки таблицы 2 определим идентификатор строки, путем формирования строки, содержащей полный адрес квартиры (значения из нескольких колонок, разделенные дефисами).
  4. Начнем проходить по каждой строке таблицы 1 (внутренний цикл) с первой строки данных (в примере это строка 3) до последней строки таблицы 1, определяя при этом идентификатор строки.
  5. Сравним значения идентификаторов строк таблицы 1 и таблицы 2.
  6. Если идентификаторы равны, перепишем ФИО покупателя из ячейки таблицы 2 в соответствующую ячейку таблицы 1; прервем внутренний цикл по таблице 1 и перейдем к следующей строке таблицы 2 (переход к п.2).

Теперь остается реализовать алгоритм в виде программного кода макроса.

Для этого откроем вкладку Вид ленты функций Excel. Щелкнем на нижнюю часть со стрелкой кнопки Макросы. В открывшемся подменю выберем Запись макроса. В результате начнется запись нового макроса. Поскольку код мы будем формировать вручную, то еще раз зайдем в подменю макросов и выберем Остановить запись. Далее еще раз войдем в подменю макросов и выберем Макросы.

В появившемся диалоге выделим наш макрос и нажмем Изменить.

На экране откроется окно редактора макросов Visual Basic for Applications. В области кода (правая верхняя область) отображается код только что созданного пустого макроса.

Редактор макросов Visual Basic For Applications

В процедуру Макрос1 (между объявлениями начала и конца процедуры: Sub и End Sub) необходимо вставить код, решающий поставленную задачу.
Образец кода представлен ниже.

Sub Макрос1()
'
' Макрос1 сравнение двух таблиц с использованием макроса VBA
'

' ссылка на первый лист книги
Dim sheet1 As Worksheet
Set sheet1 = ActiveWorkbook.Sheets(1)
' ссылка на второй лист книги
Dim sheet2 As Worksheet
Set sheet2 = ActiveWorkbook.Sheets(2)

' строка для хранения идентификатора строки первой таблицы
Dim str1 As String
' строка для хранения идентификатора строки второй таблицы
Dim str2 As String

' позиция курсора (номер строки) в первой таблице
Dim i As Integer
i = 3
Dim last_i As Integer
last_i = 3
' позиция курсора (номер строки) во второй таблице
Dim j As Integer
j = 3
Dim last_j As Integer
last_j = 3

' определяем последнюю значимую строку первой таблицы (последняя строка, в первой колонке которой есть значение)
For Each Cell In sheet1.Range("A:A")
    If Cell.Row > 2 Then
        If Cell.Value > "" Then
            last_i = Cell.Row
        Else
            Exit For
        End If
    End If
Next Cell

' определяем последнюю значимую строку второй таблицы (последняя строка, в первой колонке которой есть значение)
For Each Cell In sheet2.Range("A:A")
    If Cell.Row > 2 Then
        If Cell.Value > "" Then
            last_j = Cell.Row
        Else
            Exit For
        End If
    End If
Next Cell

' пробегаем по строкам второй таблицы (внешний цикл)
For j = 3 To last_j
    ' определяем идентификатор текущей строки
    str2 = sheet2.Cells(j, 1).Value & "-" & sheet2.Cells(j, 2).Value & "-" & sheet2.Cells(j, 3).Value & "-" & sheet2.Cells(j, 4).Value
    ' пробегаем по строкам первой таблицы (внутренний цикл)
    For i = 3 To last_i
        ' определяем идентификатор текущей строки
        str1 = sheet1.Cells(i, 1).Value & "-" & sheet1.Cells(i, 2).Value & "-" & sheet1.Cells(i, 3).Value & "-" & sheet1.Cells(i, 4).Value
        ' сравниваем идентификаторы строк первой и второй таблицы
        If str2 = str1 Then
            ' если совпадение найдено, то записываем покупателя из второй таблицы в первую в строку с соответствующей ему квартирой
            sheet1.Cells(i, 5).Value = sheet2.Cells(j, 5).Value
            ' прекращаем внутренний цикл, переходим к следующей итерации внешнего цикла
            ' (к следующей записи второй таблицы)
            Exit For
        End If
    Next i
Next j

End Sub

Результат решения задачи:
результат сравнения таблиц в Excel

Другие интересные статьи

  • Как сравнить две таблицы в Excel с использованием формул?
  • Горячие клавиши Excel

Тэги: 

  • Статьи
  • Excel
  • сравнение таблиц
  • VBA
  • макросы

Операторы сравнения чисел и строк, ссылок на объекты (Is) и строк по шаблону (Like), использующиеся в VBA Excel. Их особенности, примеры вычислений.

Операторы сравнения чисел и строк

Операторы сравнения чисел и строк представлены операторами, состоящими из одного или двух математических знаков равенства и неравенства:

  • <   – меньше;
  • <= – меньше или равно;
  • >   – больше;
  • >= – больше или равно;
  • =   – равно;
  • <> – не равно.

Синтаксис:

Результат = Выражение1 Оператор Выражение2

  • Результат – любая числовая переменная;
  • Выражение – выражение, возвращающее число или строку;
  • Оператор – любой оператор сравнения чисел и строк.

Если переменная Результат будет объявлена как Boolean (или Variant), она будет возвращать значения False и True. Числовые переменные других типов будут возвращать значения 0 (False) и -1 (True).

Операторы сравнения чисел и строк работают с двумя числами или двумя строками. При сравнении числа со строкой или строки с числом, VBA Excel сгенерирует ошибку Type Mismatch (несоответствие типов данных):

Sub Primer1()

On Error GoTo Instr

Dim myRes As Boolean

‘Сравниваем строку с числом

  myRes = «пять» > 3

Instr:

If Err.Description <> «» Then

  MsgBox «Произошла ошибка: « & Err.Description

End If

End Sub

Сравнение строк начинается с их первых символов. Если они оказываются равны, сравниваются следующие символы. И так до тех пор, пока символы не окажутся разными или одна или обе строки не закончатся.

Значения буквенных символов увеличиваются в алфавитном порядке, причем сначала идут все заглавные (прописные) буквы, затем строчные. Если необходимо сравнить длины строк, используйте функцию Len.

myRes = «семь» > «восемь» ‘myRes = True

myRes = «Семь» > «восемь» ‘myRes = False

myRes = Len(«семь») > Len(«восемь») ‘myRes = False

Оператор Is – сравнение ссылок на объекты

Оператор Is предназначен для сравнения двух переменных со ссылками на объекты.

Синтаксис:

Результат = Объект1 Is Объект2

  • Результат – любая числовая переменная;
  • Объект – переменная со ссылкой на любой объект.

Если обе переменные Объект1 и Объект2 ссылаются на один и тот же объект, Результат примет значение True. В противном случае результатом будет False.

Set myObj1 = ThisWorkbook

Set myObj2 = Sheets(1)

Set myObj3 = myObj1

Set myObj4 = Sheets(1)

myRes = myObj1 Is myObj2 ‘myRes = False

myRes = myObj1 Is myObj3 ‘myRes = True

myRes = myObj2 Is myObj4 ‘myRes = True

По-другому ведут себя ссылки на диапазоны ячеек. При присвоении ссылок на один и тот же диапазон нескольким переменным, в памяти создаются уникальные записи для каждой переменной.

Set myObj1 = Range(«A1:D4»)

Set myObj2 = Range(«A1:D4»)

Set myObj3 = myObj1

myRes = myObj1 Is myObj2 ‘myRes = False

myRes = myObj1 Is myObj3 ‘myRes = True

Оператор Like – сравнение строк по шаблону

Оператор Like предназначен для сравнения одной строки с другой по шаблону.

Синтаксис:

Результат = Выражение Like Шаблон

  • Результат – любая числовая переменная;
  • Выражение – любое выражение, возвращающее строку;
  • Шаблон – любое строковое выражение, которое может содержать знаки подстановки.

Строка, возвращенная аргументом Выражение, сравнивается со строкой, возвращенной аргументом Шаблон. Если обе строки совпадают, переменной Результат присваивается значение True, иначе – False.

myRes = «восемь» Like «семь»  ‘myRes = False

myRes = «восемь» Like «*семь»  ‘myRes = True

myRes = «Куда идет король» Like «идет»  ‘myRes = False

myRes = «Куда идет король» Like «*идет*»  ‘myRes = True

Со знаками подстановки для оператора Like вы можете ознакомиться в статье Знаки подстановки для шаблонов.

Excel для Microsoft 365 Excel для Microsoft 365 для Mac Excel 2021 Excel 2021 для Mac Excel 2019 Excel 2019 для Mac Excel 2016 Excel 2016 для Mac Excel 2013 Office для бизнеса Excel 2010 Excel 2007 Еще…Меньше

Чтобы сравнить данные в двух столбцах Microsoft Excel и найти повторяющиеся записи, воспользуйтесь следующими способами. 

Способ 1. Использование формулы на этом этапе

  1. Начните Excel.

  2. На новом примере введите следующие данные (оставьте столбец B пустым):

    A

    B

    C

    1

    1

    3

    2

    2

    5

    3

    3

    8

    4

    4

    2

    5

    5

    0

  3. Введите в ячейку B1 следующую

    формулу:=IF(ISERROR(MATCH(A1,$C$1:$C$5,0)),»»,A1)

  4. Выберем ячейку С1 по B5.

  5. В Excel 2007 и более поздних версиях Excel выберите Заполнить в группе Редактирование, а затем выберите Вниз.

    Повторяющиеся числа отображаются в столбце B, как в следующем примере: 

    A

    B

    C

    1

    1

    3

    2

    2

    2

    5

    3

    3

    3

    8

    4

    4

    2

    5

    5

    5

    0

Способ 2. Использование макроса Visual Basic макроса

Предупреждение: Корпорация Майкрософт предоставляет примеры программирования только для иллюстрации без гарантии, выраженной или подразумеваемой. Это относится и не только к подразумеваемой гарантии пригодности и пригодности для определенной цели. В этой статье предполагается, что вы знакомы с языком программирования, который демонстрируется, и средствами, используемыми для создания и от debug procedures. Инженеры службы поддержки Майкрософт могут объяснить функциональные возможности конкретной процедуры. Однако они не будут изменять эти примеры, чтобы обеспечить дополнительные функциональные возможности или процедуры по построению в необходимом порядке.

Чтобы использовать макрос Visual Basic для сравнения данных в двух столбцах, с помощью следующих действий:

  1. Запустите Excel.

  2. Нажмите ALT+F11, чтобы запустить Visual Basic редактора.

  3. В меню Вставка выберите Модуль.

  4. Введите следующий код на листе модуля:

    Sub Find_Matches()
    Dim CompareRange As Variant, x As Variant, y As Variant
    ' Set CompareRange equal to the range to which you will
    ' compare the selection.
    Set CompareRange = Range("C1:C5")
    ' NOTE: If the compare range is located on another workbook
    ' or worksheet, use the following syntax.
    ' Set CompareRange = Workbooks("Book2"). _
    ' Worksheets("Sheet2").Range("C1:C5")
    '
    ' Loop through each cell in the selection and compare it to
    ' each cell in CompareRange.
    For Each x In Selection
    For Each y In CompareRange
    If x = y Then x.Offset(0, 1) = x
    Next y
    Next x
    End Sub

  5. Нажмите ALT+F11, чтобы вернуться к Excel.

    1. Введите в качестве примера следующие данные (оставьте столбец B пустым):
       

      A

      B

      C

      1

      1

      3

      2

      2

      5

      3

      3

      8

      4

      4

      2

      5

      5

      0

  6. Выберем ячейку от A1 до A5.

  7. В Excel 2007 и более поздних версиях Excel выберите вкладку Разработчик, а затем в группе Код выберите макрос.

    Примечание: Если вкладка Разработчик не отключается, возможно, ее нужно включить. Для этого выберите Файл > параметры > настроитьленту , а затем выберите вкладку Разработчик в поле настройки справа.

  8. Щелкните Find_Matches, а затем нажмите кнопку Выполнить.

    Повторяющиеся числа отображаются в столбце B. Совпадающие числа будут поместиться рядом с первым столбцом, как показано ниже.

    A

    B

    C

    1

    1

    3

    2

    2

    2

    5

    3

    3

    3

    8

    4

    4

    2

    5

    5

    5

    0

Нужна дополнительная помощь?

7 / 7 / 1

Регистрация: 04.05.2012

Сообщений: 70

1

Сравнение двух столбцов листа и выведение совпавших данных

06.09.2012, 16:57. Показов 44221. Ответов 17


Студворк — интернет-сервис помощи студентам

Доброго времени суток.

Возникла такая потребность:
имеется лист со столбцами A и B. В столбце A находятся данные, которые нужно сравнить с имеющимися в столбце B. Сравнивать ячейку нужно со всем столбцом B (не по парам). Если данные совпадают, то в столбец C нужно вывести значение из A.
Сложность в том, что в столбце A данные представлены в формате ФамилияИмя, а в столбце B — ФамилияИмяОтчество (пример во вложении).

Помогите, пожалуйста составить макрос.
Спасибо.



0



7 / 7 / 1

Регистрация: 04.05.2012

Сообщений: 70

06.09.2012, 16:59

 [ТС]

2

Вот пример таблицы



0



1250 / 408 / 52

Регистрация: 14.06.2009

Сообщений: 629

06.09.2012, 17:14

3

Цитата
Сообщение от Aristakis
Посмотреть сообщение

Помогите, пожалуйста составить макрос.

Формулой.



1



Busine2012

1300 / 402 / 22

Регистрация: 21.10.2011

Сообщений: 1,285

06.09.2012, 17:18

4

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Sub Procedure_1()
 
    Dim lLastRowA As Long
    Dim lLastRowC As Long
    Dim i As Long
    Dim rFind As Excel.Range
    
    'Определяем, где заканчиваются данные в столбце A,
    'чтобы знать, до какой строки нам работать.
    lLastRowA = Cells(Rows.Count, "A").End(xlUp).Row
    
    'Определяем, с какой строки заносить данные в столбец C.
    lLastRowC = Cells(Rows.Count, "C").End(xlUp).Row + 1
    
    'Чтобы код быстро работал, отключаем обновление монитора.
    Application.ScreenUpdating = False
    
    'Просматриваем все ячейки в столбце A со второй строки и до
    'последней строки, содержащей данные.
    For i = 2 To lLastRowA Step 1
        'Ищем в столбце B. Поиск с помощью VBA похож на
        'поиск в самом Excel. Поиск будет вестись аналогично тому,
        'когда в диалогвом окне "Найти и заменить" снят флажок "Ячейка целиком".
        'В коде на это указывает: LookAt:=xlPart.
        
        'Поиск будет вестись по всему столбцу B. Если известно,
        'до какой строки в столбце B нужно вести поиск, то
        'нужно внести изменения в код.
        Set rFind = Columns("B").Find(What:=Cells(i, "A").Text, LookIn:=xlValues, _
            LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False)
            
        'Если есть результат поиска (т.е. есть совпадение),
        'то записываем данные из столбца A в свободную строку столбца C.
        If Not rFind Is Nothing Then
            Cells(lLastRowC, "C").Value = Cells(i, "A").Value
            'Записываем в переменную lLastRowC номер строки,
            'в которую нужно вставить следующие данные.
            lLastRowC = lLastRowC + 1
        End If
            
    Next i
    
    'Сообщение, что работа кода завершена.
    MsgBox "Работа кода завершена!", vbInformation
 
    'Включение обновления монитора.
    Application.ScreenUpdating = True
    
End Sub



2



7 / 7 / 1

Регистрация: 04.05.2012

Сообщений: 70

06.09.2012, 17:37

 [ТС]

5

Спасибо Вам за помощь!!!



0



PuHeL

19.11.2012, 18:03

6

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub CompareSub()
 
Dim ACell As Range
Dim BCell As Range
Dim CCell As Range
 
For Each ACell In Range("A2", Cells(Rows.Count, 1).End(xlUp))
    For Each BCell In Range("B2", Cells(Rows.Count, 2).End(xlUp))
     
     If BCell.Value = ACell.Value Then
     Cells(BCell.Row, 3).Value = BCell.Value
     BCell.Value = ""
     ACell.Interior.Color = 5296274
     End If
     
    Next
Next
 
End Sub

we2seek

84 / 84 / 42

Регистрация: 25.01.2010

Сообщений: 386

05.06.2013, 01:25

7

Цитата
Сообщение от PuHeL
Посмотреть сообщение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub CompareSub()
 
Dim ACell As Range
Dim BCell As Range
Dim CCell As Range
 
For Each ACell In Range("A2", Cells(Rows.Count, 1).End(xlUp))
    For Each BCell In Range("B2", Cells(Rows.Count, 2).End(xlUp))
     
     If BCell.Value = ACell.Value Then
     Cells(BCell.Row, 3).Value = BCell.Value
     BCell.Value = ""
     ACell.Interior.Color = 5296274
     End If
     
    Next
Next
 
End Sub

СПАСИБО! Чудный код!



0



17 / 1 / 2

Регистрация: 20.04.2016

Сообщений: 120

11.04.2017, 16:23

8

Доброго времени суток.
Подскажите как переделать макрос, что бы он перемещал не совпавшие и перемещал их на другой лист той же книги.



0



2784 / 716 / 106

Регистрация: 04.02.2011

Сообщений: 1,443

11.04.2017, 23:13

9

На скорую руку и для разового применения и функции ВПР могло хватить — взаимно проВПРить два столбца. А вообще, задача настолько распространенная в повседневных задачах, что удивляюсь, почему до сих пор нет какой-то кнопки в Excel для сравнения двух наборов данных.



0



17 / 1 / 2

Регистрация: 20.04.2016

Сообщений: 120

12.04.2017, 12:45

10

К сожалению мне не для разового применения. Каждую неделю нужно будет проверять чуть меньше 11000 ячеек.



0



2784 / 716 / 106

Регистрация: 04.02.2011

Сообщений: 1,443

12.04.2017, 14:42

11

Тогда макросы себя оправдают, точно.



0



4038 / 1423 / 394

Регистрация: 07.08.2013

Сообщений: 3,541

13.04.2017, 03:22

12

BSH,
пожалуйста приложите файлик с примером
в файлике важно названия столбцов (если таковые имеются)
немножко данных (соответственно левых — это просто из соображений конфиденциальности информации)
ну и опишите что нужно сделать
(как вариант описания — информацию из столбца D листа Лист1 сравнить с информацией столбца H листа Лист2 и при совпадении (не совпадении) информацию с листа Лист2 перенести на лист3)



0



17 / 1 / 2

Регистрация: 20.04.2016

Сообщений: 120

13.04.2017, 08:40

13

На странице «Разница приборов» находится главная таблица. На странице «Приборы» вводятся данные старые с листа «Разница приборов», и новые данные я их уже ввел. В новых данных есть новые приборы, которые нужно перенести на страницу «Разница приборов» в столбец «A» в конец.



0



snipe

4038 / 1423 / 394

Регистрация: 07.08.2013

Сообщений: 3,541

13.04.2017, 09:03

14

если я правильно понял условие задачи — то вот так

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub macro11()
Set objConnection = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
objConnection.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & ActiveWorkbook.Path & "/" & ActiveWorkbook.Name & ";" & _
"Extended Properties=""Excel 12.0;HDR=No"";"
Sheets("разница приборов").Select
Dim i&, j&
i = Cells(Rows.Count, 1).End(xlUp).Row
Sheets("Приборы").Select
j = Cells(Rows.Count, 1).End(xlUp).Row
sqlStr1 = "SELECT a2.f1 from [Приборы$a2:a" & j & "] as a2 Where a2.f1 not in (Select a3.f1 from [разница приборов$a3:a" & i & "] as a3)"
rs.Open sqlStr1, objConnection, 3, 3
Sheets("разница приборов").Cells(i + 1, 1).CopyFromRecordset rs
Set rs = Nothing
Set objConnection = Nothing
End Sub

код надо добавить отключением и включением обновления экрана — что бы не мерцало



1



BSH

17 / 1 / 2

Регистрация: 20.04.2016

Сообщений: 120

13.04.2017, 10:09

15

при выполнении выдает ошибку и останавливается

PureBasic
1
rs.Open sqlStr1, objConnection, 3, 3

Миниатюры

Сравнение двух столбцов листа и выведение совпавших данных
 



0



4038 / 1423 / 394

Регистрация: 07.08.2013

Сообщений: 3,541

13.04.2017, 10:19

16

вот файлик с кодом



1



2784 / 716 / 106

Регистрация: 04.02.2011

Сообщений: 1,443

13.04.2017, 13:26

17

Snipe, интересный подход, непривычный для таких задач. Как гарантировать наличие нужного провайдера конкретной версии — это связка с версией офиса?



0



4038 / 1423 / 394

Регистрация: 07.08.2013

Сообщений: 3,541

14.04.2017, 02:59

18

mc-black,
да этот провайдер привязан к офису
но таких провайдеров всего два
один для офисов 2003 и более пожилых — Microsoft.Jet.4.0 (вроде так называется)
а для более молодых вот этот — у меня офис 2010 и работает нормально с файлами xlsm
определить версию офиса можно программно и в зависимости от офиса переписывать строку Open

Добавлено через 7 минут
кстати сам макрос (как и пример) были созданы в офисе 2016



1



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

14.04.2017, 02:59

18

I would like to compare 2 cells’ value and see whether they are match or not.
I know how to do it on excel but I dont’ know how to put it vba code.

Input & output:

  1. The value of cell A1 is already in the excel.
  2. Manually enter a value in Cell B1.
  3. click on a button_click sub to see whether the value on 2 cells are the same or not.
  4. Show «Yes» or «No» on cell C1

Excel formula:

=IF(A1=B1,"yes","no")

asked Jan 21, 2015 at 15:55

pexpex223's user avatar

Give this a try:

Sub CompareCells()
    If [a1] = [b1] Then
        [c1] = "yes"
    Else
        [c1] = "no"
    End If
End Sub

Assign this code to the button.

answered Jan 21, 2015 at 15:58

Gary's Student's user avatar

Gary’s StudentGary’s Student

95.3k9 gold badges58 silver badges98 bronze badges

1

If (Range("A1").Value = Range("B1").Value) Then
    Range("C1").Value = "Yes"
Else
    Range("C1").Value = "No"
End If

Chrismas007's user avatar

Chrismas007

6,0654 gold badges23 silver badges47 bronze badges

answered Jan 21, 2015 at 16:03

Eswin's user avatar

EswinEswin

292 bronze badges

5

You can use the IIF function in VBA. It is similar to the Excel IF

[c1] = IIf([a1] = [b1], "Yes", "No")

answered Jan 21, 2015 at 16:47

Paul Kelly's user avatar

Paul KellyPaul Kelly

9057 silver badges13 bronze badges

1

Here is an on change Sub (code MUST go in the sheet module). It will only activate if you change a cell in column B.

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target is Nothing Then Exit Sub
    If Target.Cells.Count > 1 Then Exit Sub
    If Target.Column <> 2 Then Exit Sub
    If Cells(Target.Row, 1).Value = Cells(Target.Row, 2).Value Then
        Cells(Target.Row, 3).Value = "Yes"
    Else
        Cells(Target.Row, 3).Value = "No"
    End If
End Sub

For the record, this doesn’t use a button, but it accomplishes your goal of calculating if the two cells are equal any time you manually enter data into cells in Col B.

answered Jan 21, 2015 at 16:08

Chrismas007's user avatar

Chrismas007Chrismas007

6,0654 gold badges23 silver badges47 bronze badges

Sub CompareandHighlight()
    Dim n As Integer
    Dim sh As Worksheets
    Dim r As Range

    n = Worksheets("Indices").Range("E:E").Cells.SpecialCells(xlCellTypeConstants).Count
    Application.ScreenUpdating = False 

    Dim match As Boolean
    Dim valE As Double
    Dim valI As Double
    Dim i As Long, j As Long

    For i = 2 To n
        valE = Worksheets("Indices").Range("E" & i).Value
        valI = Worksheets("Indices").Range("I" & i).Value

        If valE = valI Then

        Else:                           
            Worksheets("Indices").Range("E" & i).Font.Color = RGB(255, 0, 0)
        End If
    Next i

    Application.ScreenUpdating = True
End Sub

barbsan's user avatar

barbsan

3,39811 gold badges21 silver badges28 bronze badges

answered Nov 21, 2018 at 9:29

Madhushree's user avatar

0

Поиск совпадений в двух списках

Тема сравнения двух списков поднималась уже неоднократно и с разных сторон, но остается одной из самых актуальных везде и всегда. Давайте рассмотрим один из ее аспектов — подсчет количества и вывод совпадающих значений в двух списках. Предположим, что у нас есть два диапазона данных, которые мы хотим сравнить:

Исходные списки для сравнения

Для удобства, можно дать им имена, чтобы потом использовать их в формулах и ссылках. Для этого нужно выделить ячейки с элементами списка и на вкладке Формулы нажать кнопку Менеджер Имен — Создать (Formulas — Name Manager — Create). Также можно превратить таблицы в «умные» с помощью сочетания клавиш Ctrl+T или кнопки Форматировать как таблицу на вкладке Главная (Home — Format as Table).

Подсчет количества совпадений

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

Количество совпадений формулой

В английской версии это будет =SUMPRODUCT(COUNTIF(Список1;Список2))

Давайте разберем ее поподробнее, ибо в ней скрыто пару неочевидных фишек.

Во-первых, функция СЧЁТЕСЛИ (COUNTIF). Обычно она подсчитывает количество искомых значений в диапазоне ячеек и используется в следующей конфигурации:

=СЧЁТЕСЛИ(Где_искать; Что_искать)

Обычно первый аргумент — это диапазон, а второй — ячейка, значение или условие (одно!), совпадения с которым мы ищем в диапазоне. В нашей же формуле второй аргумент — тоже диапазон. На практике это означает, что мы заставляем Excel перебирать по очереди все ячейки из второго списка и подсчитывать количество вхождений каждого из них в первый список. По сути, это равносильно целому столбцу дополнительных вычислений, свернутому в одну формулу:

Подсчет количества совпадений отдельным столбцом

Во-вторых, функция СУММПРОИЗВ (SUMPRODUCT) здесь выполняет две функции — суммирует вычисленные СЧЁТЕСЛИ совпадения и заодно превращает нашу формулу в формулу массива без необходимости нажимать сочетание клавиш Ctrl+Shift+Enter. Формула массива необходима, чтобы функция СЧЁТЕСЛИ в режиме с двумя аргументами-диапазонами корректно отработала свою задачу.

Вывод списка совпадений формулой массива

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

Вывод совпадений в двух списках формулой массива

В английской версии это будет, соответственно:

=INDEX(Список1;MATCH(1;COUNTIF(Список2;Список1)*NOT(COUNTIF($E$1:E1;Список1));0))

Логика работы этой формулы следующая:

  • фрагмент СЧЁТЕСЛИ(Список2;Список1), как и в примере до этого, ищет совпадения элементов из первого списка во втором
  • фрагмент НЕ(СЧЁТЕСЛИ($E$1:E1;Список1)) проверяет, не найдено ли уже текущее совпадение выше
  • и, наконец, связка функций ИНДЕКС и ПОИСКПОЗ извлекает совпадающий элемент

Не забудьте в конце ввода этой формулы нажать сочетание клавиш Ctrl+Shift+Enter, т.к. она должна быть введена как формула массива.

Возникающие на избыточных ячейках ошибки #Н/Д можно дополнительно перехватить и заменить на пробелы или пустые строки «» с помощью функции ЕСЛИОШИБКА (IFERROR).

Вывод списка совпадений с помощью слияния запросов Power Query

На больших таблицах формула массива из предыдущего способа может весьма ощутимо тормозить, поэтому гораздо удобнее будет использовать Power Query. Это бесплатная надстройка от Microsoft, способная загружать в Excel 2010-2013 и трансформировать практически любые данные. Мощь и возможности Power Query так велики, что Microsoft включила все ее функции по умолчанию в Excel начиная с 2016 версии. 

Для начала, нам необходимо загрузить наши таблицы в Power Query. Для этого выделим первый список и на вкладке Данные (в Excel 2016) или на вкладке Power Query (если она была установлена как отдельная надстройка в Excel 2010-2013) жмем кнопку Из таблицы/диапазона (From Table):

Загрузка списков в Power Query

Excel превратит нашу таблицу в «умную» и даст ей типовое имя Таблица1. После чего данные попадут в редактор запросов Power Query. Никаких преобразований с таблицей нам делать не нужно, поэтому можно смело жать в левом верхнем углу кнопку Закрыть и загрузить — Закрыть и загрузить в… (Close & Load To…) и выбрать в появившемся окне Только создать подключение (Create only connection):

Закрыть и загрузить в        Только подключение

Затем повторяем то же самое со вторым диапазоном.

И, наконец, переходим с выявлению совпадений. Для этого на вкладке Данные или на вкладке Power Query находим команду Получить данные — Объединить запросы — Объединить (Get Data — Merge Queries — Merge):

Объединение запросов в Power Query

В открывшемся окне делаем три вещи:

  1. выбираем наши таблицы из выпадающих списков
  2. выделяем столбцы, по которым идет сравнение
  3. выбираем Тип соединения = Внутреннее (Inner Join)

Слияние для выявления совпадающих строк

После нажатия на ОК на экране останутся только совпадающие строки:

Результат слияния

Ненужный столбец Таблица2 можно правой кнопкой мыши удалить, а заголовок первого столбца переименовать во что-то более понятное (например Совпадения). А затем выгрузить полученную таблицу на лист, используя всё ту же команду Закрыть и загрузить (Close & Load):

Выгрузка результатов на лист

Если значения в исходных таблицах в будущем будут изменяться, то необходимо не забыть обновить результирующий список совпадений правой кнопкой мыши или сочетанием клавиш Ctrl+Alt+F5

Макрос для вывода списка совпадений

Само-собой, для решения задачи поиска совпадений можно воспользоваться и макросом. Для этого нажмите кнопку Visual Basic на вкладке Разработчик (Developer). Если ее не видно, то отобразить ее можно через Файл — Параметры — Настройка ленты (File — Options — Customize Ribbon).

В окне редактора Visual Basic нужно добавить новый пустой модуль через меню Insert — Module и затем скопировать туда код нашего макроса:

Sub Find_Matches_In_Two_Lists()
    Dim coll As New Collection
    Dim rng1 As Range, rng2 As Range, rngOut As Range
    Dim i As Long, j As Long, k As Long

    Set rng1 = Selection.Areas(1)
    Set rng2 = Selection.Areas(2)
    Set rngOut = Application.InputBox(Prompt:="Выделите ячейку, начиная с которой нужно вывести совпадения", Type:=8)

    'загружаем первый диапазон в коллекцию
    For i = 1 To rng1.Cells.Count
        coll.Add rng1.Cells(i), CStr(rng1.Cells(i))
    Next i
    
    'проверяем вхождение элементов второго диапазона в коллекцию
    k = 0
    On Error Resume Next
    For j = 1 To rng2.Cells.Count
        Err.Clear
        elem = coll.Item(CStr(rng2.Cells(j)))
        If CLng(Err.Number) = 0 Then
            'если найдено совпадение, то выводим со сдвигом вниз
            rngOut.Offset(k, 0) = rng2.Cells(j)
            k = k + 1
        End If
    Next j
End Sub

Воспользоваться добавленным макросом очень просто. Выделите, удерживая клавишу Ctrl, оба диапазона и запустите макрос кнопкой Макросы на вкладке Разработчик (Developer) или сочетанием клавиш Alt+F8. Макрос попросит указать ячейку, начиная с которой нужно вывести список совпадений и после нажатия на ОК сделает всю работу:

Макрос поиска совпадений в двух списках

Более совершенный макрос подобного типа есть, кстати, в моей надстройке PLEX для Microsoft Excel.

Ссылки по теме

  • Поиск различий в двух списках Excel
  • Слияние двух списков без дубликатов (3 способа)
  • Что такое макросы, как их использовать, куда копировать код макросов на Visual Basic

VBA in Excel stands for Visual Basic for Applications which is Microsoft’s programming language. To optimize the performance and reduce the time in Excel we need Macros and VBA is the tool used in the backend.

Some helpful links to get more insights about Macros, VBA in Excel :

1. Record Macros in Excel.

2. How to Create a Macro in Excel?

In this article, we are going to discuss various comparison operators in Excel VBA.

Implementation :

In the Microsoft Excel tabs, select the Developer Tab. Initially, the Developer Tab may not be available. 

The Developer Tab can be enabled easily by a two-step process :

  • Right-click on any of the existing tabs in the top of the Excel window.
  • Now select Customize the Ribbon from the pop-down menu.

  • The Excel Options Box, check the box Developer to enable it and click on OK.

  • Now, the Developer Tab is visible.

  • Now click on the Visual Basic option in the Developer tab and make a new module to write the program.
Developer  -> Visual Basic -> Tools -> Macros

Now create a Macro and give any suitable name.

This will open the Editor window where can write the code.

Comparison Operators in Excel:

S.No. Operators

Definition

1 <>

 Not equal operator is used to compare two operands. If the two operands

are not equal it returns TRUE else it returns FALSE.

For example : A=10, B= 20

The condition will be TRUE for A <> B, since A and B are not equal.

2 =

 Equal operator is used to compare two operands. If the two operands

are equal it returns TRUE else it returns FALSE.

For example : A=20, B= 20

The condition will be TRUE for A = B, since A and B are equal.

3 >

Greater than operator checks whether the operand on the left hand side is strictly 

greater than the operand on RHS. If greater then it returns TRUE else FALSE.

For example : A=10, B= 5

The condition will be TRUE for A > B, since A is greater than B.

4 <

Less than operator checks whether the operand on the left hand side is strictly

less than the operand on RHS. If greater then it returns TRUE else FALSE.

For example : A=10, B= 5

The condition will be FALSE for A < B, since A is greater than B.

5 >=

Greater than equal to operator checks whether the operand on the left hand side is either

greater or equal to the operand on RHS. If greater or equal then it returns TRUE else FALSE.

For example : A=10, B=10

The condition will be TRUE for A >= B, since A is equal to B.

6 <=

Less than equal to operator checks whether the operand on the left hand side is either

lesser or equal to the operand on RHS. If lesser or equal then it returns TRUE else FALSE.

For example : A=5, B=10

The condition will be TRUE for A <= B, since A is less than B.

The comparison operators are mostly used with the If Else Then statement in Excel because comparison operators return TRUE if the condition is met and FALSE if not. 

The syntax of If Else in Excel is :

If condition/expression Then
    Code Block for True
Else
    Code Block for False
End If

Let’s take an example where values of A=-1 and B=-5 and see the code in Excel VBA for all the comparison operators.

1. Equal To and Not Equal To

Sub Comparison_Operator_Demo()
'Entering the numbers
Dim A As Integer: A = -1
Dim B As Integer: B = -5
'Condition for Equal To
If A = B Then
    MsgBox " A and B are equal"
Else
    MsgBox " A and B are not equal"
End If
End Sub

In the above code, If the condition becomes FALSE since A and B values are not the same. So the code block inside Else will be executed.

Sub Comparison_Operator_Demo()
'Entering the numbers
Dim A As Integer: A = -1
Dim B As Integer: B = -5
'Condition for Not Equal To
If A <> B Then
    MsgBox " True since A and B are not same"
Else
    MsgBox " False since A and B are same"
End If
End Sub

In the above code If the condition becomes TRUE since A and B are not same. So the code block inside If will be executed.

2. Greater than or Less than operator :

Sub Comparison_Operator_Demo()
'Entering the numbers
Dim A As Integer: A = -1
Dim B As Integer: B = -5
'Condition for Greater Than
If A > B Then
    MsgBox " A is greater than B"
Else
    MsgBox " A is not greater than B"
End If
End Sub

In the above code If the condition becomes TRUE since A is greater than B. So the code block inside If will be executed.

Sub Comparison_Operator_Demo()
'Entering the numbers
Dim A As Integer: A = -1
Dim B As Integer: B = -5
'Condition for Less Than
If A < B Then
    MsgBox "True because A is less than B"
Else
    MsgBox "False because A is greater than B"
End If
End Sub

In the above code If the condition becomes FALSE since A is greater than B. So the code block inside Else will be executed.

Similarly, you can do for Greater than equal to and Less than equal to operators.

Сравнение значений двух таблиц на 2 листах в одной книге.

skrpv1

Дата: Среда, 29.01.2020, 11:35 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 3


Репутация:

0

±

Замечаний:
0% ±


Excel 2019

Возникла задача, сравнить две таблицы на соответствие числовых значений. Две таблицы отчётности, в ячейках значения примерно с 10 знаками после запятой. Если есть несоответствие в какой-то ячейке, нужно подкрасить её, либо подкрасить все ячейки, где значения соответствуют. Есть макрос на сравнение, но он возможно не точно сравнивает, т.к. бывает, что значения в одной и той же ячейке в двух таблицах идентичные, но отмечает как несоответствие. Хотелось бы узнать у знающих, в чём может быть проблема.
[vba]

Код

Private Sub Find_Matches()
    Dim CompareRange As Range, x As Range, y As Range
    Set CompareRange = Worksheets(«Лист2»).Range(«B8:S295») ‘диапазон с которым сравнивают

        Application.ScreenUpdating = False
    Selection.Interior.ColorIndex = xlNone

        For Each y In CompareRange
        If Not IsEmpty(y) Then
           For Each x In Selection
               If InStr(1, x, y, vbTextCompare) > 0 Then x.Interior.Color = vbGreen
           Next x
        End If
    Next y

        Application.ScreenUpdating = True

        MsgBox «Данные проверены»
End Sub

В данном макросе выделяется первый проверяемый диапазон, в самом макросе прописывает диапазон ячеек, с которым нужно сравнить. Данный макрос также был взять из нета, часть понимаю, но углубленно нет т.к. в vba человек новый. Всем спасибо.

[/vba]

К сообщению приложен файл:

3547485.xlsx
(14.6 Kb)

Сообщение отредактировал skrpv1Среда, 29.01.2020, 14:39

 

Ответить

t330

Дата: Четверг, 30.01.2020, 14:49 |
Сообщение № 2

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 147


Репутация:

0

±

Замечаний:
20% ±


Excel 2016

Добрый день.
Ваш исходный макрос ( в коде ниже — Вар1 ) подсвечивает все ячейки , если находит в них строку из CompareRange …

Например , если в ячейке Листа 1 будет цифра 46.10056546546 (это x) , а в ячейке из диапазона CompareRange будет цифра 100 (это y ) ,

то debug.Print instr(1,46.10056546546,100,vbTextCompare) выдаст 4

Если Вам действительно нужно сравнить значения в ячейках двух одинаковых таблиц , то лучше воспользоваться варинатом номер 3 из кода ниже…

[vba]

Код

Option Explicit

Private Sub Find_MisMatches()
    Dim CompareRange As Range, x As Range, y As Range
    Set CompareRange = Worksheets(«Лист2»).Range(«B1:B12») ‘диапазон с которым сравнивают

        Application.ScreenUpdating = False
    Worksheets(«Лист1»).UsedRange.Interior.ColorIndex = xlNone

        ‘Вар1. Подсвечивает ячейки в диапазоне Worksheets(«Лист1»).Range(«D1:D12»)
    ‘если внутри строки из символов этой ячейки найдена хоть одно совпадение с ячейками из диапазона CampareRange
    For Each y In CompareRange
       ‘ Debug.Print y
        If Not IsEmpty(y) Then
        For Each x In Worksheets(«Лист1»).Range(«D1:D12»)
            If InStr(1, x, y, vbTextCompare) > 0 Then x.Interior.Color = vbGreen
        ‘Debug.Print x, y, InStr(1, x, y, vbTextCompare)
        Next x
        End If
    Next y

        Application.ScreenUpdating = True

            ‘Вар2. Подсвечивает ячейки в диапазоне Worksheets(«Лист1»).Range(«F1:F12»)
    ‘если ячейка из этого диапазона совпадает по значению с ЛЮБОЙ из ячеек из диапазона CompareRange
    For Each y In CompareRange

                If Not IsEmpty(y) Then
        For Each x In Worksheets(«Лист1»).Range(«F1:F12») ‘ циклом берем любую ячейку из диапазона CompareRange и сравниваем её значение с ячейкой в сравниваемом диапазоне Worksheets(«Лист1»).Range(«F1:F12»)
            If x = y Then x.Interior.Color = vbGreen
        Next x
        End If
    Next y

        ‘Вар3. Подсвечивает ячейки в диапазоне Worksheets(«Лист1»).Usedrange
    ‘если ячейка из диапазона в Листе 1 совпадает с ячейкой с таким же адресом из диапазона CompareRange

        Dim i As Integer, j As Integer  ‘ переменные для записи номеров строк и столбов в ячейках из дипазона Comparerange

        Set x = Worksheets(«Лист1»).UsedRange ‘ устанавливаем диапазон в котором надо подсветить совпадающие ячейки при сравнении с Comparerange

        For Each y In CompareRange

                If Not IsEmpty(y) Then
        i = y.Row ‘ записываем номер строки ячейки из Comparerange
        j = y.Column ‘записываем номер столбца ячейки из Comparerange
        If x(i, j) = y Then x(i, j).Interior.Color = vbGreen  ‘если данные в ячейке из сравниваемого диапазона на листе 1  совпадают с данными в ячейке из диапазона CampareRange с тем же номером строки и с тем же номер столбца, то подсвечиваем
        End If
    Next y

                    MsgBox «Данные проверены»
End Sub

[/vba]

Сообщение отредактировал t330Четверг, 30.01.2020, 14:58

 

Ответить

skrpv1

Дата: Четверг, 30.01.2020, 15:51 |
Сообщение № 3

Группа: Пользователи

Ранг: Прохожий

Сообщений: 3


Репутация:

0

±

Замечаний:
0% ±


Excel 2019

Излишнее цитирование удалено администрацией — это нарушение п.5j Правил форума

Огромное вам спасибо. Да, мне подходит 3 вариант вашего кода. Но такой вопрос. Таблица оригинальная, к которой я это применяю имеет диапазон ячеек для проверки B7:R291, как мне сделать проверку каждой ячейки листа 1 с каждой ячейкой листа 2 такого же диапазона? В первоначальном случае это делалось циклом «for», если я правильно понимаю. И получается в вашем 3-ем варианте, диапазон где подсвечиваются ячейки (х), он выделяется сам, т.е. целиком лист 1? Или мне самому нужно прописывать необходимые значения? Извините за глупые вопросы, повторюсь, нахожусь в стадии изучения.

Сообщение отредактировал китинЧетверг, 30.01.2020, 15:57

 

Ответить

t330

Дата: Четверг, 30.01.2020, 20:31 |
Сообщение № 4

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 147


Репутация:

0

±

Замечаний:
20% ±


Excel 2016

Обратите внимание , что в вашем исходном файле форматы некоторых чисел в листах не совпадают, хотя сами числа равны друг другу…

Например в ячейке B7 и в первом и во втором листе стоит цифра 11,6633333541895
но функция =ВПР(Лист1!B7;Лист2!B:B;1;0) показывает Н/Д (см в ячейке Лист1!B15)

Поэтому, чтобы сравнивать цифры в этих таблицах их приходится сначала преобразовывать в строки и потом сравнивать (строка 10 в коде ниже)…

Запускайте макрос и в диалоговом окне укажите диапазон ячеек из той таблицы с которой нужно сравнить таблицу в листе 1 в ячейках с одинаковым адресом.

[vba]

Код

Option Explicit

Private Sub Find_MisMatches()
    Dim CompareRange As Range, x As Range, y As Range, InitialSheet As Worksheet
    Dim i As Long, j As Long  ‘ переменные для записи номеров строк и столбов в ячейках из дипазона Comparerange

         Set InitialSheet = Worksheets(«Лист1») ‘ устанавливаем диапазон в котором надо подсветить совпадающие ячейки из листа 1 при сравнении с Comparerange. В данном случае выбирается диапазон со всеми когда-либо заполненными ячейками в Листе1
    Set CompareRange = Application.InputBox(«Укажите диапазон ячеек для сравнения», «Запрос данных», «B2:S10», Type:=8) ‘диапазон в листе 2 с которым сравнивают. В данном случае это все когда-либо заполненные ячейки в листе2

        Application.ScreenUpdating = False
    InitialSheet.UsedRange.Interior.ColorIndex = xlNone  ‘ очищаем заливку в  диапазоне где будем заливать совпадающие ячейки

        On Error Resume Next

            ‘Вар3. Подсвечивает ячейки в сравниваемом диапазоне , но только в тех ячейках ,
    ‘у которых тот же самый адрес , что и выбранном диаппазоне CompareRange

            ‘Если выбрано менее двух ячеек
     If CompareRange.Count = 1 Then
        MsgBox «Для отбора уникальных значений требуется указать более одной ячейки», vbInformation
        Exit Sub
     End If

          ‘если указаны только пустые ячейки вне рабочего диапазона
    If CompareRange Is Nothing Then
        MsgBox «Недостаточно данных для выбора значений», vbInformation
        Exit Sub
    End If

                ‘Запускаем цикл по каждой ячейке из Comparerange
    For Each y In CompareRange

                       i = y.Row ‘ записываем номер строки ячейки из Comparerange
        j = y.Column ‘записываем номер столбца ячейки из Comparerange

       10      If CStr(InitialSheet.Cells(i, j).Value) = CStr(CompareRange.Parent.Cells(i, j).Value) Then   ‘ здесь преобразовываем данные в ячейках в текстовый формат и сравниваем
        InitialSheet.Cells(i, j).Interior.Color = vbGreen ‘если данные в ячейке из сравниваемого диапазона на листе 1  совпадают с данными в ячейке из диапазона CompareRange с тем же номером строки и с тем же номер столбца, то подсвечиваем зеленым
      End If

            Next y
    MsgBox «Данные проверены»
End Sub

[/vba]

К сообщению приложен файл:

3834271.xlsm
(27.4 Kb)

 

Ответить

skrpv1

Дата: Пятница, 31.01.2020, 15:09 |
Сообщение № 5

Группа: Пользователи

Ранг: Прохожий

Сообщений: 3


Репутация:

0

±

Замечаний:
0% ±


Excel 2019

Обратите внимание , что в вашем исходном файле форматы некоторых чисел в листах не совпадают, хотя сами числа равны друг другу…

Например в ячейке B7 и в первом и во втором листе стоит цифра 11,6633333541895
но функция =ВПР(Лист1!B7;Лист2!B:B;1;0) показывает Н/Д (см в ячейке Лист1!B15)

Поэтому, чтобы сравнивать цифры в этих таблицах их приходится сначала преобразовывать в строки и потом сравнивать (строка 10 в коде ниже)…

Запускайте макрос и в диалоговом окне укажите диапазон ячеек из той таблицы с которой нужно сравнить таблицу в листе 1 в ячейках с одинаковым адресом.

Спасибо вам огромное за вашу помощь. Все предельно понятно. Удачи вам и успехов!

 

Ответить

Понравилась статья? Поделить с друзьями:
  • Сравнение документов в word 2007
  • Сравнение документов word 2016
  • Сравнение диапазонов двух excel таблиц
  • Сравнение диапазонов в excel на совпадения
  • Сравнение диапазонов vba excel