Según mi entendimiento, sugiero una solución que use un poco de VBA UDF y una columna auxiliar.
Un pequeño ejemplo de hoja simplificada se da a continuación. Los datos relevantes están en las columnas C, E, G e I. A la derecha de cada una de estas columnas hay una columna auxiliar que puede ocultar si lo desea.
En primer lugar, en su hoja de trabajo, presione ALT+ F11para acceder al Editor VBA. Inserte un módulo desde el menú Insertar y pegue el siguiente código UDF (función definida por el usuario) en él.
Function prmarr(ParamArray arg()) As Variant
Dim arr1
cnt = 0
For i = LBound(arg) To UBound(arg)
cnt = cnt + arg(i).Rows.Count ' get total rows from all ranges
Next i
ReDim arr1(cnt) ' re dim the array for those many total rows
cnt = 0 ' reuse the counter now
'create a one dimentional list of array from all of the above ranges
For i = LBound(arg) To UBound(arg)
For Each cell In arg(i)
arr1(cnt) = cell.Value
cnt = cnt + 1
Next cell
Next i
prmarr = arr1 ' pass this array as return parameter
End Function
Tenga en cuenta que es un código VBA muy básico y que no hay ninguna validación o verificación de errores en el código. Si pasa una matriz horizontal o matrices superpuestas o matrices multidimensionales, podría fallar. Se supone que solo le pasará una matriz de columnas para que funcione correctamente.
Esta función toma un número variable de rangos de matriz de columnas y devuelve una matriz unidimensional que contiene todos los valores de celda que utilizaremos para contar el número total de ocurrencias del valor actual desde la celda inicial desde la primera columna de datos.
Como hay un código VBA en su Excel, debe guardar el archivo como una hoja de trabajo de Excel habilitada para macros .XLSM.
En D1, coloque la siguiente fórmula y arrástrela hacia las filas deseadas.
=COUNTIF($C$1:C1,C1)
Ahora a medida que avanzas a través de las siguientes columnas de ayuda. Cada columna de ayuda requiere una ligera modificación de la fórmula. Aunque la estructura sigue siendo la misma, el número de argumentos aumenta.
En F2, coloque la siguiente fórmula y presione CTRL+ SHIFT+ ENTERdentro de la barra de fórmulas para crear una fórmula de matriz. Excel ahora incluirá la fórmula entre llaves para indicar que es una fórmula de matriz. Este paso, la creación de una fórmula de matriz es necesaria, de lo contrario, dará un resultado incorrecto.
=SUM(IF(prmarr(C$1:C$9,E$1:E1)=E1,1,0))
Comprende esta fórmula. Está pasando C1: C9 y E $ 1: E1 como parámetros a UDF, es decir, columnas anteriores + primer valor de la columna actual hasta el valor de la condición de prueba y verifique si hay una coincidencia con la celda actual. En caso afirmativo, SUM producirá el recuento total de ese valor desde el inicio de la primera columna. Arrástrelo hacia abajo hasta las filas deseadas.
Del mismo modo, ahora la fórmula de la fórmula de matriz en H1 se convierte
=SUM(IF(prmarr(C$1:C$9,E$1:E$9,G$1:G1)=G1,1,0))
Y así.
Complete esto para todas las columnas.
Ahora viene la parte de Formato condicional.
Seleccione la primera celda, es decir, C1 en este caso. Vaya a Formato condicional -> Nueva regla -> Usar una fórmula para determinar qué celdas formatear.
Ahora en la Regla pon la siguiente fórmula
=MOD(D1,4)=0
Seleccione el color de fondo de su elección y haga clic en Aceptar para aplicar el formato a la celda C1.
Ahora, mientras C1 está seleccionado, haga doble clic en Copiar formato y pinte este formato en todas las columnas de datos aplicables.
Tenga en cuenta que.
- Excel podría tener un límite en la cantidad de parámetros que se pueden pasar a un UDF. No estoy muy seguro de si se aplicará y cómo se aplicará si se declara como
ParamArray as Variant
- Sugiero que primero lo pruebe en una hoja de trabajo de prueba con datos de muestra que simulen varias condiciones para obtener una confirmación de que esto funciona como se esperaba antes de aplicarlo a su hoja de producción.
- Si aún enfrenta algún problema o si hay algún error, actualice aquí e intentaré solucionarlo si el tiempo lo permite.