번거롭게(?) 조합 나열하는게 귀찮을 때, 조합 결과를 직접 구하는 방법을 생각해봤다.
e8 셀
=IF(AND(근사조합수>=ROW($A1),구성수>=COLUMN(A$1)),INDEX(조합,INDEX(근사조합번호,ROW($A1)),COLUMN(A$1))*INDEX(원시값,COLUMN(A$1)),"")
이외에 계산은 모두 이름정의에서 처리된다.
단 아래 순서대로 이름정의에 등록해야 한다.
상한선 =$B$1
구성수 =COUNT($B$3:$B$14)
원시값 =OFFSET($B$2,1,0,구성수,1)
단위벡터 =POWER(원시값,0)
경우의수 =POWER(2,구성수)
조합번호 =ROW(INDIRECT("1:"&경우의수))
열번호 =TRANSPOSE(ROW(INDIRECT("1:"&구성수)))
조합 =N(MOD(조합번호-1,POWER(2,열번호))+1<=POWER(2,열번호-1))
상한선조합 =IF(상한선>=MMULT(조합,원시값),MMULT(조합,원시값))
근사값 =MAX(상한선조합)
근사조합수 =SUM(N(MMULT(조합,원시값)=근사값))
근사조합번호 =LARGE(N(상한선조합=근사값)*조합번호,ROW(INDIRECT("1:"&근사조합수)))
늙은 노트북에서 처리하는데 약 1분 정도 걸린다.
아참 조합 구하는 방법에 제약이 있다.
이는 MMult 함수의 제약 때문인데, 구성수가 12개 까지가 최대다.



댓글을 달아 주세요