Uso adecuado de la function de compensación y para / while loop

Algo nuevo para VBA. Entonces, perdóname si es bastante simple. Estoy haciendo un formulario de Excel para el logging de varias empresas.

Mi Excel registra la primera columna (A) como nombre_empresa donde uno tiene que dar su nombre_empresa.

La columna C tiene un total no. de los empleados en la empresa. (Esto incluye empleados permanentes + contratados).

Las columnas D y E tienen nombres de empleados que son permanentes únicamente.

Entonces, supongamos; Mi columna C tiene valor 5; la columna (D y E) puede tener 5 o less de 5 nombres de empleados. (Estrictamente no más de 5 nombres de empleados. Si esas columnas tienen más de 5 nombres, debería arrojar un post de error en la hoja 2)

Mi siguiente columna F es la designación. Esto puede tener valores entre ' Manager ', ' Attender ', ' Developer ', ' Operator ', ' CEO ' solamente y no se permite ningún otro valor. Estos valores se pueden repetir también (para diferentes empleados como en la image de abajo)

My_Excel

Para esto he escrito el código a continuación y funciona bien.

Dim celadr, celval, celadrI, celvalI, celadrN, celvalN As Variant Range("F2:F" & LastRow).Select ' Selection.Clearformats For Each cell In Selection celadr = cell.Address celval = cell.Value celadrI = cell.Offset(0, 4).Address celvalI = cell.Offset(0, 4).Value celadrN = cell.Offset(0, 9).Address celvalN = cell.Offset(0, 9).Value If Len(celval) >= 1 Then If InStr(1, ("MANAGER,ATTENDER,DEVELOPER,OPERATOR,CEO,"), Trim(UCase(celval) & ",")) < 1 Then Range(celadr).Interior.Color = vbRed Sheets("Sheet2").Range("A65536").End(xlUp).Offset(1, 0).Value = celval & " The Designation is incorrect" strstr = "'" & shname & "'!" & Range(celadr).Address(0, 0) Sheets("Sheet2").Hyperlinks.Add Anchor:=Sheets("Sheet2").Range("A65536").End(xlUp), Address:="", SubAddress:=strstr End If End If Next 

Ahora mi siguiente requisito es; para cada compañía, debería haber al less un solo ' Gerente '.

Si una determinada empresa no tiene administrador, entonces tengo que dar el post en 'Hoja2' como "Su debería ser al less un 'Administrador' único para esta empresa" con un enlace a las celdas correctas en la hoja1.

Puedo validarlo cuando el 'Administrador' está escrito en la misma fila en la que se escribe Company_Name.

Pero no tengo idea de cómo hacerlo cuando 'Manager' no está escrito en la misma fila de Company_Name.

Debajo está mi código, que solo funciona cuando se asume que Designación – 'Administrador' está escrita en la misma fila que la de Nombre de la compañía.

 Range("A2:A" & LastRow).Select For Each cell In Selection celadr = cell.Address celval = cell.Value If Len(celval) >= 1 Then If Trim(cell.Offset(i, 5).Value) <> "Manager" Then cell.Offset(i, 5).Interior.Color = vbRed Sheets("Sheet2").Range("A65536").End(xlUp).Offset(1, 0).Value = celval & "Their should be atleast a single 'Manager' for this company" strstr = "'" & shname & "'!" & Range(celadr).Address(0, 0) Sheets("Sheet2").Hyperlinks.Add Anchor:=Sheets("Sheet2").Range("A65536").End(xlUp), Address:="", SubAddress:=strstr End If End If Next 

Traté de escribir el código como se muestra a continuación para validar cuando 'Manager' está escrito en una Fila diferente a la Company_Name.

(He comentado la parte que me estaba dando el error).

 Range("A2:A" & LastRow).Select ' Selection.Clearformats For Each cell In Selection celadr = cell.Address celval = cell.Value If Len(celval) >= 1 Then ' For i = 0 To cell.Offset(0, 2).Value If Trim(cell.Offset(i, 5).Value) <> "Manager" Then 'And cell.Offset(1, 0).Value < 1 Then ' Do Nothing ' Else cell.Offset(i, 5).Interior.Color = vbRed Sheets("Sheet2").Range("A65536").End(xlUp).Offset(1, 0).Value = celval & "Their should be atleast a single 'Manager' for this company" strstr = "'" & shname & "'!" & Range(celadr).Address(0, 0) Sheets("Sheet2").Hyperlinks.Add Anchor:=Sheets("Sheet2").Range("A65536").End(xlUp), Address:="", SubAddress:=strstr End If ' Next i ' If cell.Offset(1, 0).Value >= 1 Then ' End If End If Next 

¿Alguien puede guiarme sobre cómo puedo hacer un uso adecuado de la function de compensación y para la function loop / while loop / find para verificar que cada compañía tenga al less un solo administrador?

Cuando intenta determinar si falta algo o no, generalmente es más fácil establecer un boolean para usarlo luego para aplicar el procedimiento correcto.

Esto debería ayudarte a:

 Dim HasManager As Boolean, _ LastRow As Long LastRow = ActiveSheet.Range(Rows.Count).End(xlUp).Row Range("A2:A" & LastRow).Select 'Selection.Clearformats For Each cell In Selection celadr = cell.Address celval = cell.Value If Len(celval) >= 1 Then HasManager = False 'For i = 0 To cell.Offset(0, 2).Value i = 0 Do While HasManager = False And _ (cell.Offset(i, 0).Value = "" Or cell.Offset(i, 0).Value = celval) And _ cell.Offset(i, 0).Row <= LastRow + 1 If LCase(Trim(cell.Offset(i, 5).Value)) = "manager" Then HasManager = True i = i + 1 Loop If HasManager Then 'The company has at least one Manager Else 'The company doesn't have any Manager cell.Offset(i - 1, 5).Interior.Color = vbRed Sheets("Sheet2").Range("A65536").End(xlUp).Offset(1, 0).Value = celval & "Their should be atleast a single 'Manager' for this company" strstr = "'" & shname & "'!" & Range(celadr).Address(0, 0) End If Else End If Next cell