以前,我认为将原来的问题简化为一个更简单的问题会有所帮助,因此我问了这个问题:给定两列,在 Excel 中的特定位置插入值
事实证明,我原来的问题仍未解决。
以下是我原来的问题的情况:
列中的所有重复House
表示成员属于同一学院。每个成员都有一个Preference
,其顺序在列中给出PreferencesOrder
。第四列HouseID
可以忽略;我将其包括在内,认为它可能对回答我的问题有用。
每列都有 10000 个值。
偏好类型共有 8 种,因此偏好的顺序可以取 1 至 8 之间的任意值。
现在,我想要的是以下结果。
我使用了以下命令
=IFERROR(INDEX($B$2:$B$10000, SMALL(IF($D2=$A$2:$A$10000, ROW($A$2:$A$10000)-MIN(ROW($A$2:$A$10000))+1, ""), E$1)),0)
这不考虑偏好的排序,因此给出以下输出
这不是我想要的;它忽略了偏好的排序。我该如何修改代码来考虑偏好的排序?或者我该如何更有效地做到这一点?
答案1
如果您有 Office 365,并且如果您的输入所期望的输出不正确,并且您House ID
在输出中标记的列实际上是House
,那么您可以使用以下公式:
H2: =IFERROR(FILTER(Pref[[Preferences]:[Preferences]],(Pref[[House]:[House]]=$G2)*(Pref[[Preferences Rank]:[Preferences Rank]]=COLUMNS($A:A))),0)
然后向下和向内填充以填满表格
如果您有早期版本,则可以使用:
=IFERROR(INDEX(Pref[[Preferences]:[Preferences]],AGGREGATE(14,6,1/((Pref[[House]:[House]]=$G2)*(Pref[[Preferences Rank]:[Preferences Rank]]=COLUMNS($A:A)))*ROW(Pref),1)-ROW(Pref[#Headers])),0)
请注意,我将您的“原始问题”表命名为Pref
,并且我正在使用结构化引用,但如果您愿意,可以将其更改为常规寻址。