добрый день! есть такой файл, где в одной таблице например 1000 строк, а в другой 900 000. нужно сравнить данные первой таблицы с данными второй таблицы и при совпадении, одновременно, ФИО и даты рождения, выделить любым цветом (желтым например). Только например в первой таблице один человек может быть на первой строчке и находится он же во второй таблице на 500 000 строке. Вот проблема только еще в том, что написаны ФИО могут как попало, то все буквы большие, то все маленьки, то вперемешку, но человек то он один и тот же
добрый день! есть такой файл, где в одной таблице например 1000 строк, а в другой 900 000. нужно сравнить данные первой таблицы с данными второй таблицы и при совпадении, одновременно, ФИО и даты рождения, выделить любым цветом (желтым например). Только например в первой таблице один человек может быть на первой строчке и находится он же во второй таблице на 500 000 строке. Вот проблема только еще в том, что написаны ФИО могут как попало, то все буквы большие, то все маленьки, то вперемешку, но человек то он один и тот жеNICK31
Вот интересно, как Вы обнаружите эту жёлтую заливку например в 856234 строке? Фильтром? А если не дотянется? Зачем эта заливка? А вообще такое делали сотни раз, поищите любой код на scripting.dictionary
Вот интересно, как Вы обнаружите эту жёлтую заливку например в 856234 строке? Фильтром? А если не дотянется? Зачем эта заливка? А вообще такое делали сотни раз, поищите любой код на scripting.dictionaryHugo
Hugo, мне любой вариант подойдет, главное, чтобы определил, а если потом просто по цвету отсортировать? не вариант? самое главное обработать. я видел одно решение по поиску строк, но переделать не могу http://www.planetaexcel.ru/forum/?PAGE_NAME=read&FID=1&TID=45307
Тот код сложнее, чем тут нужно, но использовать конечно можно, повыкидывав лишнее. Но так и не ответили - зачем именно красить? И зачем в обоих таблицах? "самое главное обработать" - ну обработали. Дальше что с ними собираетесь делать?
Тот код сложнее, чем тут нужно, но использовать конечно можно, повыкидывав лишнее. Но так и не ответили - зачем именно красить? И зачем в обоих таблицах? "самое главное обработать" - ну обработали. Дальше что с ними собираетесь делать?Hugo
Hugo, это я так к примеру))ну можно на лист 3 все найденные скопировать, даже не знаю как лучше?((просто у нас есть постоянный список, там 1000 записей и их нужно сравнить с базой, в которой от 250 000 и больше!
Hugo, это я так к примеру))ну можно на лист 3 все найденные скопировать, даже не знаю как лучше?((просто у нас есть постоянный список, там 1000 записей и их нужно сравнить с базой, в которой от 250 000 и больше!NICK31
Hugo, а самое интересное, что вроде легко сообразить на аналогичном примере, начинаешь выбрасывать код, начинаются ошибки и зависает всё, если бы я мог сам сотворить это чудо, то не писал и не засорял сайт))
Hugo, а самое интересное, что вроде легко сообразить на аналогичном примере, начинаешь выбрасывать код, начинаются ошибки и зависает всё, если бы я мог сам сотворить это чудо, то не писал и не засорял сайт))NICK31
Хорошо, есть база, есть список. Тогда алгоритм такой - загоняем базу в массив, из массива в словарь. Теперь список - в массив, проверяем по словарю. Нашли что иванов есть в базе. Ну или что его нет в базе. Что и когда нужно сделать с этим ивановым?
А вообще если там база - то средствами базы и нужно делать. Запросом например.
Хорошо, есть база, есть список. Тогда алгоритм такой - загоняем базу в массив, из массива в словарь. Теперь список - в массив, проверяем по словарю. Нашли что иванов есть в базе. Ну или что его нет в базе. Что и когда нужно сделать с этим ивановым?
А вообще если там база - то средствами базы и нужно делать. Запросом например.Hugo
Hugo, ну вот например: список 1-это основная база, которая меняется каждый месяц, ее выгружают список 2- это база, которая тоже меняется сравниваем список 1 со списком 2 по Иванову Михаилу Петровичу и дате рождения 23.03.1980 например, если он совпадает, то давайте данные отправим на лист 3 ФИО и дата рождения, других данных в базе не будет
Hugo, ну вот например: список 1-это основная база, которая меняется каждый месяц, ее выгружают список 2- это база, которая тоже меняется сравниваем список 1 со списком 2 по Иванову Михаилу Петровичу и дате рождения 23.03.1980 например, если он совпадает, то давайте данные отправим на лист 3 ФИО и дата рождения, других данных в базе не будетNICK31
a = [E1].CurrentRegion.Value With Application .ScreenUpdating = False
With CreateObject("Scripting.Dictionary"): .comparemode = 1
For i = 2 To UBound(a) t = a(i, 1) & "|" & a(i, 2): .Item(t) = i Next
a = [A1].CurrentRegion.Value For i = 2 To UBound(a) t = a(i, 1) & "|" & a(i, 2) If .exists(t) Then MsgBox "Есть " & t Else MsgBox "Нет " & t End If Next
End With
.ScreenUpdating = True End With End Sub
[/vba]
P.S. Так, там я базы взял наоборот - не видел постов. Переделывать/доделывать пока некогда, работу принесли...
Вот под пример заготовка: [vba]
Код
Option Explicit
Sub tt() Dim a(), i&, t$
a = [E1].CurrentRegion.Value With Application .ScreenUpdating = False
With CreateObject("Scripting.Dictionary"): .comparemode = 1
For i = 2 To UBound(a) t = a(i, 1) & "|" & a(i, 2): .Item(t) = i Next
a = [A1].CurrentRegion.Value For i = 2 To UBound(a) t = a(i, 1) & "|" & a(i, 2) If .exists(t) Then MsgBox "Есть " & t Else MsgBox "Нет " & t End If Next
End With
.ScreenUpdating = True End With End Sub
[/vba]
P.S. Так, там я базы взял наоборот - не видел постов. Переделывать/доделывать пока некогда, работу принесли...Hugo
Hugo, вау...уже даже хорошо))и как вам так удается??))только все таки можно сделать вот без всех выскакиваний сообщения и перенести готовый результат на лист 3 Т.К. смотрите, будет таблицы 1 2000 строк и я всё прощелкивать буду?
Hugo, вау...уже даже хорошо))и как вам так удается??))только все таки можно сделать вот без всех выскакиваний сообщения и перенести готовый результат на лист 3 Т.К. смотрите, будет таблицы 1 2000 строк и я всё прощелкивать буду?NICK31
With CreateObject("Scripting.Dictionary"): .comparemode = 1
a = Sheets(1).[a1].CurrentRegion.Value 'большая база For i = 2 To UBound(a) t = a(i, 1) & "|" & a(i, 2): .Item(t) = i 'заполнили словарь Next
a = Sheets(1).[e1].CurrentRegion.Value 'новая база ReDim b(1 To UBound(a), 1 To 2) 'массив для отбора For i = 2 To UBound(a) t = a(i, 1) & "|" & a(i, 2) If .exists(t) Then 'если есть в словаре ii = ii + 1 b(ii, 1) = a(i, 1) b(ii, 2) = a(i, 2) End If Next
End With
If ii > 0 Then With Sheets(3) .UsedRange.Clear .[a1].Resize(ii, 2) = b 'выгружаем на 3-ий лист! End With End If .ScreenUpdating = True End With End Sub
[/vba]
[vba]
Код
Sub tt() Dim a(), i&, ii&, t$
With Application .ScreenUpdating = False
With CreateObject("Scripting.Dictionary"): .comparemode = 1
a = Sheets(1).[a1].CurrentRegion.Value 'большая база For i = 2 To UBound(a) t = a(i, 1) & "|" & a(i, 2): .Item(t) = i 'заполнили словарь Next
a = Sheets(1).[e1].CurrentRegion.Value 'новая база ReDim b(1 To UBound(a), 1 To 2) 'массив для отбора For i = 2 To UBound(a) t = a(i, 1) & "|" & a(i, 2) If .exists(t) Then 'если есть в словаре ii = ii + 1 b(ii, 1) = a(i, 1) b(ii, 2) = a(i, 2) End If Next
End With
If ii > 0 Then With Sheets(3) .UsedRange.Clear .[a1].Resize(ii, 2) = b 'выгружаем на 3-ий лист! End With End If .ScreenUpdating = True End With End Sub