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:
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:
- Leer cadena de celdas (F1 - J1)
- 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.
- 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:
- Para una columna con dos celdas fusionadas, el cálculo debe considerarse solo una vez para esa persona.
- El cálculo de mi resumen se basa en datos de dos filas.
- 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"))),"")
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 TEXTJOIN
y FILTERXML
. Existe una limitación en el sentido de que la cadena resultante de la TEXTJOIN
función no puede exceder 32,767
los caracteres. Si eso supone un problema, entonces una solución VBA o Power Query podría ser mejor.
Además, FILTERXML
no 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
(usandoTEXTJOIN
) para crear un nodo separado para cada celda.- nuestro
xPath
argumento devuelve solo aquellos nodos cuyostart-with
nombre del Proyecto está en la fila 1. - Luego usamos
SUBSTITUTE
para crear otroXML
basado en nodos separados por espacios con unxPath
que devuelve el último nodo. - Haz las operaciones matemáticas.
- nuestro
EDITAR:
Si lo hacesNOtiene la FILTERXML
funció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, 15
caracteres, 5
espacios y 24
celdas, eso sería aproximadamente 12,000
caracteres.