Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/макрос сравнения 2х листов одного файла по 2м столбцам - Мир MS Excel

Старая форма входа
  • Страница 1 из 4
  • 1
  • 2
  • 3
  • 4
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » макрос сравнения 2х листов одного файла по 2м столбцам (Формулы)
макрос сравнения 2х листов одного файла по 2м столбцам
NICK31 Дата: Вторник, 29.10.2013, 16:31 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 112
Репутация: 0 ±
Замечаний: 0% ±

добрый день! есть такой файл, где в одной таблице например 1000 строк, а в другой 900 000. нужно сравнить данные первой таблицы с данными второй таблицы и при совпадении, одновременно, ФИО и даты рождения, выделить любым цветом (желтым например). Только например в первой таблице один человек может быть на первой строчке и находится он же во второй таблице на 500 000 строке. Вот проблема только еще в том, что написаны ФИО могут как попало, то все буквы большие, то все маленьки, то вперемешку, но человек то он один и тот же
К сообщению приложен файл: _1.xlsx (11.4 Kb)
 
Ответить
Сообщениедобрый день! есть такой файл, где в одной таблице например 1000 строк, а в другой 900 000. нужно сравнить данные первой таблицы с данными второй таблицы и при совпадении, одновременно, ФИО и даты рождения, выделить любым цветом (желтым например). Только например в первой таблице один человек может быть на первой строчке и находится он же во второй таблице на 500 000 строке. Вот проблема только еще в том, что написаны ФИО могут как попало, то все буквы большие, то все маленьки, то вперемешку, но человек то он один и тот же

Автор - NICK31
Дата добавления - 29.10.2013 в 16:31
SkyPro Дата: Вторник, 29.10.2013, 17:01 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
А поиском воспользоваться?
Вот тут не так давно обсуждалось:
http://www.excelworld.ru/forum/2-6830-1

ЗЫ:
Взята функция из этой темы:
http://www.excelworld.ru/forum/3-717-1
Инструкция по применению в модуле.
К сообщению приложен файл: 1332228.xlsm (43.8 Kb)


skypro1111@gmail.com
 
Ответить
СообщениеА поиском воспользоваться?
Вот тут не так давно обсуждалось:
http://www.excelworld.ru/forum/2-6830-1

ЗЫ:
Взята функция из этой темы:
http://www.excelworld.ru/forum/3-717-1
Инструкция по применению в модуле.

Автор - SkyPro
Дата добавления - 29.10.2013 в 17:01
NICK31 Дата: Вторник, 29.10.2013, 17:04 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 112
Репутация: 0 ±
Замечаний: 0% ±

SkyPro, я эту тему видел, но мне при огромном количестве строк, необходим макрос, который бы и с умел, обработать массив
 
Ответить
СообщениеSkyPro, я эту тему видел, но мне при огромном количестве строк, необходим макрос, который бы и с умел, обработать массив

Автор - NICK31
Дата добавления - 29.10.2013 в 17:04
Hugo Дата: Вторник, 29.10.2013, 17:05 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Вот интересно, как Вы обнаружите эту жёлтую заливку например в 856234 строке? Фильтром? А если не дотянется?
Зачем эта заливка?
А вообще такое делали сотни раз, поищите любой код на scripting.dictionary


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеВот интересно, как Вы обнаружите эту жёлтую заливку например в 856234 строке? Фильтром? А если не дотянется?
Зачем эта заливка?
А вообще такое делали сотни раз, поищите любой код на scripting.dictionary

Автор - Hugo
Дата добавления - 29.10.2013 в 17:05
NICK31 Дата: Вторник, 29.10.2013, 17:08 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 112
Репутация: 0 ±
Замечаний: 0% ±

Hugo, мне любой вариант подойдет, главное, чтобы определил, а если потом просто по цвету отсортировать? не вариант? самое главное обработать. я видел одно решение по поиску строк, но переделать не могу http://www.planetaexcel.ru/forum/?PAGE_NAME=read&FID=1&TID=45307
 
Ответить
СообщениеHugo, мне любой вариант подойдет, главное, чтобы определил, а если потом просто по цвету отсортировать? не вариант? самое главное обработать. я видел одно решение по поиску строк, но переделать не могу http://www.planetaexcel.ru/forum/?PAGE_NAME=read&FID=1&TID=45307

Автор - NICK31
Дата добавления - 29.10.2013 в 17:08
NICK31 Дата: Вторник, 29.10.2013, 17:09 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 112
Репутация: 0 ±
Замечаний: 0% ±

Hugo, вами сделанное!
 
Ответить
СообщениеHugo, вами сделанное!

Автор - NICK31
Дата добавления - 29.10.2013 в 17:09
Hugo Дата: Вторник, 29.10.2013, 17:16 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Тот код сложнее, чем тут нужно, но использовать конечно можно, повыкидывав лишнее.
Но так и не ответили - зачем именно красить? И зачем в обоих таблицах?
"самое главное обработать" - ну обработали. Дальше что с ними собираетесь делать?


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеТот код сложнее, чем тут нужно, но использовать конечно можно, повыкидывав лишнее.
Но так и не ответили - зачем именно красить? И зачем в обоих таблицах?
"самое главное обработать" - ну обработали. Дальше что с ними собираетесь делать?

Автор - Hugo
Дата добавления - 29.10.2013 в 17:16
NICK31 Дата: Вторник, 29.10.2013, 17:19 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 112
Репутация: 0 ±
Замечаний: 0% ±

Hugo, это я так к примеру))ну можно на лист 3 все найденные скопировать, даже не знаю как лучше?((просто у нас есть постоянный список, там 1000 записей и их нужно сравнить с базой, в которой от 250 000 и больше!
 
Ответить
СообщениеHugo, это я так к примеру))ну можно на лист 3 все найденные скопировать, даже не знаю как лучше?((просто у нас есть постоянный список, там 1000 записей и их нужно сравнить с базой, в которой от 250 000 и больше!

Автор - NICK31
Дата добавления - 29.10.2013 в 17:19
NICK31 Дата: Вторник, 29.10.2013, 17:21 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 112
Репутация: 0 ±
Замечаний: 0% ±

Hugo, а самое интересное, что вроде легко сообразить на аналогичном примере, начинаешь выбрасывать код, начинаются ошибки и зависает всё, если бы я мог сам сотворить это чудо, то не писал и не засорял сайт))
 
Ответить
СообщениеHugo, а самое интересное, что вроде легко сообразить на аналогичном примере, начинаешь выбрасывать код, начинаются ошибки и зависает всё, если бы я мог сам сотворить это чудо, то не писал и не засорял сайт))

Автор - NICK31
Дата добавления - 29.10.2013 в 17:21
Hugo Дата: Вторник, 29.10.2013, 17:27 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Хорошо, есть база, есть список.
Тогда алгоритм такой - загоняем базу в массив, из массива в словарь.
Теперь список - в массив, проверяем по словарю.
Нашли что иванов есть в базе. Ну или что его нет в базе. Что и когда нужно сделать с этим ивановым?

А вообще если там база - то средствами базы и нужно делать. Запросом например.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеХорошо, есть база, есть список.
Тогда алгоритм такой - загоняем базу в массив, из массива в словарь.
Теперь список - в массив, проверяем по словарю.
Нашли что иванов есть в базе. Ну или что его нет в базе. Что и когда нужно сделать с этим ивановым?

А вообще если там база - то средствами базы и нужно делать. Запросом например.

Автор - Hugo
Дата добавления - 29.10.2013 в 17:27
NICK31 Дата: Вторник, 29.10.2013, 17:33 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 112
Репутация: 0 ±
Замечаний: 0% ±

Hugo, ну вот например: список 1-это основная база, которая меняется каждый месяц, ее выгружают
список 2- это база, которая тоже меняется
сравниваем список 1 со списком 2 по Иванову Михаилу Петровичу и дате рождения 23.03.1980 например, если он совпадает, то давайте данные отправим на лист 3 ФИО и дата рождения, других данных в базе не будет
 
Ответить
СообщениеHugo, ну вот например: список 1-это основная база, которая меняется каждый месяц, ее выгружают
список 2- это база, которая тоже меняется
сравниваем список 1 со списком 2 по Иванову Михаилу Петровичу и дате рождения 23.03.1980 например, если он совпадает, то давайте данные отправим на лист 3 ФИО и дата рождения, других данных в базе не будет

Автор - NICK31
Дата добавления - 29.10.2013 в 17:33
NICK31 Дата: Вторник, 29.10.2013, 17:35 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 112
Репутация: 0 ±
Замечаний: 0% ±

Hugo, так вся база выгружается в эксель, и есть задача сравнить эти массивные списки.
 
Ответить
СообщениеHugo, так вся база выгружается в эксель, и есть задача сравнить эти массивные списки.

Автор - NICK31
Дата добавления - 29.10.2013 в 17:35
Hugo Дата: Вторник, 29.10.2013, 17:38 | Сообщение № 13
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Вот под пример заготовка:
[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. Так, там я базы взял наоборот - не видел постов.
Переделывать/доделывать пока некогда, работу принесли...


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеВот под пример заготовка:
[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
Дата добавления - 29.10.2013 в 17:38
NICK31 Дата: Вторник, 29.10.2013, 17:42 | Сообщение № 14
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 112
Репутация: 0 ±
Замечаний: 0% ±

Hugo, вау...уже даже хорошо))и как вам так удается??))только все таки можно сделать вот без всех выскакиваний сообщения и перенести готовый результат на лист 3
Т.К. смотрите, будет таблицы 1 2000 строк и я всё прощелкивать буду?
 
Ответить
СообщениеHugo, вау...уже даже хорошо))и как вам так удается??))только все таки можно сделать вот без всех выскакиваний сообщения и перенести готовый результат на лист 3
Т.К. смотрите, будет таблицы 1 2000 строк и я всё прощелкивать буду?

Автор - NICK31
Дата добавления - 29.10.2013 в 17:42
NICK31 Дата: Вторник, 29.10.2013, 17:54 | Сообщение № 15
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 112
Репутация: 0 ±
Замечаний: 0% ±

Hugo, и выделенные ячейки он не обнаруживает
К сообщению приложен файл: _1.xlsm (18.3 Kb)
 
Ответить
СообщениеHugo, и выделенные ячейки он не обнаруживает

Автор - NICK31
Дата добавления - 29.10.2013 в 17:54
Hugo Дата: Вторник, 29.10.2013, 17:54 | Сообщение № 16
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
[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
[/vba]


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
Сообщение[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
[/vba]

Автор - Hugo
Дата добавления - 29.10.2013 в 17:54
Hugo Дата: Вторник, 29.10.2013, 17:57 | Сообщение № 17
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
P.S. Выделенную в E не обнаруживает потому, что она не в currentregion!

Добавил в код выше предварительную очистку третьего листа!


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеP.S. Выделенную в E не обнаруживает потому, что она не в currentregion!

Добавил в код выше предварительную очистку третьего листа!

Автор - Hugo
Дата добавления - 29.10.2013 в 17:57
NICK31 Дата: Вторник, 29.10.2013, 18:20 | Сообщение № 18
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 112
Репутация: 0 ±
Замечаний: 0% ±

Hugo, т.е. обработка идет с ячейки а1? попытался удалить строку, он написал ошибку))
 
Ответить
СообщениеHugo, т.е. обработка идет с ячейки а1? попытался удалить строку, он написал ошибку))

Автор - NICK31
Дата добавления - 29.10.2013 в 18:20
Hugo Дата: Вторник, 29.10.2013, 18:28 | Сообщение № 19
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Ну какие данные дали - с теми и работаем :)
В общем, советую вникнуть и понять, что такое currentregion, массив, словарь, resize...


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеНу какие данные дали - с теми и работаем :)
В общем, советую вникнуть и понять, что такое currentregion, массив, словарь, resize...

Автор - Hugo
Дата добавления - 29.10.2013 в 18:28
Hugo Дата: Вторник, 29.10.2013, 18:29 | Сообщение № 20
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Исправил выше кракозябры - прокрались ироды...


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеИсправил выше кракозябры - прокрались ироды...

Автор - Hugo
Дата добавления - 29.10.2013 в 18:29
Мир MS Excel » Вопросы и решения » Вопросы по VBA » макрос сравнения 2х листов одного файла по 2м столбцам (Формулы)
  • Страница 1 из 4
  • 1
  • 2
  • 3
  • 4
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!