Filtre columnas según la cadena inicial, lea el número de las celdas filtradas y realice operaciones aritméticas para generar un resumen de dos filas en Excel

Filtre columnas según la cadena inicial, lea el número de las celdas filtradas y realice operaciones aritméticas para generar un resumen de dos filas en Excel

Tengo un informe de asignación de recursos y proyectos. Necesito ayuda para generar la fórmula para mostrar el resumen en la sección derecha del informe.

Aquí están las especificaciones de mi informe:

  • La columna A de la fila 2 a la fila 15 representa el recurso (personas) asignado para cada proyecto.
  • Columna B, Columna C.... representa el porcentaje de recurso asignado en cada proyecto por mes
  • Cada recurso de la columna A se combina en 2 celdas porque cada recurso puede funcionar en 1 o 2 proyectos por mes.
  • El recurso que trabaja en un solo proyecto en un mes tendrá ambas celdas fusionadas. El recurso que trabaja en 2 proyectos tendrá 2 filas que representan el proyecto.
  • Frente a cada proyecto hay un número que representa el porcentaje de ese recurso asignado al proyecto.

Aquí está la captura de pantalla de mi informe:

Captura de pantalla de la hoja de asignación de recursos del proyecto

Aquí, en el resumen, represento el número total de semanas que cada persona dedicará a cada proyecto. Para simplificar el cálculo, supongo que cada mes equivale exactamente a 4 semanas. Entonces,

  • Si una Persona A está trabajando al 100% en el Proyecto B en febrero. Entonces el número a considerar para la suma resumida debe ser 4 para el Proyecto B
  • De manera similar, si la Persona A está trabajando al 50-50% en 2 proyectos en enero. Luego, el número a considerar para la suma debe ser de 2 a 2 semanas para cada proyecto.

En general, el número a considerar de forma resumida podría representarse matemáticamente como:

4 *[Percentage from column] / 100

Esto es lo que estoy tratando de lograr:

  1. Leer cadena de celdas (F1 - J1)
  2. Haga una búsqueda en la columna de persona en dos filas (B2, C2...) y (B3, C3...) para que las celdas comiencen con la cadena del proyecto.
  3. Filtre los números de las celdas anteriores (del paso 2). Sume los números, divídalos por 100 y multiplíquelos por 4 (para obtener el número de semanas).

Esto es lo que creé tomando la respuesta a una pregunta similar como referencia deaquí:

=IFERROR((IFERROR(SUM(--((TRIM(RIGHT(SUBSTITUTE(FILTER($B2:$C2,ISNUMBER(SEARCH(J$1,$B2:$C2)))," ",REPT(" ",99)),99))))), 0) + IFERROR(SUM(--((TRIM(RIGHT(SUBSTITUTE(FILTER($B3:$C3,ISNUMBER(SEARCH(J$1,$B3:$C3)))," ",REPT(" ",99)),99))))), 0))*4, "")

lo que me da 6 para el Proyecto B. ¿Hay alguna manera de simplificar esto? Creo que estoy haciendo muchas operaciones redundantes aquí. Además, devuelve 0 si no se encuentra el proyecto. Prefiero una cadena vacía en su lugar.

No dude en sugerir si existe una mejor manera de realizar este cálculo.

Nota:

  1. Para una columna con dos celdas fusionadas, el cálculo debe considerarse solo una vez para esa persona.
  2. El cálculo de mi resumen se basa en datos de dos filas.
  3. Aquí estoy usando cadenas de nombres de personas ("Persona A", "Persona B", etc.) y nombres de proyectos ("Proyecto A", "Proyecto B", etc.) solo como texto de marcador de posición. En un informe real, estos van a valores reales con alfabetos aleatorios.

PD: Es similar a mi pregunta anterior en la que estaba generando un resumen en una sola columna, donde se podían fusionar dos celdas dentro de la columna:Excel: filtre filas según la cadena inicial, lea números de filas filtradas y realice operaciones aritméticas para generar un resumen de columnas. Sin embargo, aquí estoy realizando cálculos en dos filas para obtener el resumen. Y las celdas de fila fusionadas deben considerarse solo una vez para el cálculo.

Respuesta1

Quizás pruebe esta propuesta de fórmula más corta.

1] En F2, fórmula copiada de arriba a abajo:

=SUMPRODUCT(4*TEXT(SUBSTITUTE($B2:$C3,F$1,""),"0%;;;\0")) 

2] Tu pregunta anterior también se puede resolver con esta misma fórmula, la puse en A19:C23.

En B19, fórmula copiada de arriba a abajo:

=SUMPRODUCT(0+TEXT(SUBSTITUTE(B$2:B$15,$A19,""),"0%;;;\0"))

Y,

Editar

Para eliminar 0

1] Usando formato de celda:

Todas las celdas de fórmula se formatean en >> "Contabilidad" >> "Símbolo", elija "Ninguno" >> "Lugar decimal": haga clic en "1"

2] Usando IFERROR(1(/1.......),"") agregando a la fórmula F2, y conviértase en >>

=IFERROR(1/(1/SUMPRODUCT(4*TEXT(SUBSTITUTE($B2:$C3,F$1,""),"0%;;;\0"))),"")

ingrese la descripción de la imagen aquí

Respuesta2

La solución es más complicada porque el rango a procesar es multidimensional. (En su pregunta anterior era solo una dimensión).

Una forma de procesarlo es convertirlo en una matriz unidimensional que se puede hacer usando TEXTJOINy FILTERXML. Existe una limitación en el sentido de que la cadena resultante de la TEXTJOINfunción no puede exceder 32,767los caracteres. Si eso supone un problema, entonces una solución VBA o Power Query podría ser mejor.

Además, FILTERXMLno está disponible en versiones para Mac ni en Excel Online.

Si esas limitaciones no se aplican, entonces

F2: =IFERROR(4*SUM(FILTERXML("<t><s>" & SUBSTITUTE(FILTERXML("<t><s>" &TEXTJOIN("</s><s>",TRUE,$B2:$C3) & "</s></t>","//s[starts-with(.,'" & F$1 & "')]")," ","</s><s>") & "</s></t>","//s[last()]")),"")
  • Llenar hacia la derecha y hacia abajo

  • Primero creamos XML(usando TEXTJOIN) para crear un nodo separado para cada celda.

    • nuestro xPathargumento devuelve solo aquellos nodos cuyo start-withnombre del Proyecto está en la fila 1.
    • Luego usamos SUBSTITUTEpara crear otro XMLbasado en nodos separados por espacios con un xPathque devuelve el último nodo.
    • Haz las operaciones matemáticas.

ingrese la descripción de la imagen aquí

EDITAR:

Si lo hacesNOtiene la FILTERXMLfunción, prueba esta fórmula(O365 Mac o Windows y Excel en línea)que utiliza un método diferente para convertir la matriz 2D en una matriz 1D para su procesamiento:

=IFERROR(SUM(4*TRIM(RIGHT(
   SUBSTITUTE(LET(
        seq,IF(SEQUENCE(99)=1,1,(SEQUENCE(99)-1)*99),
        x,TRIM(MID(TEXTJOIN(REPT(" ",99),TRUE,$B2:$C3),seq,99)),
        y, FILTER(x,LEFT(x,LEN(F$1))=F$1),y),
   " ",REPT(" ",99)),99))),"")

Esta fórmula todavía tiene el límite de 32.767 caracteres. Que te encuentres con eso dependerá principalmente de cuántos espacios haya en el nombre del proyecto. La fórmula para calcular es aproximadamente:

  • a = número promedio de caracteres en la celda

  • b = número de espacios en la celda

  • c = número de celdas

     (a+b*99) * c
    

Si tuviera, por ejemplo, 15caracteres, 5espacios y 24celdas, eso sería aproximadamente 12,000caracteres.

información relacionada