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