Перейти к основному содержанию
Статья даёт ответы на следующие вопросы:
- Как сравнить две таблицы в 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
- макросы
Davidov.p.v Пользователь Сообщений: 5 |
Добрый утро! Помогите начинающему пользователю составить макрос либо скрипт для сравнения двух таблиц. Задача такова. Есть две таблицы в них значения ФИО, Ставка, должность, ЗП одинаковые, но стоят в разных столбцах, их необходимо сравнить и в таблице номер один записать Название отдела в соответствующе строке. А если есть ошибка то помечать ячейку, которая отличается цветом. Файл оригинал и что должно получиться прикрепляю. Заранее огромное спасибо за помощь! |
Ts.Soft Пользователь Сообщений: 576 |
Написать макрос несложно. Проблема в организации данных — в двух таблицах нет единого ключевого поля. Только не нужно рассказывать, что последовательность сотрудников в обеих таблицах всегда будет совпадать — в реальность Вы столкнётесь когда в них будет даже разное количество строк. Вот если бы во второй таблице был бы табельный номер… Фамилия в качестве ключевого поля не подходит, бывает встречаются однофамильцы, кстати на одном из моих предыдущих мест работы их четырёхсот работников было пять Ивановых, причём у троих совпадали инициалы, а двое были полными тёзками. Так же одну фамилию можно написать по разному, например Семёнов и Семенов — для макроса это будут разные фамилии. Не стреляйте в тапера — он играет как может. |
Jack Famous Пользователь Сообщений: 10852 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
Davidov.p.v, здравствуйте! Hugo (местный умный планетянин) Изменено: Jack Famous — 18.06.2016 10:34:40 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
Davidov.p.v Пользователь Сообщений: 5 |
#4 18.06.2016 11:28:46
В таблице уникальное поле это ФИО, абсолютно точно нет совпадений.
Количество строк действительно разное.
Фамилию можно взять как ключевое слово однофамильцев точно нет.
Вот это может быть я не представляю как это можно исправить. Если только сравнить столбцы фамилии сначала и вывести не совпадении одной либо двух букв как вариант.
Как вариант после сравнения каждой строки помечать ее цветом. Jack Famous, спасибо это я уже видел я нашел похожий на то что мне надо не большой макрос но он не информативный в плане ошибок в строке.
Изменено: Davidov.p.v — 18.06.2016 22:47:05 |
||||||||||||
Ts.Soft Пользователь Сообщений: 576 |
Davidov.p.v, как Вы думаете, зачем давным-давно для идентификации сотрудников придумали табельный номер? Это сегодня у Вас нет однофамильцев, а завтра кто-то уволился, кто-то устроился… Или Вы при приёме на работу будете отказывать однофамильцам уже существующих сотрудников? Так это нарушение Трудового кодекса — вот в инспекции по труду посмеются… А вообще это постоянная проблема при постановке задачи — никто не думает о том что может быть завтра. Я уже не сосчитаю сколько раз мне говорили: «такого у нас нет, не было и никогда не будет», проходило какое-то время, что-то менялось и ко мне прибегали с криком «программа не работает!!!» или «нам надо так, а программа это не позволяет», полностью забыв свои слова «такого у нас нет, не было и никогда не будет». Не стреляйте в тапера — он играет как может. |
Davidov.p.v Пользователь Сообщений: 5 |
Ts.Soft, я согласен но тут одноразовая проверка 2000 сотрудников. И проверять 2000 записей руками как то не очень есть хорошо, когда век компьютерных технологий.. |
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#7 18.06.2016 12:27:05 Доброе время суток
О, это да, и в школе информатика, а в институте программирование. Тогда где ваши попытки? А то пока
|
||||
Ts.Soft Пользователь Сообщений: 576 |
Davidov.p.v, ну если временно, то смотрите что получилось. Кстати, у Вас сразу выскакивают ошибки в должностях: на одном листе «продавец-консультант», а на другом уже «продавец-консультант запчастей» Изменено: Ts.Soft — 18.06.2016 14:07:01 Не стреляйте в тапера — он играет как может. |
Ts.Soft Пользователь Сообщений: 576 |
#9 18.06.2016 13:28:20
Не верю. Я видел молодых экономистов/бухгалтеров и т.п. — они даже аккаунт в одноклассниках без посторонней помощи создать не могут… Не стреляйте в тапера — он играет как может. |
||
Юрий М Модератор Сообщений: 60588 Контакты см. в профиле |
#10 18.06.2016 13:30:31
И на этом основании можно сделать вывод, что программирование в (непрофильных) вузах не преподают? )) |
||
Davidov.p.v Пользователь Сообщений: 5 |
Ts.Soft, Огромное СПАСИБО. Все работает как я и хотел. ЕЩЕ РАЗ СПАСИБО. Вы меня спасли от очень муторной и кропотливой работы которую я бы выполнял месяц. Изменено: Davidov.p.v — 19.06.2016 21:24:27 |
Davidov.p.v Пользователь Сообщений: 5 |
#12 19.06.2016 21:23:09
Так как один, это выгрузка из 1С, а второй это пишет другой сотрудник. |
||
Добро пожаловать на StackOverflow, Илья!
На самом деле это не очень сложная задача. Её можно разбить на четыре простых фрагмента:
- перебрать ячейки диапазона по одной;
- отыскать значение ячейки в другом листе той же книги
- убедиться, что такой лист ещё не создан
- добавить лист в книгу
Собрать всё это вместе не намного труднее, чем сложить конструктор Лего:
Sub CreateSheetsForDoubles()
Dim aRange1 As Range, aRange2 As Range ' Диапазоны ячеек с именами - первый и второй список
Dim oCell As Range ' Одна ячейка, чтобы перебрать каждую из ячеек в первом диапазоне
Dim sNextName As String ' Текст из ячейки oCell
Dim vResOfMatch As Variant ' Результат поиска sNextName во втором списке - или номер строки, или ошибка
Dim sRes As String ' Текст финального сообщения - имена созданых листов
Dim ws As Worksheet ' Переменная для проверки "лист с таким именем уже существует?"
Dim sheet As Worksheet ' Переменная для новых листов
Set aRange1 = [Лист1!A1:A10] ' Диапазоны можно задать так...
Set aRange2 = Worksheets("Лист2").Range("A1:A10") ' ...или так. Или спросить в диалоге
For Each oCell In aRange1 ' Для каждой ячейки в первом списке
sNextName = Trim(oCell.Text) ' Взять её текстовое представление без оконечных пробелов
If sNextName <> vbNullString Then ' Если текст в ячейке есть (если она не пустая)
vResOfMatch = Application.Match(sNextName, aRange2, 0) ' Попытаться отыскать это значение во втором списке
If Not IsError(vResOfMatch) Then ' Если не ошибка, значит во втором списке это имя есть
Set ws = Nothing ' Проверить, нет ли уже листа с таким именем (в случае, если макрос запускается повторно)
On Error Resume Next
Set ws = Worksheets(sNextName)
On Error GoTo 0
If ws Is Nothing Then ' Нет, в єтой книге листа с таким именем нет
If Len(sRes) > 0 Then sRes = sRes & ", " ' Дополнить список найденных имён
sRes = sRes & sNextName
Rem Создать лист, присвоить ему имя и вписать в первую ячейку то же самое имя
Set sheet = ActiveWorkbook.Sheets.Add(After:=ActiveWorkbook.Worksheets(ActiveWorkbook.Worksheets.Count))
sheet.Name = sNextName
sheet.[A1].Value = sNextName
End If
End If
End If
Next oCell
Rem В конце сообщить о результатах выполнения макроса
If Len(sRes) = 0 Then
Call MsgBox("Нет имен для новых листов")
Else
Call MsgBox("Созданы листы для " & sRes)
End If
End Sub
Надеюсь, это поможет удачно стартовать в программировании. Успехов!
0 / 0 / 0 Регистрация: 29.04.2009 Сообщений: 63 |
|
1 |
|
16.03.2010, 22:28. Показов 26520. Ответов 22
Форумчане, доброго времяни суток) Ситуация:
0 |
1904 / 781 / 31 Регистрация: 11.02.2010 Сообщений: 1,567 |
|
16.03.2010, 22:52 |
2 |
здесь посмотри определение кол-ва столбцов Добавление столбца.
1 |
0 / 0 / 0 Регистрация: 29.04.2009 Сообщений: 63 |
|
16.03.2010, 23:25 [ТС] |
3 |
А можно если тя не затруднить на примере показать,ну чтоб наглядно иметь представление. Например Табл1 с записями: Фамилия Пол Диагноз Отделение ,начинается с ячейки c3 и Табл2 с записями начинается с ячейки k3
0 |
1904 / 781 / 31 Регистрация: 11.02.2010 Сообщений: 1,567 |
|
17.03.2010, 07:04 |
4 |
вот держи сравнение заголовков на скорую руку. надо еще дописать цикл сравнения строк. просто времени пока нет
1 |
0 / 0 / 0 Регистрация: 29.04.2009 Сообщений: 63 |
|
17.03.2010, 21:07 [ТС] |
5 |
Спасибо,большое!
0 |
1904 / 781 / 31 Регистрация: 11.02.2010 Сообщений: 1,567 |
|
18.03.2010, 06:37 |
6 |
вот со сравнением всех строк. сразу оговорюсь, способ сравнения не лучший, но годится для тех данных, о которых ты писал, и он весьма простой. возможно этого будет достаточно
1 |
0 / 0 / 0 Регистрация: 29.04.2009 Сообщений: 63 |
|
19.03.2010, 20:31 [ТС] |
7 |
Добрый вечер,спасибо за помощь,можно еще вопрос?
0 |
ironegg 1904 / 781 / 31 Регистрация: 11.02.2010 Сообщений: 1,567 |
||||||
20.03.2010, 07:13 |
8 |
|||||
1.открываем лист, на котором есть таблицы, ставим курсор в любую свободную ячейку, нажимаем кнопку fx рядом со строкой формул.
Вложения
2 |
1904 / 781 / 31 Регистрация: 11.02.2010 Сообщений: 1,567 |
|
20.03.2010, 07:16 |
9 |
не применяй эту функцию, если от надежности результатов зависит: благополучие космического полета, стабильность ядерной реакции, величина твоей зарплаты и(или) т.д.
1 |
0 / 0 / 0 Регистрация: 29.04.2009 Сообщений: 63 |
|
21.03.2010, 12:57 [ТС] |
10 |
Спасибо Excel гуру!
0 |
1904 / 781 / 31 Регистрация: 11.02.2010 Сообщений: 1,567 |
|
21.03.2010, 13:18 |
11 |
excel2002
1 |
0 / 0 / 0 Регистрация: 29.04.2009 Сообщений: 63 |
|
21.03.2010, 18:14 [ТС] |
12 |
разобрался))) сделал как надо) можешь по возможности объяснить как ComboBox робит?
0 |
1904 / 781 / 31 Регистрация: 11.02.2010 Сообщений: 1,567 |
|
21.03.2010, 18:33 |
13 |
в отдельную тему и подробное описание проблеммы
1 |
0 / 0 / 0 Регистрация: 29.04.2009 Сообщений: 63 |
|
21.03.2010, 20:22 [ТС] |
14 |
Привет а когда сравниваешь строки можно учесть такой момент,что при перемене их местами результат равенства не менялся,столбци ведь так сделаны? Добавлено через 13 минут
0 |
1904 / 781 / 31 Регистрация: 11.02.2010 Сообщений: 1,567 |
|
21.03.2010, 21:31 |
15 |
ну ничесе ты условия меняешь придется делать настоящее сравнение. скопируем таблицы на вспомогательный лист, упорядочим по заглавиям столбцов, потом по строкам, потом будем сравнивать. как то так.
1 |
0 / 0 / 0 Регистрация: 29.04.2009 Сообщений: 63 |
|
21.03.2010, 22:31 [ТС] |
16 |
Спасибо,вот я тут поправил чуть твой код, ну чтоб на кнопку жмякать, остается со строкими повозится. Столбци в полне устрайвают, что при их вариотивности результат положительный,и строки бы воть так же…я фаил прикрепил.Спасибо большое
0 |
0 / 0 / 0 Регистрация: 29.04.2009 Сообщений: 63 |
|
22.03.2010, 23:43 [ТС] |
17 |
Привет, очень прошу, скоротай пожалуйста время,код поправить, очень надо,а то на этом сравнении вся мысля и заключалась…,а у меня чет не ладится
0 |
ironegg 1904 / 781 / 31 Регистрация: 11.02.2010 Сообщений: 1,567 |
||||||
29.03.2010, 22:12 |
18 |
|||||
по многочисленным просьбам трудящихся
возможно, понадобиться добавить ссылку на «веб компоненты офис ХР» (Tools — References — Browse — C:Program FilesCommon FilesMicrosoft SharedWeb Components10OWC10.DLL) если у вас в системе вебкомпоненты другой версии, можно поробовать заменить в тексте кода формы «OWC10» на, например, «OWC11». также, возомжно, что вэб компоненты не были установлены при инсталляции Офиса. придется их доустановить. Вложения
1 |
0 / 0 / 0 Регистрация: 29.04.2009 Сообщений: 63 |
|
17.04.2010, 16:31 [ТС] |
19 |
Да ну и вариантик ты мне подкинул, спасибо большое,но к сожелению это не подойдет к моей работе, я чуть другую идею приследовал..досадно конечно(((
0 |
1904 / 781 / 31 Регистрация: 11.02.2010 Сообщений: 1,567 |
|
18.04.2010, 13:39 |
20 |
если бы ты рассказал, какую цель ты преследуешь, может быть не было бы так досадно.
1 |
Содержание
- Сравнение таблиц в Excel с помощью макросов VBA
- Сравнение таблиц в Excel с помощью макросов VBA
- Vba сравнение excel таблица
Сравнение таблиц в Excel с помощью макросов VBA
Оставлен Adm вс, 09/11/2014 — 21:30
Статья даёт ответы на следующие вопросы:
- Как сравнить две таблицы в 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) необходимо вставить код, решающий поставленную задачу. Образец кода представлен ниже.
Результат решения задачи:
Источник
Сравнение таблиц в Excel с помощью макросов VBA
Оставлен Adm вс, 09/11/2014 — 21:30
Статья даёт ответы на следующие вопросы:
- Как сравнить две таблицы в 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) необходимо вставить код, решающий поставленную задачу. Образец кода представлен ниже.
Результат решения задачи:
Источник
Vba сравнение excel таблица
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
MsgBox «Данные проверены»
End Sub
В данном макросе выделяется первый проверяемый диапазон, в самом макросе прописывает диапазон ячеек, с которым нужно сравнить. Данный макрос также был взять из нета, часть понимаю, но углубленно нет т.к. в 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
MsgBox «Данные проверены»
End Sub
В данном макросе выделяется первый проверяемый диапазон, в самом макросе прописывает диапазон ячеек, с которым нужно сравнить. Данный макрос также был взять из нета, часть понимаю, но углубленно нет т.к. в 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
MsgBox «Данные проверены»
End Sub
В данном макросе выделяется первый проверяемый диапазон, в самом макросе прописывает диапазон ячеек, с которым нужно сравнить. Данный макрос также был взять из нета, часть понимаю, но углубленно нет т.к. в vba человек новый. Всем спасибо.
t330 | Дата: Четверг, 30.01.2020, 14:49 | Сообщение № 2 | ||||||||||||
|
Сравнение значений двух таблиц на 2 листах в одной книге. |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
If I understand your problem correctly, the following code should allow you to do what you want. Within the code, you select the range you wish to process; the first column of each data set, and the number of columns within each data set.
It does assume only two data sets, as you wrote, although that could be expanded. And there are ways of automatically determining the dataset columns, if there is no other data in between.
Option Explicit
Option Base 0
Sub RemoveDups()
Dim I As Long, J As Long
Dim rRng As Range
Dim vRng As Variant, vRes() As Variant
Dim bRng() As Boolean
Dim aColumns, lColumns As Long
Dim colRowsDelete As Collection
'vRng to include from first to last column to be tested
Set rRng = Range("f1", Cells(Rows.Count, "F").End(xlUp)).Resize(columnsize:=100)
vRng = rRng
ReDim bRng(1 To UBound(vRng))
'columns to be tested
'Specify First column of each data set
aColumns = Array(1, 13)
'num columns in each data set
lColumns = 3
For I = 1 To UBound(vRng)
bRng(I) = vRng(I, aColumns(0)) = vRng(I, aColumns(1))
For J = 1 To lColumns - 1
bRng(I) = bRng(I) And (vRng(I, aColumns(0) + J) = vRng(I, aColumns(1) + J))
Next J
Next I
'Rows to Delete
Set colRowsDelete = New Collection
For I = 1 To UBound(bRng)
If bRng(I) = True Then colRowsDelete.Add Item:=I
Next I
'Delete the rows
If colRowsDelete.Count > 0 Then
Application.ScreenUpdating = False
For I = colRowsDelete.Count To 1 Step -1
rRng.Rows(colRowsDelete.Item(I)).EntireRow.Delete
Next I
End If
Application.ScreenUpdating = True
End Sub