시작 문자열을 기준으로 열을 필터링하고, 필터링된 셀에서 숫자를 읽고, 산술 연산을 수행하여 Excel에서 두 행의 요약을 생성합니다.

시작 문자열을 기준으로 열을 필터링하고, 필터링된 셀에서 숫자를 읽고, 산술 연산을 수행하여 Excel에서 두 행의 요약을 생성합니다.

프로젝트 및 자원 할당 보고서를 작성하고 있습니다. 보고서의 오른쪽 섹션에 요약을 표시하기 위한 수식을 생성하는 데 도움이 필요합니다.

내 보고서의 사양은 다음과 같습니다.

  • 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

내가 달성하려는 것은 다음과 같습니다.

  1. 셀에서 문자열 읽기(F1 - J1)
  2. 두 행(B2, C2...) 및 (B3, C3...)의 사람 열에서 조회를 수행하여 프로젝트 문자열로 시작하는 셀을 가져옵니다.
  3. 위 셀의 숫자를 필터링합니다(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을 반환합니다. 나는 그 자리에 빈 문자열을 선호합니다

이 계산을 수행하는 더 좋은 방법이 있는지 자유롭게 제안해 주십시오.

메모:

  1. 두 개의 셀이 병합된 열의 경우 해당 사람에 대해 한 번만 계산을 고려해야 합니다.
  2. 내 요약 계산은 두 행의 데이터를 기반으로 합니다.
  3. 여기서는 사람 이름("사람 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 또는 파워 쿼리 솔루션이 더 나을 수도 있습니다.

또한 FILTERXMLMac 버전이나 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다른 노드를 만드는 데 사용합니다 .XMLxPath
    • 수학적 연산을 수행합니다.

여기에 이미지 설명을 입력하세요

편집하다:

만약 당신이아니다함수 가 있으면 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.

관련 정보