我想创建一个Excel公式,通过计算每个科目获得的分数百分比并相应地对其进行评分并将数据排列到此来返回此值
并且可以使用AI生成excel函数,即
=LET( Data, Table1, Headers, {"Name","Class","ID","Math","Math Grade","English","English Grade","Hindi","Hindi Grade"}, GradeThresholds, Table2, GetMaxMarks, LAMBDA(Subject, IFERROR(INDEX(Table2[Max Marks], MATCH(Subject, Table2[Subject], 0)), "Subject Not Found") ), Grades, LAMBDA(Score,MaxMarks, IFS( Score / MaxMarks >= 0.9, "A", Score / MaxMarks >= 0.75, "B", Score / MaxMarks >= 0.6, "C", Score / MaxMarks >= 0.5, "D", TRUE, "F" ) ), MathMaxMarks, GetMaxMarks("Math"), EnglishMaxMarks, GetMaxMarks("English"), HindiMaxMarks, GetMaxMarks("Hindi"), MathGrades, Grades(INDEX(Data,,MATCH("Math",Table1[#Headers],0)), MathMaxMarks), EnglishGrades, Grades(INDEX(Data,,MATCH("English",Table1[#Headers],0)), EnglishMaxMarks), HindiGrades, Grades(INDEX(Data,,MATCH("Hindi",Table1[#Headers],0)), HindiMaxMarks), ExpandedTable, HSTACK( INDEX(Data,,MATCH("Name",Table1[#Headers],0)), INDEX(Data,,MATCH("Class",Table1[#Headers],0)), INDEX(Data,,MATCH("ID",Table1[#Headers],0)), INDEX(Data,,MATCH("Math",Table1[#Headers],0)), MathGrades, INDEX(Data,,MATCH("English",Table1[#Headers],0)), EnglishGrades, INDEX(Data,,MATCH("Hindi",Table1[#Headers],0)), HindiGrades ), VSTACK(Headers, ExpandedTable) )
效果很好,但我希望公式是动态的并自我调整,因为我将向表格中添加新主题,并且不想每次添加新主题时都将主题名称硬编码到公式中。
我为您创建了这个解决方案:
[A14]=LET(marks,LAMBDA(sc,subj,LET(r,sc/XLOOKUP(subj,Table2[[#All],[Subject]],Table2[[#All],[Max Marks]]),IFS(r>=0,9,"A",r>=0,75,"B",r>=0,6,"C",r>=0,5,"D",TRUE,"F"))),
REDUCE(HSTACK(Table1[[#All],[Name]:[ID]]),SEQUENCE(1,COLUMNS(Table1[#All])-3,4),
LAMBDA(a,v,HSTACK(a,CHOOSECOLS(Table1[#All],v),VSTACK(INDEX(Table1[#All],1,v)&" Grade",marks(CHOOSECOLS(Table1,v),INDEX(Table1[#All],1,v)))))))
其中Table1是第一个表,Table2是第二个表。您可以轻松地在 Table1 中添加新行和列以及在 Table2 中添加新行,而无需修改公式。