Excel показывать код VBA с критериями, полученными со значениями

Я не уверен, возможно ли то, чего я хочу достичь. Итак, вот оно:

Я получил рабочую тетрадь с 2 листами:

Первый лист содержит необработанные данные о сотрудниках и тренингах, которые они проходили или не проходили (они не могли прийти на тренинг). Листы содержат несколько столбцов, таких как: имя, специальный идентификатор (разные для каждого сотрудника), 2 пустых столбца, наличие (да / нет) и еще несколько ...

Второй лист создаст отчет на основе диапазона и критериев присутствия.

Технически этоЧто-то вроде этого:

В отчете есть список сотрудников, они будут отфильтрованы с помощью автофильтра. Эти отфильтрованные сотрудники будут проверены, прошли ли они обучение на 14 категориях. Категории отличаются в зависимости от диапазона (диапазоны известны; временные диапазоны будут добавляться или корректироваться для вновь добавленных тренингов).

Моя проблема: Можно ли создать код VBA, который будет проверять, был ли сотрудник на определенных тренингах (показывать в определенном диапазоне с условием: нет = не считать) и вставлять значение в определенные ячейки? Если это так, не могли бы вы дать совет, как это сделать? Я не прошу готовый код.

Пытаюсь заставить это работать, но я застрял в этом. Ошибка в строке "если cell.find ... ".

Sub Check()

MyRange = Range("A1", Selection.End(xlDown))

For Each MyCell In MyRange
With Range("pp2dni2007")
    If Cells.Find(MyCell.Value) Is Nothing Then

    Else
        If ActiveCell.Value = ActiveCell.Offset(0, 3).Value Then
        MyCell.Offset(0, 6).Value = 1

        Else
        MyCell.Offset(0, 6).Value = 0

        End If

    End If

End With
Next

End Sub



2-е редактирование, предыдущий код делал бесконечный цикл. Теперь я думаю, что операторы if ссылаются на неправильный диапазон, но не уверен, что с этим делать.

Sub Check()

Dim MyRange As Range, MyCell As Variant

Range("A1").Select

Set MyRange = Range(Selection, Selection.End(xlDown)).Rows.SpecialCells(xlCellTypeVisible)

For Each MyCell In MyRange.Cells
    With Range("pp2dni2007")
        If .Cells.Find(MyCell.Value) Is Nothing Then

        Else
            If .Cells.Find(MyCell.Value).Value = .Cells.Find(MyCell.Value).Offset(0, 3).Value Then
            MyCell.Offset(0, 6).Value = 1

            Else
            MyCell.Offset(0, 6).Value = 0

            End If

        End If

    End With
Next

End Sub

Образец рабочей книги:https://dl.dropboxusercontent.com/u/7421442/sample%20workbook%20(1).xls

Ответы на вопрос(1)

Ваш ответ на вопрос