편집 : 이전, 불필요하게 복잡한, 수식 (참조 이 개정판 )는 여전히 유용 할 것입니다. 예를 들어 입력에 슬라이딩 스케일링 요소를 적용해야하는 경우,이 대답에서 새로운 단순하고 이해하기 쉬운 버전으로 바꿨습니다.
다음은 도우미 행 / 열 또는 추가 테이블이 필요없는 비 VBA 솔루션입니다.
배열에 다음 수식을 입력하십시오. B3 그것을 오른쪽으로 채우십시오 :
{=SUM(IFERROR(INDEX($2:$2,N(IF(1,COLUMN()-(COLUMN(INDEX(3:3,1):INDEX(3:3,$A$5))-1))))/$A$5,0))}
설명:
공식의 prettified 버전은 다음과 같습니다 :
{=
SUM(
IFERROR(
INDEX(
($2:$2),
N(IF(1,COLUMN()-(COLUMN(INDEX(3:3,1):INDEX(3:3,$A$5))-1)))
)/$A$5,
0
)
)}
수식은 n = 5 인 경우 첫 번째 인수의 두 번째 인수 INDEX() 다음과 효과적으로 동일합니다.
COLUMN()-{0,1,2,3,4}
기본적으로 가변 길이를 생성하여 작동합니다 (n에 기반하여 A5 내 예제에서는) 이전 n-1에 액세스하기위한 오프셋 배열과 현재 입력 값을 비교합니다.
수식을 밟아서 I3 위의 내용을 명확하게해야합니다.
(COLUMN(INDEX(3:3,1):INDEX(3:3,$A$5))-1) → {1,2,3,4,5}-1 → {0,1,2,3,4}
COLUMN()-{0,1,2,3,4} → {9}-{0,1,2,3,4} → {9,8,7,6,5}
N(IF(1,{9,8,7,6,5})) → N({9,8,7,6,5}) → {9,8,7,6,5}
(INDEX($2:$2,{9,8,7,6,5})/$A$5 → {100000,0,0,0,7}/5 → {20000,0,0,0,1.4}
SUM(IFERROR({20000,0,0,0,1.4},0)) → 20001.40
INDEX($2:$2,N(IF(1, 표현 )))) 해킹이 필요하다. * Excel에서 배열을 반환하도록 강제로 표현 ~의 두 번째 논의 이후 INDEX() 기본적으로 단일 값으로 평가됩니다. 그냥 사용하기 INDEX($2:$2, 표현 ) ...에서 I3 ~로 이어질 것입니다
INDEX($2:$2,COLUMN()-(COLUMN(INDEX(3:3,1):INDEX(3:3,$A$5))-1)) → INDEX($2:$2,9-(COLUMN($A$3:$E$3)-1)) → INDEX($2:$2,9-( 1 -1)) → INDEX($2:$2,9) → 100000
단일 값을 리턴하는 표현식 내부에서, COLUMN( 멀티 셀 범위 ) 범위의 첫 번째 셀 열을 반환합니다.
그만큼 IFERROR() 함수는 시트 왼쪽에 가까운 셀에 수식이있는 경우 행 머리글에 액세스하거나 열 왼쪽에있는 셀에 액세스하려고 할 때 필요합니다. A.
노트:
- prettified 수식 실제로 입력 한 경우 작동합니다.
- 대괄호
($2:$2) prettified 버전에서 강제로 필요합니다 $2:$2 그것의 자신의 선에 남아 있기 위하여.
* 해킹이 왜 작동하는지에 대한 설명은 내가 먼저 스스로 알아낼 때까지 기다려야 할 것이다 ;-)