7 / 7 / 1 Регистрация: 04.05.2012 Сообщений: 70 |
|
1 |
|
Сравнение двух столбцов листа и выведение совпавших данных06.09.2012, 16:57. Показов 44221. Ответов 17
Доброго времени суток. Возникла такая потребность: Помогите, пожалуйста составить макрос.
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 |
Помогите, пожалуйста составить макрос. Формулой.
1 |
Busine2012 1300 / 402 / 22 Регистрация: 21.10.2011 Сообщений: 1,285 |
||||
06.09.2012, 17:18 |
4 |
|||
2 |
7 / 7 / 1 Регистрация: 04.05.2012 Сообщений: 70 |
|
06.09.2012, 17:37 [ТС] |
5 |
Спасибо Вам за помощь!!!
0 |
PuHeL |
||||
19.11.2012, 18:03 |
6 |
|||
|
we2seek 84 / 84 / 42 Регистрация: 25.01.2010 Сообщений: 386 |
||||
05.06.2013, 01:25 |
7 |
|||
СПАСИБО! Чудный код!
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,
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 |
|||
если я правильно понял условие задачи — то вот так
код надо добавить отключением и включением обновления экрана — что бы не мерцало
1 |
BSH 17 / 1 / 2 Регистрация: 20.04.2016 Сообщений: 120 |
||||
13.04.2017, 10:09 |
15 |
|||
при выполнении выдает ошибку и останавливается
Миниатюры
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, Добавлено через 7 минут
1 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
14.04.2017, 02:59 |
18 |
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. Использование формулы на этом этапе
-
Начните Excel.
-
На новом примере введите следующие данные (оставьте столбец B пустым):
A
B
C
1
1
3
2
2
5
3
3
8
4
4
2
5
5
0
-
Введите в ячейку B1 следующую
формулу:=IF(ISERROR(MATCH(A1,$C$1:$C$5,0)),»»,A1)
-
Выберем ячейку С1 по B5.
-
В 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 для сравнения данных в двух столбцах, с помощью следующих действий:
-
Запустите Excel.
-
Нажмите ALT+F11, чтобы запустить Visual Basic редактора.
-
В меню Вставка выберите Модуль.
-
Введите следующий код на листе модуля:
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
-
Нажмите ALT+F11, чтобы вернуться к Excel.
-
Введите в качестве примера следующие данные (оставьте столбец B пустым):
A
B
C
1
1
3
2
2
5
3
3
8
4
4
2
5
5
0
-
-
Выберем ячейку от A1 до A5.
-
В Excel 2007 и более поздних версиях Excel выберите вкладку Разработчик, а затем в группе Код выберите макрос.
Примечание: Если вкладка Разработчик не отключается, возможно, ее нужно включить. Для этого выберите Файл > параметры > настроитьленту , а затем выберите вкладку Разработчик в поле настройки справа.
-
Щелкните Find_Matches, а затем нажмите кнопку Выполнить.
Повторяющиеся числа отображаются в столбце B. Совпадающие числа будут поместиться рядом с первым столбцом, как показано ниже.
A
B
C
1
1
3
2
2
2
5
3
3
3
8
4
4
2
5
5
5
0
Нужна дополнительная помощь?
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
Перейти к основному содержанию
Статья даёт ответы на следующие вопросы:
- Как сравнить две таблицы в Excel с помощью макросов VBA?
- Как обращаться к ячейкам таблицы Excel с помощью VBA?
- Как осуществлять перебор ячеек таблицы в цикле с помощью VBA?
В предыдущей статье Сравнение таблиц в Excel мы рассмотрели подход к сравнению сложных таблиц с использованием формул и без программирования.
В данной статье рассмотрим способ сравнения таблиц Excel с помощью VBA макросов на примере тех же исходных данных.
Проиллюстрируем задачу картинкой из первой статьи.
Для начала напишем алгоритм наших действий по сравнению таблиц.
- Определим диапазоны данных первой и второй таблицы, то есть найдем последние значимые строки и сохраним их номера в переменных (последняя строка таблицы 1 — last_i и последняя строка таблицы 2 — last_j).
- Начнем проходить по каждой строке таблицы 2 (внешний цикл), данные из которой нужно перенести в таблицу 1. С первой строки данных (в примере это строка 3) до последней строки таблицы 2.
- Для каждой строки таблицы 2 определим идентификатор строки, путем формирования строки, содержащей полный адрес квартиры (значения из нескольких колонок, разделенные дефисами).
- Начнем проходить по каждой строке таблицы 1 (внутренний цикл) с первой строки данных (в примере это строка 3) до последней строки таблицы 1, определяя при этом идентификатор строки.
- Сравним значения идентификаторов строк таблицы 1 и таблицы 2.
- Если идентификаторы равны, перепишем ФИО покупателя из ячейки таблицы 2 в соответствующую ячейку таблицы 1; прервем внутренний цикл по таблице 1 и перейдем к следующей строке таблицы 2 (переход к п.2).
Теперь остается реализовать алгоритм в виде программного кода макроса.
Для этого откроем вкладку Вид ленты функций Excel. Щелкнем на нижнюю часть со стрелкой кнопки Макросы. В открывшемся подменю выберем Запись макроса. В результате начнется запись нового макроса. Поскольку код мы будем формировать вручную, то еще раз зайдем в подменю макросов и выберем Остановить запись. Далее еще раз войдем в подменю макросов и выберем Макросы.
В появившемся диалоге выделим наш макрос и нажмем Изменить.
На экране откроется окно редактора макросов 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
- сравнение таблиц
- VBA
- макросы
На чтение 2 мин Просмотров 46
Как сравнить значения в двух столбцах таблицы excel и найти повторяющиеся.
Способ 1. Использование простой формулы
Данный способ сравнения подходит для столбцов любой длинны.
Алгоритм:
- Столбцы для сравнения располагаются на одном листе Excel (не обязательно, чтоб они находились рядом).
- Вписываем формулу =ЕСЛИ(A2=B2;”Совпадают”;”Не совпадают”). Где, А2 и В2 – адрес ячейки.
- Еще одна формула =ЕСЛИ(A2<>B2; “Не совпадают”;”Совпадают”).Где, А2 и В2 – адрес ячейки.
- Перетаскиваем ее вниз, до конца столбика.
Видеоинструкция: Как сравнить столбцы в Excel на совпадения с помощью формулы.
Способ 2. Использование макроса Visual Basic
Макросы – программные алгоритмы действий, записанные пользователем.
Сам макрос выглядит следующим образом и сравнивает столбец А со столбцом В. В столбцах может быть неограниченное количество заполненных ячеек.
Макрос:
Sub Sravnenie()
‘название указано выше, оно должно быть одинаковым, иначе программа не будет работать
Dim PosStr As Long
Dim FormStr As Long
PosStr = Cells(1, 1).CurrentRegion.Rows.Count
ActiveSheet.Cells(PosStr, 3).Select
ActiveCell.FormulaR1C1 = “=IF(RC[-2]=RC[-1],””Совпадают””,””Не совпадают””)”
Selection.AutoFill Destination:=Range(Cells(1, 3), Cells(PosStr, 3)), Type:=xlFillDefault
End Sub
Способ 3: Условное форматирование
Способ Условного форматирования основывается на создании пользователем правила, а затем уже сравнения 2 столбцов за правилом. В данном случае мы будем окрашивать ячейки второго столбика в цвета в зависимости от совпадения, или несовпадения данных.
- Выделяем данные столбца В и выбираем Условное форматирование.
- Создаем правило.
- Настраиваем правило и выбираем для сравнения ячейку А2. Обратите внимание, что программа Excel по умолчанию вписывает для сравнения не =$A2, а =$A$2. Если оставить формулу в таком виде, то все ячейки столбца В будут сравнивать с ячейкой А2.