Страницы: 1
RSS
Сопоставить две таблицы из разных листов и отметить совпадения
 
Есть фаил, в нем два листа. Нужно сопоставить две таблицы из разных листов. т.е. в листе 2 в столбцах периоды помечались цветом похожие с листом 1 лицевые счета, а также похожие периоды, т.е. задвоенные с листом 1

Подскажите какую формулу нужно поставить в условное форматирование чтоб получился нужный мне результат. Фаил прикрепить не могу слишком огромного он формата
 
Цитата
naum_c написал:
Фаил прикрепить не могу слишком огромного он формата
а подготовить файл пример с десятком строк - облом или религия не позволяет?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
naum_c написал:  похожие
или все же
Цитата
naum_c написал: Поиск задвоений
в моем понимании задвоение это повторяющиеся значение точь в точь...
ну и конечно вам бы
Цитата
Ігор Гончаренко написал: подготовить файл пример с десятком строк
Не бойтесь совершенства. Вам его не достичь.
 
Для одаренных сразу предупреждаю что количество строк по первому и второму листу больше 1000. Выборочно прислал пример
Смысл таков. Вначале должен идти поиск по лицевым счетам, при нахождении задвоения сразу идет поиск по периодам между одинаковыми лицевыми счетами
 
вам нужно обращаться прямо на сайт...
Цитата
naum_c написал: Для одаренных
тут-то кто вам поможет?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Как по мне - так все лицевые счета похожи...
Как китайцы. :)
Изменено: Hugo - 24.09.2020 17:11:10
 
Цитата
Ігор Гончаренко написал:
вам нужно обращаться прямо на сайт
Какой?
 
Цитата
naum_c написал: Какой?
Цитата
Для одаренных

почему нельзя просто выделить повторяющиеся значения?
в УФ для диапазона 1 листа С2:С39
Код
=ЕСЛИ(СЧЁТЕСЛИ(Лист2!$C:$C;Лист1!$C2)>0;ЕСЛИ(СЧЁТЕСЛИМН($C:$C;$C2;$H:$H;$H2)>1;ИСТИНА;ЛОЖЬ))
Не бойтесь совершенства. Вам его не достичь.
 
Цитата
Mershik написал: почему нельзя просто выделить повторяющиеся значения?
Потому что будут влетать туда и значения от других лицевых счетов. Проблема в том что у меня в 1 листе 50 лицевых во 2 листе 40 из которых 10 из 1 листа. При выделении всех периодов мы получим совпадения не только 10 лицевых счетов из первого листа но и 30 которые будут во 2 листе

Формулу проверил. Она просто выделяет все периоды которые есть в листе 2

Цитата
Hugo написал: Как по мне - так все лицевые счета похожи
В том то и проблема что они разные и их очень много. В ручную слишком долго делать
 
Посмотрите файл. В нем 2 макроса.
Макрос Sheet1 выделяет цветом совпадения на листе 1.
Макрос Sheet2 на 2 листе.
 
Для ОСОБО ОДАРЕНЫХ.
При регистрации нужно было знакомиться с правилами форкума. Там понятным языком написано и о файле-примере, и о бездумном цитировании.
Пример уже есть, теперь вернитесь и приведите "цитаты" в порядок

Если мысль опоздала, можно вернуться и дополнить сообщение, а не множить очереди.
 
Прошу прощения.

И по теме, если нужно в сравнении указать помимо ФИО еще и номер счета, то нужно видоизменить строку сравнения на:
Скрытый текст
 
artemkau88, это не Вам, это реакция на сообщение №4
 
Извините, сразу не понял)))
 
artemkau88, макрос выделяет только первый столбец с периодами, а он должен работать так: Вначале ищет совпадение оп номеру лицевого счета между листами 1 и 2, при нахождении копий он должен просматривать весь массив периодов листа 2 с листом 1 (имеется в виду задвоенных лицевых счетов)
 
Напишите, по каким критериям идет сравнение.

У вас таблица с названиями столбцов. Какие столбцы участвуют в сравнении? Я так понимаю, что при нахождении совпадений по лицевому счету он должен просматривать столбец "Периоды задолженности". Или я не так понял?
Цитата
naum_c написал: макрос выделяет только первый столбец с периодами, а он должен работать так
Что конкретно он должен выделять? Значения каких столбцов?
 
Посмотрите макрос ComperingWithCondition.
Так ли работает?
 
artemkau88,
Вы поняли все правильно. Он вначале должен просматривать столбец Номер ЛС, при нахождении совпадения он его помечает цветом, далее он в найденной строке просматривает столбцы Периоды задолженности все которые есть и в листе 1 и в листе 2. При нахождении одинаковых ячеек по строке он помечает их. Например он нашел задвоенный лицевой счет 1613003127 далее по строке в которой он нашелся ищутся дубликаты всех периодов. Должно получиться так
000319382ПАПАСОВА ЕЛЕНА   АНАТОЛЬЕВНА1613003127Папасов Глеб   Константинович 1/3 12.201912.201912.20191.2022.2023.2024.2025.2026.202
000319381ПАПАСОВА ЕЛЕНА   АНАТОЛЬЕВНА1613003127Папасова Мария   Константиновна 1/3 12.201912.201912.20191.2022.2023.2024.2025.2026.202
000319380ПАПАСОВА ЕЛЕНА   АНАТОЛЬЕВНА1613003127Папасова Елена   Анатольевна 1/3 12.201912.201912.20191.2022.2023.2024.2025.2026.202
только вместо жирного шрифта должна быть заливка, т.к. он совпадает с аналогичными данными из листа 1
ПАПАСОВА   ЕЛЕНА АНАТОЛЬЕВНА1613003127Папасов Глеб   Константинович 1/3 4.2025.2026.202
ПАПАСОВА ЕЛЕНА   АНАТОЛЬЕВНА1613003127Папасова Мария   Константиновна 1/3 4.2025.2026.202
ПАПАСОВА ЕЛЕНА   АНАТОЛЬЕВНА1613003127Папасова Елена   Анатольевна 1/3 4.2025.2026.202

Цитата
artemkau88 написал: Посмотрите макрос...
В данном примере он просто выделяет задвоения лицевых счетов, но не проверяет периоды
 
Код
Sub comparingWithCondition()
Dim h, i, k As Integer, n As Integer, Compar As String
Dim wshSource As Worksheet, wshTarget As Worksheet
Set wshSource = ThisWorkbook.Sheets(1)
Set wshTarget = ThisWorkbook.Sheets(2)
k = wshSource.UsedRange.Rows.Count
n = wshTarget.UsedRange.Rows.Count
     For h = 2 To n
        For i = 2 To k
            
            If StrComp(wshTarget.Cells(h, 3) & wshTarget.Cells(h,8) , wshSource.Cells(i, 3) & wshSource.Cells(i,8) ) = 0 Then
            
            wshSource.Cells(i, 3).Interior.Color = vbGreen
            wshSource.Cells(i,8) .Interior.Color = vbGreen
            End If

        Next i
     Next h
     MsgBox "Процедура закончена!"
End Sub
Проверьте этот код. Все ли верно?
 
artemkau88,
а это для какого листа?
 
Выделяются ячейки на первом листе. Данные второго листа сравниваются с первым листом. Код для вставки в VBE ( где находится код макроса)
 
artemkau88,
Макрос выделяет только первое совпадение лицевого счета, дальше он не срабатывает
 

А так:?

Код
Sub comparingWithCondition()
Dim h, i, k As Integer, n As Long, Compar As Long
Dim wshSource As Worksheet, wshTarget As Worksheet
Set wshSource = ThisWorkbook.Sheets(1)
Set wshTarget = ThisWorkbook.Sheets(2)
k = wshSource.UsedRange.Rows.Count
n = wshTarget.UsedRange.Rows.Count
     For h = 2 To n
        For i = 2 To k
            If StrComp(wshTarget.Cells(h, 3), wshSource.Cells(i, 3)) = 0 Then
             
            wshSource.Cells(i, 3).Interior.Color = vbGreen
            wshSource.Cells(i, 8).Interior.Color = vbGreen
            End If
        Next i
     Next h
     MsgBox "Процедура закончена!"
End Sub
Изменено: artemkau88 - 24.09.2020 20:03:36
 
Не выходит. В файле, вручную я отметил как он должен сопоставить, но макрос сопоставляет только первое вхождение
 
Макрос, который я написал ищет совпадения только по номеру лицевого счета и выделяет одноименные строки в столбце "Периоды задолженности".

Вы говорите, что он сопоставляет только первое вхождение. То есть первое вхождение периода задолженность? Он должен еще искать в каких-то столбцах?

Этот код выделяет ( у меня по крайней мере) выделяет все строки на листе 1, которые относятся к лицевому счету, значения которого одинаковы в обоих листах, но только в столбце 8
Код
Sub comparingWithCondition()
Dim h, i, k As Integer, n As Long, Compar As Long
Dim wshSource As Worksheet, wshTarget As Worksheet
Set wshSource = ThisWorkbook.Sheets(1)
Set wshTarget = ThisWorkbook.Sheets(2)
k = wshSource.UsedRange.Rows.Count
n = wshTarget.UsedRange.Rows.Count
     For h = 2 To n
        For i = 2 To k
            If StrComp(wshTarget.Cells(h, 3), wshSource.Cells(i, 3)) = 0 Then
             
            wshSource.Cells(i, 3).Interior.Color = vbGreen
            wshSource.Cells(i, 8).Interior.Color = vbGreen
            End If
        Next i
     Next h
     MsgBox "Процедура закончена!"
End Sub
Изменено: artemkau88 - 25.09.2020 08:28:25
 
Вот решение. Думаю, я правильно вас понял. Макрос ниже выделяет совпадения периодов по всей строке найденного счета, исключая пустые значения
Только он работает при условии, что период задолженности начинается с 8 столбца.

Код
Sub comparingWithCondition()
Dim h, i, k As Integer, n As Long, Compar As Long
Dim wshSource As Worksheet, wshTarget As Worksheet
Set wshSource = ThisWorkbook.Sheets(1)
Set wshTarget = ThisWorkbook.Sheets(2)
k = wshSource.UsedRange.Rows.Count
n = wshTarget.UsedRange.Rows.Count
     For h = 3 To n
        For i = 2 To k
            If StrComp(wshTarget.Cells(h, 1), wshSource.Cells(i, 1)) = 0 Then
            wshSource.Cells(i, 3).Interior.Color = vbGreen
            wshTarget.Cells(h, 3).Interior.Color = vbGreen
                For Compar = 8 To wshSource.UsedRange.Columns.Count
                    For n = 8 To wshTarget.UsedRange.Columns.Count
                    If StrComp(wshTarget.Cells(h, n), wshSource.Cells(i, Compar)) = 0 And wshTarget.Cells(h, n) <> 0 And wshSource.Cells(i, Compar) <> 0 Then
            wshSource.Cells(i, Compar).Interior.Color = vbGreen
            wshTarget.Cells(h, n).Interior.Color = vbGreen
                    End If
                    Next n
                Next Compar
            End If
        Next i
     Next h
     MsgBox "Процедура закончена!"
End Sub

У Вас таблица базы данных должна находиться на лите 1, а выборка на листе 2. Так работает этот макрос. k = wshSource.UsedRange.Rows.Count - это количество строк рабочего диапазона листа 1 (Set wshSource = ThisWorkbook.Sheets(1 - это первый лист)), также и в отношении второго листа
Также для того, чтобы результат был корректен нужно, чтобы все столбцы были именно в том порядке, что и в вашей выгрузке и 1С (которую вы приложили к вопросу)
 
artemkau88, все работает. Спасибо. Выручил
Страницы: 1
Наверх