두 개의 예제 항목이 링크 된 CSV 파일의 데이터와 일치하지 않으며 약간 명확하지 않습니다. CSV 파일을 통합 문서로 가져 와서 수정하는 것 같습니다. (그러나 통합 문서에 링크를 붙여 넣는 것을 잊었습니다.)
따라서 제 솔루션을 위해 수정되지 않은 CSV 파일 데이터를 사용하려고합니다. 실제 테이블에 맞게 수식을 조정해야합니다. 또한 관련 이전 6 개 게임의 "점수"가 개별적인 승리 / 손실 / 추첨 결과보다 실제로 계산하기가 쉽기 때문에 내 공식은 다음을 반환합니다.
에 다음 공식을 입력하십시오. BN2
및 Ctrl-Enter / 복사 - 붙여 넣기 / 채우기 및 오른쪽 / 자동 채우기를 나머지 테이블의 BN
과 BO
열 :
=IFERROR(MOD(SUMPRODUCT(LARGE(+($C$1:$C1=C2)*(100*ROW($G$1:$G1)+3*($G$1:$G1="H")+1*($G$1:$G1="D"))+($D$1:$D1=C2)*(100*ROW($G$1:$G1)+3*($G$1:$G1="A")+1*($G$1:$G1="D")),{6,5,4,3,2,1})),100),0)
설명:
공식의 prettified 버전은 다음과 같습니다 :
=
IFERROR(
MOD(
SUMPRODUCT(
LARGE(
+($C$1:$C1=C2)*(100*ROW($G$1:$G1)+3*($G$1:$G1="H")+1*($G$1:$G1="D"))
+($D$1:$D1=C2)*(100*ROW($G$1:$G1)+3*($G$1:$G1="A")+1*($G$1:$G1="D")),
{6,5,4,3,2,1}
)
),
100
),
0
)
대상 팀이 포함 된 이전 행마다 수식이 특별한 값을 만듭니다. (다른 행의 경우 값은 0입니다.) 특수 값의 오른쪽 두 자리는 결과 값을 포함합니다 3
승리를 위해, 1
끌기를 위해, 그리고 0
손실의 경우) 가장 왼쪽 숫자에 행 번호가 포함됩니다.
그만큼 LARGE()
함수는 가장 최근에 일치하는 6 개의 행의 특수 값 (즉, 가장 왼쪽에있는 6 개의 행 번호가 가장 큰 행)을 선택합니다. 사용 SUMPRODUCT()
이 6 개 값의 결과 중 가장 오른쪽 두 자리가 결과 값의 합계, 즉 "점수"인 단일 값이 생성됩니다. 그만큼 MOD()
함수는이 점수를 추출합니다.
그만큼 IFERROR()
기능은 #NUM!
행에서 발생하는 오류 2
노를 젓다 6
(때문에 LARGE()
6 개 미만의 요소를 포함하는 배열의 최대 6 개 값을 얻으려고 시도 함).
대상 팀에 대해 이전에 6 번 미만의 일치가있는 경우 누락 된 일치 항목에 해당하는 배열 요소의 값은 0이됩니다.
수식을 밟아서 BO22
위를 명확하게해야합니다. 이후 TRUE
과 FALSE
~로 변환된다. 1
과 0
각각 곱셈에 사용될 때, 나는 다음의 평가에서 그 숫자들을 사용할 것입니다.
100*ROW($G$1:$G21)+3*($G$1:$G21="H")+1*($G$1:$G21="D")
→ 100*{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21}+3*({0;1;0;0;0;1;0;0;1;1;0;0;0;1;1;1;1;0;1;0;0})+1*({0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1})
→ {100;203;300;400;500;603;701;801;903;1003;1100;1200;1300;1403;1503;1603;1703;1800;1903;2000;2101}
, 모든 이전 행에 대한 홈 팀의 특별 값
($C$1:$C21=D22)*({100;203;300;400;500;603;701;801;903;1003;1100;1200;1300;1403;1503;1603;1703;1800;1903;2000;2101})
→ ({0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1})*({100;203;300;400;500;603;701;801;903;1003;1100;1200;1300;1403;1503;1603;1703;1800;1903;2000;2101})
→ {0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2101}
, 홈 팀이 목표 팀과 일치하면 특별 값 ( D22
) 이전의 모든 행에 대해
- 비슷하게,
($D$1:$D21=D22)*(100*ROW($G$1:$G21)+3*($G$1:$G21="A")+1*($G$1:$G21="D"))
→ {0;0;303;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0}
, 특별한 값은 떨어져 팀은 모든 이전 행에 대해 대상 팀과 일치합니다.
+{0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2101}+{0;0;303;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0}
→ {0;0;303;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2101}
, 일치하는 경우 모든 이전 행에 대해 대상 팀이 관련된 특수 값. 두 배열이 "상호 배타적"이므로 합쳐도 아무런 간섭도 발생하지 않습니다.
LARGE({0;0;303;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2101},{6,5,4,3,2,1})
→ {0,0,0,0,303,2101}
, 대상 팀과 관련된 이전 여섯 경기의 특별 가치
SUMPRODUCT({0,0,0,0,303,2101})
→ 2404
가장 오른쪽 두 자리가 결과 값의 합계 인 "점수"이고 관련이없는 가장 왼쪽 자리수는 행 번호의 합계입니다. (참고 SUMPRODUCT()
대신에 사용된다. SUM()
내부 하위 표현식은 배열로 평가되므로 배열을 배열 입력 할 필요가 없습니다.
MOD(2404,100)
→ 4
, 목표 팀과 관련된 이전 여섯 경기의 "점수"(또는 양식)
노트:
- prettified 수식 실제로 입력 한 경우 작동합니다.
- 당신은
FTR
열 ( G:G
)을 사용하여 수식이 작동하도록 원시 CSV 파일에서 가져옵니다. (열은 꼭 필요한 것은 아니지만 수식을 사용하지 않고 수식을 조정해야합니다. 수식을 읽기 쉽도록 열을 사용하기로했습니다.)
- 이전 세 개의 관련 게임 만 사용하도록 수식을 수정하는 것은 변화의 간단한 문제입니다.
{6,5,4,3,2,1}
에 {3,2,1}
.
- 행 크기 조정 계수는 다음 경우에만 작동합니다.
[# relevant previous games]*[max outcome value] < [row scaling factor]
. 예제의 값을 사용하여, 6*3=18 < 100
, 그래서 우리는 그것을 볼 수 있습니다. 100
작동 할 최소 배율 인수입니다. (실제로, 최소값 10의 힘 스케일링 팩터, 19
는 순수한 최저한의.)
관련 이전 6 경기의 개인 결과가 실제로 필요한 경우이를 답변에 추가 할 수 있습니다. 추가됨.
부록 # 1 :
현재 행의 홈 팀의 이전 여섯 경기의 개인 결과에 대해 멀티 셀 어레이 입력 ( Ctrl + 시프트 + 들어가다 ) 행의 여섯 연속 셀에 다음 수식 2
나머지 표의 열에 복사하여 붙여 넣기 / 채우기를 수행하십시오. {
과 }
) :
{=
CHOOSE(1+
IFERROR(
MOD(
LARGE(
+($C$1:$C1=C2)*(100*ROW($G$1:$G1)+3*($G$1:$G1="H")+2*($G$1:$G1="A")+1*($G$1:$G1="D"))
+($D$1:$D1=C2)*(100*ROW($G$1:$G1)+3*($G$1:$G1="A")+2*($G$1:$G1="H")+1*($G$1:$G1="D")),
{6,5,4,3,2,1}
),
100
),
0
),
"-","D","L","W"
)}
현재 행의 개별 결과 떨어져 팀의 이전 여섯 경기, 모두 변경 =C2
...에 대한 =D2
.
단일 셀에서 결과를 문자열로 반환하려면 전체 수식을 TEXTJOIN("",TRUE,…)
. (Excel 2016에서만 기본적으로 작동합니다. 이전 버전의 Excel에서는 폴리 필 UDF가 필요합니다. 이 게시물 기본적인 것을 위해.)
설명:
이 수식은 기본적으로 세 가지 수정 사항이있는 이전 수식과 같습니다.
- 결과 값
2
손실을 위해 추가된다.
- 결과 값은 더 이상 합산되지 않습니다.
- 대신, 그것들은 첫 번째 인수 (즉, 인덱스)로 사용됩니다.
CHOOSE()
기능을 사용하여 적절한 결과 문자를 선택하십시오.
마지막으로, 개별 결과보다 점수 계산이 더 쉽다고 농담을하지 않은 것을 보여주기 위해 다음은 개별 점수 값을 먼저 계산하지 않는 가장 간단한 결과 공식입니다.
{=
IF(
ISERROR(0/LARGE(ROW($G$1:$G1)*(($C$1:$C1=C2)+($D$1:$D1=C2)),{6,5,4,3,2,1})),
"-",
IF(
"D"=INDEX($G:$G,N(IF(1,1+LARGE((ROW($G$1:$G1)-1)*(($C$1:$C1=C2)+($D$1:$D1=C2)),{6,5,4,3,2,1})))),
"D",
IF(
+("H"=INDEX($G:$G,N(IF(1,1+LARGE((ROW($G$1:$G1)-1)*(($C$1:$C1=C2)+($D$1:$D1=C2)),{6,5,4,3,2,1})))))
*(C2=INDEX($C:$C,N(IF(1,1+LARGE((ROW($G$1:$G1)-1)*(($C$1:$C1=C2)+($D$1:$D1=C2)),{6,5,4,3,2,1})))))
+("A"=INDEX($G:$G,N(IF(1,1+LARGE((ROW($G$1:$G1)-1)*(($C$1:$C1=C2)+($D$1:$D1=C2)),{6,5,4,3,2,1})))))
*(C2=INDEX($D:$D,N(IF(1,1+LARGE((ROW($G$1:$G1)-1)*(($C$1:$C1=C2)+($D$1:$D1=C2)),{6,5,4,3,2,1}))))),
"W",
"L"
)))}
부록 # 2 :
이전의 모든 수식은 열 머리글 C
, D
, 및 G
해당 열의 데이터 값과 일치하지 않으며 열의 값은 비교에서만 사용됩니다. 이는 집 및 원정 팀에 대한 어레이의 첫 번째 요소 (즉, 머리말 행에 해당)의 값이 0이됨을 의미합니다.
그러나 열의 값이 수식에서 실제로 숫자로 사용되는 경우 마지막 6 경기에서 각 팀의 득점 총계를 얻는 경우와 마찬가지로,
=
IFERROR(
MOD(
SUMPRODUCT(
LARGE(
+($C$1:$C1=C2)*(100*ROW($E$1:$E1)+$E$1:$E1)
+($D$1:$D1=C2)*(100*ROW($F$1:$F1)+$F$1:$F1),
{6,5,4,3,2,1}
)
),
100
),
0
)
배열의 첫 번째 요소의 값은 오류 값이됩니다. #VALUE!
, LARGE()
함수는 항상 배열을 반환합니다. {#VALUE!,#VALUE!,#VALUE!,#VALUE!,#VALUE!,#VALUE!}
수식은 항상 0을 반환합니다.
이것을 해결할 수있는 몇 가지 방법이 있습니다.
한 가지 방법은 행에서 시작하는 수식을 입력하는 것입니다. 3
행 대신에 2
범위가 행에서 시작하도록 변경 2
행 대신에 1
(예 : $C$2:$C2=C3
대신에 $C$1:$C2=C3
). 행의 값 2
물론 항상 0이되며 수동으로 입력 할 수 있습니다.
또 다른 방법은 배열의 합을 IFERROR()
첫 번째 요소의 오류를 0으로 변환 한 다음 LARGE()
기능:
{=
IFERROR(
MOD(
SUMPRODUCT(
LARGE(
IFERROR(
+($C$1:$C1=C2)*(100*ROW($E$1:$E1)+$E$1:$E1)
+($D$1:$D1=C2)*(100*ROW($F$1:$F1)+$F$1:$F1),
0
),
{6,5,4,3,2,1}
)
),
100
),
0
)}
노트:
- 이 수식은 배열로 입력해야합니다. 일반적으로,
SUMPRODUCT()
함수는 배열로 평가되지만 중첩 된 식 IFERROR()
예외 중 하나입니다.
- 수식이 배열에 입력되므로,
SUM()
대신에 사용할 수있다. SUMPRODUCT()
. (원래 어레이 평가를 강제하는 용도로만 사용되었음을 기억하십시오 없이 수식을 배열에 입력해야합니다.)