Excel countif vba código con criterios resultantes con valores
No estoy seguro si lo que quiero lograr es posible. Asi que aqui esta:
Tengo el cuaderno con 2 hojas:
La primera hoja contiene datos en bruto con los empleados y las capacitaciones que tomaron o no tomaron (no pudieron asistir a la capacitación). Las hojas contienen pocas columnas como: nombre, ID especial (diferente para cada empleado), 2 columnas en blanco, presencia (sí / no) y algunas más ...
La segunda hoja creará un informe basado en el rango y los criterios de presencia.
Técnicamente es algo así:
La hoja de informe tiene una lista de empleados, se filtrarán con autofiltro. Los empleados filtrados serán revisados si estaban en 14 categorías de capacitaciones. Las categorías difieren con el rango (los rangos son conocidos; los rangos de tiempo se agregarán o ajustarán a los entrenamientos recientemente agregados).
Mi problema: ¿Es posible crear un código vba que verifique si el empleado estuvo en ciertos entrenamientos (cantidad de conteo en cierto rango con condición: no presente = no contar) y pegar el valor en ciertas celdas? Si es así, ¿podría dar algún consejo sobre cómo hacer eso? No estoy pidiendo código listo.
Tratando de hacerlo funcionar pero me quedé atascado en esto. Error en la línea "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
Segunda edición, el código anterior hizo un bucle infinito. Ahora creo que las sentencias if hacen referencia a un rango incorrecto pero no estoy seguro de cómo tratarlas.
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
Ejemplo de libro de trabajo:https://dl.dropboxusercontent.com/u/7421442/sample%20workbook%20(1).xls