Помогите пожалуйста! есть два листа excel, в одном листе есть колонка ИНН (и еще много других не важных), во втором листе тоже ИНН и еще одна колонка сумма, нужно с помощью макроса сравнить колонки ИНН в двух листах и скопировать сумму совпавшего ИНН в первый лист. Во вложении образец таблицы
Так то всего одна формула нужна, но коль надо макросом, то ждите помощи. А вы уверены, что ИНН из 9 цифр состоит? А суммы в каких пределах будут? А то может и числа типа Long не хватит...
Если автоматизировать бардак, то получится автоматизированный бардак.
Bema, таблиц много и данных для сравнения много, макрос можно применить ко всем, мне кажется так проще чем прописывать формулы в каждый файл, я конечно могу ошибаться, с excel я слабо знаком, собственно потому и обратился за помощью)
Bema все они однотипные лист 1 только инн без сумм, дублируются в листе 2 только с суммами и идут они не по порядку, не совпадают по номерам строк с листом 1. Спасибо вам за формулу)
В макросе нужно непременно выполнять сортировку по ИНН. Сделайте в Вашем файле по 2-3 строки и заполните шапку на каждом листе - это всего лишь "правила хорошего тона"!
Этому сортировка не нужна. Если будут повторы ИНН, сумму проставит каждому.
Код
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