Подскажите, пожалуйста, как можно это реализовать?
Задача 1) скопировать ячейку из столбца A файла "Список" (там находится ФИО) 2) найти скопированное ФИО в файле "БД16" в столбце C (ФИО в файле может повторяться) 3) скопировать ячейки, соответствующие найденному ФИО, из файла "Список" (они выделены цветом) в файл "БД16": из столбца J в столбец AR, из M в AU, из C в AW, из D в AX, из E в AY 4) если ФИО в файле "БД16" не найдено, выделить его желтым цветом в файле "Список" 5) повторить тоже самое со следующей ячейкой из столбца A файла "Список"
Что у меня получается сейчас (для модуля листа1 файла "Список", обе книги открыты):
Код
Sub Заполнить()
Application.ScreenUpdating = False
Dim i As Long
Dim iLastRow As Long
Dim Nomer As String
Dim FoundNomer As Range
iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To iLastRow 'до последнего заполненного поля
Nomer = Cells(i, 1)
With Workbooks("БД16.xlsx").Worksheets("База")
Set FoundNomer = .Columns(A).Find(Nomer, , xlValues, xlWhole)
If Not FoundNomer Is Nothing Then
Cells(FoundNomer.Row, 44) = .Cells(i, 10) 'Поступл.дата
Cells(FoundNomer.Row, 47) = .Cells(i, 13) 'Процент занятости(ставка)
Cells(FoundNomer.Row, 49) = .Cells(i, 12) 'Город
Cells(FoundNomer.Row, 50) = .Cells(i, 3) 'Должность
Cells(FoundNomer.Row, 51) = .Cells(i, 5) 'Группа
Else
Cells(i, 1).Interior.Color = 65535
End If
End With
Next
Application.ScreenUpdating = True
End Sub
Вы в макросе перепутали откуда и куда копировать данные. Вам из книги Список надо скопировать данные в книгу БД16 по соответствующим фамилиям. В книге БД16 фамилии в столбце С, поэтому код переделайте на
Код
Set FoundNomer = .Columns(3).Find(Nomer, , xlValues, xlWhole)
If Not FoundNomer Is Nothing Then
.Cells(FoundNomer.Row, 44) = Cells(i, 10) 'Поступл.дата
.Cells(FoundNomer.Row, 47) = Cells(i, 13) 'Процент занятости(ставка)
.Cells(FoundNomer.Row, 49) = Cells(i, 12) 'Город
.Cells(FoundNomer.Row, 50) = Cells(i, 3) 'Должность
.Cells(FoundNomer.Row, 51) = Cells(i, 5) 'Группа
Измените макрос, вставил часть очищения столбца А от предыдущего заполнения ячеек цветом
Код
Sub Заполнить()
Application.ScreenUpdating = False
Dim i As Long
Dim iLastRow As Long
Dim Nomer As String
Dim FoundNomer As Range
Dim FAdr As String
iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
Range("A2:A" & iLastRow).Interior.ColorIndex = xlColorIndexNone
For i = 2 To iLastRow 'до последнего заполненного поля
Nomer = Cells(i, 1)
With Workbooks("БД16.xlsx").Worksheets("База")
Set FoundNomer = .Columns(3).Find(Nomer, , xlValues, xlWhole)
If Not FoundNomer Is Nothing Then
FAdr = FoundNomer.Address
Do
.Cells(FoundNomer.Row, 44) = Cells(i, 10) 'Поступл.дата
.Cells(FoundNomer.Row, 47) = Cells(i, 13) 'Процент занятости(ставка)
.Cells(FoundNomer.Row, 49) = Cells(i, 12) 'Город
.Cells(FoundNomer.Row, 50) = Cells(i, 3) 'Должность
.Cells(FoundNomer.Row, 51) = Cells(i, 5) 'Группа
Set FoundNomer = .Columns(3).FindNext(FoundNomer)
Loop While FoundNomer.Address <> FAdr
Else
Cells(i, 1).Interior.ColorIndex = 6
End If
End With
Next
Application.ScreenUpdating = True
End Sub