Excel z kodem vba z kryteriami wynikającymi z wartości

Nie jestem pewien, czy to, co chcę osiągnąć, jest możliwe. Więc tutaj jest:

Mam skoroszyt z 2 arkuszami:

Pierwszy arkusz zawiera surowe dane z pracownikami i szkolenia, które wykonali lub nie zrobili (nie mogli przyjść na szkolenie). Arkusze zawierają kilka kolumn, takich jak: nazwa, specjalny identyfikator (inny dla każdego pracownika), 2 puste kolumny, obecność (tak / nie) i kilka innych ...

Drugi arkusz utworzy raport na podstawie kryteriów zasięgu i obecności.

Technicznie jest to coś takiego:

Arkusz raportu zawiera listę pracowników, będą one filtrowane za pomocą autofiltru. Przefiltrowani pracownicy będą sprawdzani, czy byli w 14 kategoriach szkoleń. Kategorie różnią się zakresem (znane są zakresy; z zakresami czasu zostaną dodane lub dostosowane do nowo dodanych szkoleń).

Mój problem: Czy można utworzyć kod vba, który sprawdzi, czy pracownik był na pewnych szkoleniach (licząc w pewnym zakresie z warunkiem: nieobecny = nie licz) i wklej wartość do określonych komórek? Jeśli to możliwe, czy możesz udzielić wskazówek, jak to zrobić? Nie proszę o gotowy kod.

Próbuję to zrobić, ale utknąłem na tym. Błąd w wierszu „if cells.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


Druga edycja, wcześniejszy kod, wykonał nieskończoną pętlę. Teraz myślę, że jeśli-oświadczenia odnoszą się do niewłaściwego zakresu, ale nie jestem pewien, jak sobie z tym poradzić.

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

Przykładowy zeszyt ćwiczeń:https://dl.dropboxusercontent.com/u/7421442/sample%20workbook%20(1).xls

questionAnswers(1)

yourAnswerToTheQuestion