프로젝트 및 자원 할당 보고서를 작성하고 있습니다. 보고서의 오른쪽 섹션에 요약을 표시하기 위한 수식을 생성하는 데 도움이 필요합니다.
내 보고서의 사양은 다음과 같습니다.
- 2행부터 15행까지 A열은 각 프로젝트에 할당된 자원(인원)을 나타냅니다.
- B열, C열....은 매월 각 프로젝트에 할당된 자원의 비율을 나타냅니다.
- 각 리소스는 매월 1개 또는 2개의 프로젝트에서 작업할 수 있으므로 A열의 각 리소스는 2개의 셀로 병합됩니다.
- 한 달에 단일 프로젝트를 진행하는 리소스에는 두 셀이 모두 병합됩니다. 2개의 프로젝트에서 작업하는 리소스에는 프로젝트를 나타내는 2개의 행이 있습니다.
- 각 프로젝트에는 프로젝트에 할당된 해당 자원의 비율을 나타내는 숫자가 있습니다.
내 보고서의 스크린샷은 다음과 같습니다.
여기 요약에서는 각 사람이 각 프로젝트에 소비하게 될 총 주 수를 나타냅니다. 계산을 단순화하기 위해 매월 정확히 4주에 해당한다고 가정합니다. 그래서,
- A라는 사람이 2월에 프로젝트 B에서 100% 작업을 하고 있는 경우입니다. 그러면 요약에서 합산을 위해 고려되는 숫자는 프로젝트 B의 경우 4가 되어야 합니다.
- 마찬가지로 A가 1월에 2개의 프로젝트에서 50-50% 작업을 하고 있는 경우에도 마찬가지입니다. 그러면 합산을 위해 고려되는 기간은 각 프로젝트마다 2~2주가 되어야 합니다.
일반적으로 요약에서 고려되는 숫자는 수학적으로 다음과 같이 표현될 수 있습니다.
4 *[Percentage from column] / 100
내가 달성하려는 것은 다음과 같습니다.
- 셀에서 문자열 읽기(F1 - J1)
- 두 행(B2, C2...) 및 (B3, C3...)의 사람 열에서 조회를 수행하여 프로젝트 문자열로 시작하는 셀을 가져옵니다.
- 위 셀의 숫자를 필터링합니다(2단계). 숫자를 합산하고 100으로 나눈 다음 4를 곱합니다(주 수를 구함).
다음은 비슷한 질문에 대한 답변을 참조하여 만든 것입니다.여기:
=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, "")
프로젝트 B의 경우 6이 됩니다. 이를 단순화할 수 있는 방법이 있습니까? 여기서는 중복된 작업을 많이 하고 있는 것 같아요. 또한 프로젝트를 찾을 수 없으면 0을 반환합니다. 나는 그 자리에 빈 문자열을 선호합니다
이 계산을 수행하는 더 좋은 방법이 있는지 자유롭게 제안해 주십시오.
메모:
- 두 개의 셀이 병합된 열의 경우 해당 사람에 대해 한 번만 계산을 고려해야 합니다.
- 내 요약 계산은 두 행의 데이터를 기반으로 합니다.
- 여기서는 사람 이름("사람 A", "사람 B" 등)과 프로젝트 이름("프로젝트 A", "프로젝트 B" 등) 문자열을 자리 표시자 텍스트로 사용하고 있습니다. 실제 보고서에서는 이러한 값이 임의의 알파벳으로 실제 값으로 표시됩니다.
PS: 이는 열 내의 두 셀을 병합할 수 있는 단일 열에 대한 요약을 생성하던 이전 질문과 유사합니다.Excel - 시작 문자열을 기준으로 행을 필터링하고, 필터링된 행에서 숫자를 읽고, 산술 연산을 수행하여 열 요약을 생성합니다.. 그러나 여기서는 요약을 얻기 위해 두 행에 대해 계산을 수행하고 있습니다. 그리고 병합된 행 셀은 계산 시 한 번만 고려하면 됩니다.
답변1
어쩌면 이 짧은 공식 제안을 시도해 보세요.
1] 에서 F2
수식은 가로 및 세로로 복사되었습니다.
=SUMPRODUCT(4*TEXT(SUBSTITUTE($B2:$C3,F$1,""),"0%;;;\0"))
2] 이전 질문도 이 동일한 공식으로 해결할 수 있습니다. A19:C23에 넣었습니다.
에서는 B19
수식이 가로 및 세로로 복사되었습니다.
=SUMPRODUCT(0+TEXT(SUBSTITUTE(B$2:B$15,$A19,""),"0%;;;\0"))
그리고,
편집하다
0을 제거하려면
1] 셀 형식 사용 :
>> "회계" >> "기호"의 모든 수식 셀 형식에서 "없음" >> "소수점" 선택: "1"을 클릭합니다.
2] IFERROR(1(/1......),"")를 사용하여 F2 수식에 추가하고 >>가 됩니다.
=IFERROR(1/(1/SUMPRODUCT(4*TEXT(SUBSTITUTE($B2:$C3,F$1,""),"0%;;;\0"))),"")
답변2
처리할 범위가 다차원이기 때문에 솔루션은 더 복잡합니다. (이전 질문에서는 단일 차원이었습니다.)
TEXTJOIN
처리하는 한 가지 방법은 및 를 사용하여 수행할 수 있는 1차원 배열로 변환하는 것입니다 FILTERXML
. TEXTJOIN
함수에 의해 생성된 문자열은 글자 수를 초과할 수 없다는 제한이 있습니다 32,767
. 이것이 문제가 된다면 VBA 또는 파워 쿼리 솔루션이 더 나을 수도 있습니다.
또한 FILTERXML
Mac 버전이나 Excel Online에서는 사용할 수 없습니다.
해당 제한 사항이 적용되지 않는 경우
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()]")),"")
오른쪽 아래로 채우기
먼저
XML
(을 사용하여TEXTJOIN
)을 만들어 각 셀에 대해 별도의 노드를 만듭니다.- 우리의 인수는 행 1의 프로젝트 이름이
xPath
있는 노드만 반환합니다 .start-with
- 그런 다음 마지막 노드를 반환하는 를 사용하여 공백으로 구분된 노드를 기반으로
SUBSTITUTE
다른 노드를 만드는 데 사용합니다 .XML
xPath
- 수학적 연산을 수행합니다.
- 우리의 인수는 행 1의 프로젝트 이름이
편집하다:
만약 당신이아니다함수 가 있으면 FILTERXML
이 공식을 사용해 보세요(O365 Mac 또는 Windows 및 Excel 온라인)이는 다른 방법을 사용하여 처리를 위해 2D 배열을 1D 배열로 변환합니다.
=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))),"")
이 수식에는 여전히 32,767자 제한이 있습니다. 해당 문제가 발생하는지 여부는 주로 프로젝트 이름에 공백이 몇 개 있는지에 따라 달라집니다. 계산 공식은 대략 다음과 같습니다.
a = 셀의 평균 문자 수
b = 셀의 공백 수
c = 셀 수
(a+b*99) * c
15
예를 들어 문자, 5
공백, 셀이 있다면 대략 문자 24
정도가 될 것입니다 12,000
.