Макросы в excel для сравнения двух столбцов

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. Показов 44205. Ответов 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

Comparing columns of data manually is not a realistic approach when working with large data sets. Let us show you how to compare two columns in Excel using VBA and automate this process.

How to Compare two Columns in Excel

VBA has a built in function called  StrComp, which can compare two separate strings. This function returns an integer based on the result of the comparison. Zero ‘0′ means a perfect match, and the sample code we give below highlights the cell if the result is NOT equal to 0.

StrComp function gets 3 arguments. First 2 arguments are the strings to be compared, and the last one is the comparison type. Note that the third argument is optional. If not omitted, the Option Compare setting will determine the type of comparison. Below are available options:

  • vbUseCompareOption: Performs a comparison using the setting of the Option Compare statement.
  • vbBinaryCompare: Performs a binary comparison. Case sensitive.
  • vbTextCompare: Performs a textual comparison. Not case sensitive.
  • vbDatabaseCompare: Performs a comparison based on information in your database. Microsoft Access only.

The code requires the user to select columns in a single range. Selected range is assigned to a range variable bothcolumns, and each cell in that range is compared row by row. With statement allows us to not use bothcolumns every time, and the For…Next loop is how we can check for every cell.

Highlighting

After you get the range, you can use the ColorIndex property to set that range a color. Below are some index numbers for colors:

  • 3: Red
  • 5: Blue
  • 6: Yellow
  • 0: No Fill

First, you need to add the module into the workbook or the add-in file to be able to use the code. Copy and paste the code into the module to run it. The main advantage of the module method is that it allows saving the code in the file, so that it can be used again later. Furthermore, the subroutines in modules can be used by icons in the menu ribbons or keyboard shortcuts. Remember to save your file in either XLSM or XLAM format to save your VBA code.

Highlight differences

Sub HighlightColumnDifferences()

    Dim bothcolumns As Range, i As Integer

    Set bothcolumns = Selection

    With bothcolumns

        For i = 1 To .Rows.Count

            If Not StrComp(.Cells(i, 1), .Cells(i, 2), vbBinaryCompare) = 0 Then

                Range(.Cells(i, 1), .Cells(i, 2)).Interior.ColorIndex = 6

            End If

        Next i

    End With

End Sub

Всем добрый день. Вопрос такой. Есть макрос, который сравнивает данные первого столбца с данными второго столбца, и если данные во втором столбце повторяются, он их красит. Так вот такой вопрос, как можно исправить данный макрос, что бы он красил только второе повторение, третье и так далее.  

  Sub DeleteDubls()  
Const intDataCol = 5  
Const intMaxRow = 140  
   Dim i%, j%  
   Dim strValue1$, strValue2$  
   For i = 2 To intMaxRow — 1  
       strValue1 = Trim(Cells(i, intDataCol))  
       For j = i + 1 To intMaxRow  
           strValue2 = Trim(Cells(j, intDataCol))  
           If StrComp(strValue1, strValue2, vbTextCompare) = 0 Then  
               Cells(j, intDataCol).Interior.ColorIndex = 4  
           End If  
       Next  
   Next  
End Sub  

  Файл с тем как должно выглядеть прикреплен

Сравнение двух столбцов макрос

Kastielle

Дата: Пятница, 22.03.2013, 15:58 |
Сообщение № 1

Добрый день!
Очень прошу помощи в доработке макроса.

Дано:

A | B |
——————————
10.0.10.14 | 10.0.10.16 |
10.0.10.15 | 10.0.10.14 |
10.0.10.16 | 10.0.10.23 |

Хочется:

A | B | Нет совпадений |
—————————————————————————————
10.0.10.14 (зелененьким) | 10.0.10.16 (зелененьким) | 10.0.10.15
10.0.10.15 | 10.0.10.14 (зелененьким) | 10.0.10.23
10.0.10.16 (зелененьким) | 10.0.10.23 |

Или как грамотнее решить такую задачу. Заранее спасибо за любую помощь!

[vba]

Код

Sub s_Test()
Dim v_Sh As Worksheet
Dim v_Rng As Range, v_Cell As Range
Dim v_Var As Double

Set v_Sh = ActiveSheet
Set v_Rng = Intersect(v_Sh.Columns(1), v_Sh.UsedRange)

On Error Resume Next
For Each v_Cell In v_Rng.Cells
If v_Cell <> Empty Then
v_Var = WorksheetFunction.Match(v_Cell, v_Sh.Columns(2), 0)
If Err.Number <> 0 Then
Cells(v_Cell, 5) = Cells(v_Cell, 1)
Err.Clear
Else
v_Cell.Interior.ColorIndex = 4
End If
End If
Next v_Cell
End Sub

[/vba]

 

Ответить

Jhonson

Дата: Пятница, 22.03.2013, 16:11 |
Сообщение № 2

Группа: Друзья

Ранг: Ветеран

Сообщений: 514

Для

Цитата (Kastielle)

10.0.10.14 (зелененьким)

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

Цитата (Kastielle)

| Нет совпадений |

не понятно, что вы хотите.

P.S. Прочитайте правила!

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

12.xls
(26.5 Kb)


«Ничто не приносит людям столько неприятностей, как разум.»

Сообщение отредактировал JhonsonПятница, 22.03.2013, 16:12

 

Ответить

Kastielle

Дата: Пятница, 22.03.2013, 16:25 |
Сообщение № 3

Большое спасибо за ответ. Правила прочитал.
Столбец А — адреса1
Столбец B — адреса 2
Столбец C — нет совпадений. Куда помещаются значения из ячеек, которые содержатся только в А или только в B

 

Ответить

KuklP

Дата: Пятница, 22.03.2013, 16:35 |
Сообщение № 4

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

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

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


2003-2010

Цитата (Kastielle)

Правила прочитал.

Конкретно, П.3 прочитайте внимательно.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

Kastielle

Дата: Пятница, 22.03.2013, 16:49 |
Сообщение № 5

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

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

Сообщений: 4


Репутация:

0

±

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


Прочитал. Зарегистрировался. Пример файла прилагаю.

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

4233937.xls
(46.5 Kb)

 

Ответить

Формуляр

Дата: Пятница, 22.03.2013, 18:00 |
Сообщение № 6

Группа: Друзья

Ранг: Ветеран

Сообщений: 832


Репутация:

255

±

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


Excel 2003, 2013

Цитата (Kastielle)

Очень прошу помощи в доработке макроса.

А зачем обязательно макросом?
Любим трудности? biggrin

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

1066525.xls
(54.0 Kb)


Excel 2003 EN, 2013 EN

Сообщение отредактировал ФормулярПятница, 22.03.2013, 18:01

 

Ответить

Kastielle

Дата: Пятница, 22.03.2013, 22:26 |
Сообщение № 7

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

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

Сообщений: 4


Репутация:

0

±

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


Формуляр, низкий поклон тебе и ОГРОМЕННОЕ спасибо! Чувствуется рука Гуру)

 

Ответить

ikki

Дата: Пятница, 22.03.2013, 23:33 |
Сообщение № 8

Группа: Друзья

Ранг: Старожил

Сообщений: 1906


Репутация:

504

±

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


Excel 2003, 2010

[offtop]руки гуру — такие штуки
вырастают лишь там где надо
на концах у них растут пальцы
а на пальцах у гуру ногти
под ногтями сидит мудрилка
пишет макросы всяко-разно
или формулы там и проча
а мозги для гур не потребны
не почувствовать не потрогать
да и выглядят некрасиво
то ли дело у гуру — руки!
(впрочем ноги наверно тоже)[/offtop]


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki

Сообщение отредактировал ikkiПятница, 22.03.2013, 23:34

 

Ответить

Kastielle

Дата: Суббота, 23.03.2013, 11:18 |
Сообщение № 9

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

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

Сообщений: 4


Репутация:

0

±

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


Прошу прощения за нубство, а как модернизировать эту формулу на 5000 строк а не на 16 ? Пишет нельзя изменять часть массива(

 

Ответить

ikki

Дата: Суббота, 23.03.2013, 11:23 |
Сообщение № 10

Группа: Друзья

Ранг: Старожил

Сообщений: 1906


Репутация:

504

±

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


Excel 2003, 2010

это формула массива и введена она в диапазон ячеек
выделяете бОльший диапазон — например, C2:C5000
в строке формул меняете формулу (16 на 5000, везде, где встретится)
нажимаете Ctrl+Shift+Enter

пс. но на 5000, скорее всего, это будет очень долго пересчитываться.
лучше макрос.


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki

 

Ответить

Kastielle

Дата: Суббота, 23.03.2013, 14:30 |
Сообщение № 11

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

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

Сообщений: 4


Репутация:

0

±

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


ikki, спасибо, Вы правы. Формулу изменил по вышей инструкции, но ее отработка на 5000 строк занимает 43 минуты по одному столбцу. Поэтому всё таки прошу помощи с макросом.

 

Ответить

ikki

Дата: Суббота, 23.03.2013, 15:32 |
Сообщение № 12

Группа: Друзья

Ранг: Старожил

Сообщений: 1906


Репутация:

504

±

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


Excel 2003, 2010


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki

 

Ответить

ABC

Дата: Суббота, 23.03.2013, 16:13 |
Сообщение № 13

Группа: Друзья

Ранг: Обитатель

Сообщений: 397


Репутация:

112

±

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


Excel 2007


MS Excel 2007 and 2010…
——————————-
С Уважением, Даулет

 

Ответить

Понравилась статья? Поделить с друзьями:
  • Макросы в excel для сортировки
  • Макросы vba в excel android
  • Макросы в excel активная строка
  • Макросы в excel для скрытого листа
  • Макросы vba в excel 2013