Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2011, 13:28   #11
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

С подсчетом количества, без заливки (практически все значения желтые получаются ) (с активной книгой 1, на основе кода Алекса):
Код:
Sub ERTY()
Dim tm!: tm = Timer
Dim a, b, y(), i&, j&, k&

a = Range([a1], Cells(Rows.Count, 1).End(xlUp)).Value
With Workbooks("2.xlsx").Sheets(1)
    b = .Range(.[a1], .Cells(Rows.Count, 1).End(xlUp)).Value
End With
ReDim y(1 To UBound(a) + UBound(b), 1 To 3)

With CreateObject("Scripting.Dictionary")
    .CompareMode = 1
    For i = 1 To UBound(b)    'смотрим второй лист
        If Not .Exists(b(i, 1)) Then
            j = j + 1: .Item(b(i, 1)) = j
            y(j, 1) = b(i, 1): y(j, 2) = 0: y(j, 3) = 1
        Else
            k = .Item(b(i, 1)): y(k, 3) = y(k, 3) + 1
        End If
    Next i

    For i = 1 To UBound(a, 1)    'проверяем первый лист
        If .Exists(a(i, 1)) Then
            k = .Item(a(i, 1)): y(k, 2) = y(k, 2) + 1
        Else
            j = j + 1: .Item(a(i, 1)) = j
            y(j, 1) = a(i, 1): y(j, 2) = 1: y(j, 3) = 0
        End If
    Next
End With
[d1:f1].Value = Array("Значение", "кол-во на 1-м листе", "кол-во на 2-м листе")
[d2:f2].Resize(j).Value = y
MsgBox Timer - tm
End Sub
Получившиеся нули (т.е. то, что есть только на одном листе) можно отфильтровать, например.

Последний раз редактировалось nilem; 29.09.2011 в 13:30.
nilem вне форума Ответить с цитированием
Старый 29.09.2011, 13:38   #12
derlysh
Пользователь
 
Регистрация: 18.07.2011
Сообщений: 15
По умолчанию

нужно именно подсвечивать совпадающие ячейки
нет надобности считать количество
задача именно сравнить два файла и выделить полностью совпавшие ячейки
вариант alex77755 оч хороший, но лучше бы как нить сделать чтоб макрос сам выполнялся и запрашивал выбор файлов и в отчет писалось кол-во совпавших элементов и не совпавших
derlysh вне форума Ответить с цитированием
Старый 29.09.2011, 13:50   #13
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Цитата:
Сообщение от derlysh Посмотреть сообщение
нужно именно подсвечивать совпадающие ячейки
нет надобности считать количество
..
но лучше бы как нить сделать чтоб ... в отчет писалось кол-во совпавших элементов и не совпавших
Я не понял, что именно нужно в итоге получить - кто должен проматывать лист и считать закрашенные ячейки?

Похоже, что тут вообще нужно просто прогнать оба массива через словари и тупо посчитать, сколько раз совпало.
Но вопрос с повторами - если в одном листе два раза 123, а в другом один раз - то сколько раз совпало?
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 29.09.2011 в 13:54.
Hugo121 вне форума Ответить с цитированием
Старый 29.09.2011, 22:29   #14
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Цитата:
вариант alex77755 оч хороший, но лучше бы как нить сделать чтоб макрос сам выполнялся и запрашивал выбор файлов и в отчет писалось кол-во совпавших элементов и не совпавших
Я вот тоже пока не понял задачу. Уже и так и так предлагал.. Всё никак не угадаю... Покажи пример, что надо получить? В каком виде?
Сделать запрос файлов не проблема
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Старый 29.09.2011, 23:22   #15
derlysh
Пользователь
 
Регистрация: 18.07.2011
Сообщений: 15
По умолчанию

пасиб оч помогли
того что сделал alex достаточно=)
derlysh вне форума Ответить с цитированием
Старый 04.03.2019, 17:30   #16
Панчез
 
Регистрация: 04.03.2019
Сообщений: 4
По умолчанию

Помогите пожалуйста. Если продолжить эту тему с сравнением в двух таблицах с открытыми двумя книгами.
Как диапазон сравниваемых значений в обоих книгах выделять мышкой?
Можно применить вот этот код (как его правильно вставить в пример alex77755 ?)

Код:
Sub Сравнение()
Set diapazon = Application.InputBox("Укажите диапазон сравниваемых ячеек." & vbLf & _
                        "Например F7:F57", "Какие ячейки сравнить?", Type:=8)
MsgBox "Вы выделили " & diapazon.Address
End Sub
Как сделать чтобы сравнение в выделенных ячейках происходило слева направо и сверху вниз по каждой строчке в выделенной части? Соответственно выделялось цветами. То что сходится - зеленым, то что отличается - желтым.
.

Последний раз редактировалось Панчез; 04.03.2019 в 17:35.
Панчез вне форума Ответить с цитированием
Старый 05.03.2019, 10:14   #17
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Цитата:
Сообщение от Панчез Посмотреть сообщение
Как диапазон сравниваемых значений в обоих книгах выделять мышкой?
если используете office tabs - то проблем нет. Если проблемы есть - сделайте окна не на всё окно Экселя, тогда появится возможность выделять.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 05.03.2019, 11:19   #18
Панчез
 
Регистрация: 04.03.2019
Сообщений: 4
По умолчанию

Разве в примере alex77755 использование office tabs применимо?
На самом деле примеры с сравнениями таблиц, вообще в интернете, с одним столбцом в котором хаотично ищутся похожие и различные значения, - не корректны! Так ни кто не сравнивает. Например взять большие рабочие таблицы, там каждое значение находится в своей ячейке на всем листе, и этот лист нужно сравнить с другим листом такой же большой таблицы, четко каждую ячейку, а не хаотично все подряд, но думаю удобнее всего это будет делать, частями вручную, выделяя одинаковые области на одном и другом листе. В итоге получаем окрашивание ячеек, совпало-не совпало, зеленый-жёлтый.

Последний раз редактировалось Панчез; 05.03.2019 в 11:23.
Панчез вне форума Ответить с цитированием
Старый 05.03.2019, 11:42   #19
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Я отвечал только на тот вопрос, на который отвечал
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 05.03.2019, 15:53   #20
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

сравните так:
Код:
Sub CompareRanges()
  Const cGreen& = 5287936, cYellow& = 65535
  Dim rg(1 To 2) As Range, r&, c&, i&, ic&
  On Error Resume Next
  Set rg(1) = Application.InputBox("Отметьте ПЕРВЫЙ диапазон", Type:=8): If Err Then End
  Set rg(2) = Application.InputBox("Отметьте ВТОРОЙ диапазон", Type:=8): If Err Then End
  On Error GoTo 0
  If rg(1).Rows.Count <> rg(2).Rows.Count Or rg(1).Columns.Count <> rg(2).Columns.Count Then
    MsgBox "Вы отметили кривые диапазоны!", vbCritical, "Аварийнре завершение": Exit Sub
  End If
  Application.ScreenUpdating = False
  For r = 1 To rg(1).Rows.Count
    For c = 1 To rg(1).Columns.Count
      ic = IIf(rg(1).Cells(r, c) = rg(2).Cells(r, c), cGreen, cYellow)
      For i = 1 To 2: rg(i).Cells(r, c).Interior.Color = ic: Next
    Next
  Next
  Application.ScreenUpdating = True
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение двух таблиц w00t Microsoft Office Excel 5 16.03.2012 00:22
Сравнение 2-х ячеек, выделение цветом пустой Alex5667 Microsoft Office Excel 3 07.10.2011 15:06
Сравнение ячеек из разных таблиц pechenushka_xxx Microsoft Office Excel 4 28.01.2011 10:19
сравнение двух таблиц Iskin Microsoft Office Excel 3 08.12.2010 07:18
Сравнение двух таблиц scaramangi Microsoft Office Excel 0 17.09.2009 17:15