Страницы: 1
RSS
Макрос для сравнения двух листов excel
 
Помогите пожалуйста!
есть два листа excel, в одном листе есть колонка ИНН (и еще много других не важных), во втором листе тоже ИНН и еще одна колонка сумма,  нужно с помощью макроса сравнить колонки ИНН в двух листах и скопировать  сумму совпавшего ИНН в первый лист. Во вложении образец таблицы
Изменено: azik - 13.03.2018 16:41:39
 
доброго времени, почитайте правила форума, лично мне не очень хочется изобретать велосипед,
Пример ГДЕ?
Инженер не тот, кто все знает, а тот кто знает где найти ответ.
 
Так то всего одна формула нужна, но коль надо макросом, то ждите помощи.
А вы уверены, что ИНН из 9 цифр состоит? А суммы в каких пределах будут? А то может и числа типа Long не хватит...
Если автоматизировать бардак, то получится автоматизированный бардак.
 
это просто для образца ИНН будет 10 цифр суммы будут не больше чем с 5-6 нулями
 
azik, ну а всё же почему именно макрос, если простая формула с такой задачей справиться на УРА? Я Вас не переубеждаю, просто хочется понять.
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Попробуйте так. Количество строк на листе2 задайте сами подобно тому, как это сделано для листа1.
Excel непознаваем как атом.
 
Спасибо большое mtts54, но почему-то работает только на 1, остальные совпадения не ищет
 
Bema, таблиц много и данных для сравнения много, макрос можно применить ко всем, мне кажется так проще чем прописывать формулы в каждый файл, я конечно могу ошибаться, с excel я слабо знаком, собственно потому и обратился за помощью)
 
mtts54, работает если порядок ИНН не нарушен, если в 1 и 2 листе в разброс не срабатывает, а они у меня идут не по порядку
 
Вот формула, а решать что проще уже Вам.
=ИНДЕКС(Лист2!K:K;ПОИСКПОЗ(Лист1!J2;Лист2!C:C;0))
Цитата
azik написал:
работает только на 1, остальные совпадения не ищет
Какие остальные, в примере только одна строка.
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Bema все они однотипные лист 1 только инн без сумм, дублируются в  листе 2  только с суммами и идут они не по порядку, не совпадают по номерам строк с листом 1. Спасибо вам за формулу)
 
Цитата
Bema написал:
Какие остальные, в примере только одна строка.
Я добавил и другие значения, но работает только когда идут по порядку, это на счет макроса
 
Макрос или формула? В любом случае покажите файл где не работает.
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Макрос не работает если нумерация не идет по порядку в 1 и 2 листе, формула работает нормально, вот если бы поправить макрос, было бы замечательно
 
В листах ИНН могут повторяться?
 
нет ИНН не повторяется
 
Структура файлов реальная?
Цитата
azik написал:
таблиц много и данных для сравнения много
Данные на листы как попадают - "врукопашную"?
 
да, реальна, данных для сравнения я имел ввиду, однотипных таблиц с которыми нужно провести однотипные задачи, заносятся руками
 
В макросе нужно непременно выполнять сортировку по ИНН.
Сделайте в Вашем файле по 2-3 строки и заполните шапку на каждом листе - это всего лишь "правила хорошего тона"!  :)  
 
остальные колонки не важны, основные ИНН и сумма
 
Вы в курсе, что пустые столбы в структуре мешают выполнять сортировку?
Я не случайно предложила заполнить "шапки".
 
См. файл

Кстати, на Листе1:
ИНН
123456789
588778962
456789912
357754569
456789912
679011934
790122945
901233956
 
Спасибо большое, все работает как нужно
 
Этому сортировка не нужна. Если будут повторы ИНН, сумму проставит каждому.
Код
Sub INN_Sum()
Dim aINN(), aData(), aSum()
Dim lRwINN, lRwData
Dim i As Long, k As Long
    With Worksheets(1)
        lRwINN = .Cells(.Rows.Count, "J").End(xlUp).Row ' по столбцу с ИНН
        aINN = .Range("J1:J" & lRwINN).Value ' массив ИНН
        ReDim aSum(1 To lRwINN, 1 To 1) ' размерность массива сумм
        aSum(1, 1) = .Range("E1").Value ' заголовок столбца суммы
    End With

    With Worksheets(2)
        lRwData = .Cells(.Rows.Count, "C").End(xlUp).Row ' по столбцу с ИНН
        aData = .Range("A1:K" & lRwData).Value ' массив ИНН-сумма
    End With
    
    For i = 2 To lRwINN ' проходим по ИНН
        For k = 2 To lRwData ' проходим в данным
            If aINN(i, 1) = aData(k, 3) Then ' ИНН совпал
                aSum(i, 1) = aData(k, 11): Exit For ' заносим сумму в массив
            End If
        Next k
    Next i
    
    Application.ScreenUpdating = False ' обновление экрана отключаем
    Worksheets(1).Range("E1:E" & lRwINN).Value = aSum ' выгружаем суммы на лист
    Application.ScreenUpdating = True ' обновление экрана включаем

    MsgBox "Готово", 64, ""
End Sub
 
Вчера торопился, отправил несохраненный файл.
Excel непознаваем как атом.
 
Всем огромное спасибо за участие, очень помогли)
Страницы: 1
Наверх