Vos deux exemples d'entrées ne correspondent pas aux données du fichier CSV lié et sont un peu flous. Il semble que vous importez le fichier CSV dans un classeur et le modifiez. (Vous avez cependant oublié de coller le lien dans le classeur.)
Ainsi, pour ma solution, je vais utiliser les données de fichier CSV non modifiées. Vous devrez ajuster les formules en fonction de votre tableau actuel. De plus, étant donné que le "score" des six jeux précédents est en réalité plus simple à calculer que les résultats individuels victoire / défaite / match nul, ma formule renverra ce qui suit:
Entrez la formule suivante BN2
et ctrl-entrez / copiez-collez / remplissez en bas et à droite / remplissez automatiquement le reste du tableau BN
et des BO
colonnes:
=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)
Explication:
La version simplifiée de la formule est la suivante:
=
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
)
Pour chaque ligne précédente contenant l'équipe cible, la formule crée une valeur spéciale. (Pour les autres lignes, la valeur est zéro.) Les deux chiffres les plus à droite de la valeur spéciale contiennent la valeur du résultat ( 3
pour un gain, 1
un tirage au sort et 0
une perte), tandis que les chiffres les plus à gauche contiennent le numéro de la ligne.
La LARGE()
fonction sélectionne ensuite les valeurs spéciales des six dernières lignes correspondantes (c'est-à-dire celles dont les six plus grands numéros figurent dans les chiffres les plus à gauche). L'utilisation SUMPRODUCT()
de ces six valeurs donne une seule valeur où les deux chiffres les plus à droite sont la somme des valeurs de résultat, c'est-à-dire le "score". La MOD()
fonction extrait ce score.
La IFERROR()
fonction est là pour supprimer l’ #NUM!
erreur qui se produit de ligne 2
en ligne 6
(en raison de la LARGE()
tentative d’obtenir les six valeurs les plus grandes d’un tableau contenant moins de six éléments).
Notez que s'il y a moins de six matchs précédents pour l'équipe cible, la valeur des éléments du tableau correspondant aux matchs manquants sera zéro.
Passer en revue la formule BO22
devrait clarifier ce qui précède. Notez que depuis TRUE
et FALSE
sont convertis en 1
et 0
respectivement lorsqu'ils sont utilisés dans une multiplication, pour des raisons de compacité, j'utiliserai ces chiffres dans les évaluations suivantes.
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}
, les valeurs spéciales pour les équipes à domicile pour toutes les lignes précédentes
($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}
, les valeurs spéciales si l'équipe à domicile correspond à l'équipe cible ( D22
) pour toutes les lignes précédentes
- De même,
($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}
, les valeurs spéciales si l’ équipe à l’ extérieur correspond à l’équipe cible pour toutes les lignes précédentes.
+{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}
, les valeurs spéciales si un match impliquait l'équipe cible pour toutes les lignes précédentes. (Notez que, comme les deux tableaux sont "mutuellement exclusifs", leur sommation ne causera aucune interférence.)
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}
, les valeurs spéciales des six matches précédents impliquant l'équipe cible
SUMPRODUCT({0,0,0,0,303,2101})
→ 2404
, où les deux chiffres les plus à droite sont le "score", c'est-à-dire la somme des valeurs de résultat, et les chiffres à gauche non pertinents sont la somme des numéros de ligne. (Notez que cette expression SUMPRODUCT()
est utilisée à la place des SUM()
expressions internes, elles sont évaluées en tant que tableaux, évitant ainsi la nécessité de saisir la formule par un tableau.)
MOD(2404,100)
→ 4
, le "score" (ou forme) des six matches précédents impliquant l'équipe cible
Remarques:
- La formule raffinée fonctionne réellement si elle est entrée.
- Vous devrez conserver la
FTR
colonne ( G:G
) du fichier CSV brut pour que les formules fonctionnent. (La colonne n'est pas strictement requise, mais les formules doivent être ajustées pour fonctionner sans elle. J'ai choisi d'utiliser la colonne car elle facilite la lecture de la formule.)
- Modification de la formule à utiliser uniquement les trois précédents jeux pertinents est une simple question de changer
{6,5,4,3,2,1}
à {3,2,1}
.
- Le facteur de mise à l'échelle des lignes ne fonctionne que si
[# relevant previous games]*[max outcome value] < [row scaling factor]
. En utilisant les valeurs de l'exemple 6*3=18 < 100
, nous pouvons donc voir que 100
c'est le facteur de mise à l'échelle minimum qui fonctionnera. (Eh bien, en fait, la puissance minimale de dix facteurs d’échelle, tout comme 19
le minimum absolu .)
Si vous souhaitez réellement obtenir les résultats individuels des six matches précédents correspondants, je peux ajouter cela à la réponse. Ajoutée.
Addendum n ° 1:
Pour les résultats individuels des six matchs précédents de l'équipe à domicile de la ligne en cours, le tableau multicellulaire saisit ( Ctrl+ Shift+ Enter) la formule suivante dans six cellules consécutives de la ligne 2
et copié-collé / rempli dans le reste des colonnes du tableau (ne pas t oublier d’enlever le {
et }
):
{=
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"
)}
Pour les résultats individuels des six derniers matches de l'équipe à l' extérieur de la ligne en cours, il suffit de changer les deux =C2
pour =D2
.
Pour renvoyer les résultats sous forme de chaîne dans une seule cellule, enveloppez simplement la formule entière avec TEXTJOIN("",TRUE,…)
. (Fonctionne uniquement de manière native dans Excel 2016. Les versions antérieures d'Excel requièrent un fichier UDF poly-fill - voir cet article pour en savoir plus.)
Explication:
La formule est fondamentalement la même que la précédente avec seulement trois modifications:
- Une valeur de résultat de
2
est ajoutée pour une perte
- Les valeurs de résultat ne sont plus additionnées
- Au lieu de cela, ils sont utilisés comme premier argument (c’est-à-dire comme index) de la
CHOOSE()
fonction pour sélectionner les caractères de résultat appropriés.
Enfin, pour vous montrer que je ne plaisantais pas sur le fait que le score est plus facile à calculer que les résultats individuels, voici la formule de résultats la plus simple, qui ne calcule pas d'abord les valeurs de score individuelles:
{=
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"
)))}
Addenda n ° 2:
Toutes les formules précédentes profitent du fait que les en- têtes de colonnes C
, D
et G
ne correspondent à aucune des valeurs de données dans ces colonnes, et que les valeurs dans les colonnes ne sont utilisées que dans les comparaisons. Cela signifie que la valeur du premier élément (c'est-à-dire correspondant à la ligne d'en-tête) des tableaux pour les équipes locale et celle de l'extérieur sera un zéro.
Cependant, si les valeurs dans les colonnes sont réellement utilisées numériquement dans la formule, comme dans le cas du total des buts marqués par chaque équipe lors de leurs six derniers matches,
=
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
)
alors la valeur du premier élément des tableaux sera la valeur d'erreur #VALUE!
, la LARGE()
fonction retournera toujours le tableau {#VALUE!,#VALUE!,#VALUE!,#VALUE!,#VALUE!,#VALUE!}
et la formule retournera toujours un zéro.
Il y a plusieurs façons de résoudre ce problème.
Une solution consiste à entrer la formule en commençant par ligne 3
au lieu de ligne 2
et en la modifiant afin que les plages commencent par ligne 2
au lieu de ligne 1
(par exemple $C$2:$C2=C3
au lieu de $C$1:$C2=C3
). Les valeurs de ligne 2
seront toujours des zéros, bien sûr, et peuvent être entrées manuellement en tant que telles.
Une autre méthode consiste à envelopper la somme des tableaux dans une IFERROR()
fonction pour convertir l'erreur du premier élément en zéro avant de la transmettre à la LARGE()
fonction:
{=
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
)}
Remarques:
- Cette formule doit être entrée dans un tableau. Normalement, les expressions dans une
SUMPRODUCT()
fonction sont évaluées en tant que tableaux, mais les expressions dans une imbriquée IFERROR()
sont une des exceptions.
- Puisque la formule est entrée dans un tableau,
SUM()
peut être utilisée à la place de SUMPRODUCT()
. (Rappelez-vous qu’il n’était utilisé à l’origine que pour forcer l’évaluation de tableaux sans exiger que la formule soit entrée dans un tableau.)
+3*($G$1:$G1="H")+1*($G$1:$G1="D")
de l'équipe locale, par les objectifs de l'équipe locale+$E$1:$E1
. De la même manière, remplacez les valeurs de résultats+3*($G$1:$G1="A")+1*($G$1:$G1="D")
de l'équipe en déplacement par les objectifs de l'équipe en déplacement+$F$1:$F1
. (En utilisant la première formule, bien sûr.)