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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2017, 12:50   #1
Евгений Таб
Форумчанин
 
Аватар для Евгений Таб
 
Регистрация: 09.08.2013
Сообщений: 202
По умолчанию Cравнить 2 списка на отличия

Добрый день уважаемые программисты,

Помогите советом/решением (если уже сталкивались с похожим),
как быстро сравнить 2 диапазона данных на НЕСОВПАДЕНИЯ.

Всего в обработке события должно участвовать 4 столбца. 2 на странице с данными и 2 на странице библиотекой.

Если данные по ключу NUMBER на вкладке DATA отличаются во вкладке CHECK, то вывести msgbox с перечисленными полями NUMBER где есть расхождения, если данные идентичны, то вывести msgbox OK.

Формулой через ВПР это легко реализуется, но очень хочется разобраться как сделать это одним кликом. Причем столбцы могут содержать пробелы...

Во вложении примерчик, пож-ста помогите с чего начать.
Спасибо!
Вложения
Тип файла: xlsx EX_1.xlsx (9.3 Кб, 23 просмотров)
Евгений Таб вне форума Ответить с цитированием
Старый 10.03.2017, 12:57   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

алгоритм
Цитата:
Цикл по столбцу Number
-проверяем результат сравнения Application.WorksheetFunctions.VLOO KUP(DATA.NUMBER,CHECK.CODE) с DATA.CODE
-- Не равно: (string)S <= data.number
Если len(string) != 0 - msgbox(s) иначе "ok"
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 10.03.2017, 13:03   #3
Евгений Таб
Форумчанин
 
Аватар для Евгений Таб
 
Регистрация: 09.08.2013
Сообщений: 202
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
алгоритм
Свое понимание алгоритмов я оцениваю на твердую тройку В принципе я уже почти подошел к вашему ответу, дальше пока тяжело. Можете еще немного детализировать....
Евгений Таб вне форума Ответить с цитированием
Старый 10.03.2017, 13:29   #4
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Я так бы делал, наверное.
Код:
Function VPR(rngWhat As Range, rngWhere As Range)
    Dim numberWhat As String, codeWhat
    Dim numberWhere As String, codeWhere, colWhere As Long
    Dim r As Long, s As String
    s = ""
    For r = 1 To rngWhat.Rows.Count
        numberWhat = rngWhat.Cells(r, 1)
        codeWhat = rngWhat(r, rngWhat.Columns.Count)
        On Error Resume Next
        codeWhere = Application.WorksheetFunction.VLookup(numberWhat, rngWhere, rngWhere.Columns.Count, 0)
        If Err.Number = 0 Then
            If codeWhat <> codeWhere Then
                s = s & numberWhat & vbNewLine
            End If
        End If
        On Error GoTo 0
    Next r
    If s <> "" Then
        VPR = s
    Else
        VPR = "OK"
    End If
End Function

Sub test()
    MsgBox (VPR(Range("Data!C2:K18"), Range("CHECK!A2:B20")))
End Sub
Дебажте, рефактурируйте, ищите/ждите лучшие предложения.
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 10.03.2017, 13:43   #5
Евгений Таб
Форумчанин
 
Аватар для Евгений Таб
 
Регистрация: 09.08.2013
Сообщений: 202
По умолчанию

Спасибо, за оч сложный пример )))) буду изучать/ждать решения попроще.... если конечно это можно сделать проще ))
Евгений Таб вне форума Ответить с цитированием
Старый 10.03.2017, 14:06   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

или так:

Код:
Function VPR$(rngWhat As Range, rngWhere As Range)
    Dim c As Range
    For Each c In rngWhat
      If WorksheetFunction.CountIf(rngWhere, c) = 0 Then VPR = VPR & " " & c
    Next
    If VPR = "" Then VPR = "Ok"
End Function

Sub test()
    MsgBox (VPR(Range("Data!C2:C18"), Range("CHECK!A2:A9")))
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 10.03.2017, 15:11   #7
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Iгор, результат немного не тот что ТС хотел, но никто и не требовал его, только идею.
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.

Последний раз редактировалось Aleksandr H.; 10.03.2017 в 15:16.
Aleksandr H. вне форума Ответить с цитированием
Старый 10.03.2017, 15:18   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Проще использовать словарь и коллекцию для результатов.
Код:
Option Explicit

Sub tt()
    Dim a, b, i&, col As New Collection
    With Sheets("DATA")
        a = .[c1].CurrentRegion.Value
        b = .[c1].CurrentRegion.Offset(, 8).Value
    End With
    With CreateObject("scripting.dictionary"): .comparemode = 1
        For i = 2 To UBound(a): .Item(a(i, 1)) = b(i, 1): Next
        a = Sheets("CHECK").[a1].CurrentRegion.Value
        For i = 2 To UBound(a)
            If .Item(a(i, 1)) <> a(i, 2) Then col.Add a(i, 1)
        Next
    End With

    'вывод результат делайте как хотите
    Dim el
    For Each el In col
        MsgBox "Расхожение в ключе " & el
    Next

End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 10.03.2017 в 15:25.
Hugo121 вне форума Ответить с цитированием
Старый 16.03.2017, 10:07   #9
maria_ods
Новичок
Джуниор
 
Регистрация: 16.03.2017
Сообщений: 1
По умолчанию

Всем привет!!! Ребята, подскажите пожалуйста как в Exсel найти достоверную разницу между двумя столбиками чисел (диссер по психол.исследованию). Если можно языком простым и доступным))) Вся надежда на Вас! Заранее искренне благодарю откликнувшихся!!

Последний раз редактировалось maria_ods; 16.03.2017 в 10:11.
maria_ods вне форума Ответить с цитированием
Старый 16.03.2017, 11:45   #10
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

maria_ods, https://sites.google.com/site/umkmat...dstvami-excel-

http://uborshizzza.livejournal.com/67808.html
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти отличия zet_in_me Microsoft Office Excel 2 01.10.2012 15:27
Отличия С и С++ PriZZZraG Общие вопросы C/C++ 3 09.09.2012 06:43
отличия С# от C++/CLR dampirik Общие вопросы .NET 13 14.12.2010 11:27
отличия EXCEPT от UNION Neymexa Помощь студентам 1 24.03.2010 19:52
Найти отличия miss Microsoft Office Excel 17 03.08.2009 05:03