多个IF语句来确定匹配和赋值

我正在进行一项小规模的研究,基本上需要将合适的人配对成对,并给他们配对,因此每个人都可以分配到A组或B组。他们基本上需要来自同一个同一性别的诊所, 80岁或80岁以上。

我不确定这是甚至可能与Excel中,但基本上我有一个表单,你input新的参与者信息。 我需要一个公式,基本上检查这3个标准与以前的条目,以find一个匹配所有3,然后分配相同的对号码。 如果找不到合适的匹配,则需要分配一个新的对号码。

这是一个示例数据集

在上面的样本数据集中,我想让I3认识到C3,D3和E3都匹配C2,D2和E2,然后在I3中加上1。

那么对于I4,它将分配一个2,因为它不匹配上面的任何条目。 I5一样。 那么I6会在I4中实现这个匹配,并把2。

不知道这是否有道理。 也就是说,每对中不能有2个以上,但是我可以在得到这些数字之后处理。

这个响应通过返回匹配对的实际PT ID号码以及唯一的“配对组”标识符扩展了你的原始要求。
使用原始的标准年龄段(例如70-80,81+),并且不会有多于一次的配对使用。

如果你已经有了一个匹配的数据,那么你将要返回配对的PT ID。 一个简单的INDEX / MATCH函数对可以做到这一点。 如果尚未进行匹配,则IFERROR函数可以将处理传递给使用AGGREGATE¹函数的嵌套INDEX函数 ,而不是MATCH返回相应的行号。

AGGREGATE与SMALL子function一起使用。 这允许COUNTIFS函数通过检查之前所做的匹配³来增加到第二,第三等。

通过扩展的样本数据,I2:K2中的公式是,

'formula for I2 =IFERROR(IFERROR(INDEX(B$1:B1, MATCH(B2, I$1:I1, 0)), INDEX(B:B, AGGREGATE(15, 6, ROW(B$1:INDEX(B:B, MATCH(1E+99, B:B)))/ ((B:B<>B2)*(C:C=C2)*(E:E=E2)*IF(D2>80, D:D>80, (D:D>=70)*(D:D<=80))), COUNTIFS(C$1:C1, C2, E$1:E1, E2, D$1:D1, IF(D2>80, ">80", ">=70"), D$1:D1, IF(D2>80, ">80", "<=80"))+1))), "NO MATCH") 'formula for J2 =IFERROR(INDEX(J$1:J1, MATCH(I2, B$1:B1, 0)), MAX(J$1:J1)+1) 'formula for K2 (volatile and random - see footnote ⁴) =IFERROR(IF(INDEX(K$1:K1, MATCH(J2, J$1:J1, 0))="A", "B", "A"), IF(ISNUMBER(I2), CHAR(RANDBETWEEN(65, 66)), "")) 

根据需要填写。

布莱尔高里


¹AGGREGATEfunction是在Excel 2010中引入的。它在早期版本中不可用。

² 虽然基于聚合的公式是作为常规公式input的(即没有CSE),但AGGREGATE确实应用了循环数组式的处理。 尝试和减less您的全列引用范围更接近代表实际数据的范围。 数组处理以对数forms咀嚼计算周期,所以最好将参考范围缩小到最小。 有关更多信息,请参阅数组公式的示例 。

³ 你原来的叙述是“70-80岁或80岁以上”。 而您的后续评论则指出“80或80+以下” 这些不是一回事。 我已经使用了原来的描述,因为你从来没有编辑过这个问题的澄清。

⑷指定给K2的公式是易失性的,使用RANDBETWEEN函数 。 一旦对结果满意,使用复制,select性粘贴,值将公式恢复为其基础值。 使用RANDBETWEEN保持公式不变意味着值可能随着整个工作簿的任何改变而改变。 只有每个匹配对的初始A / B值是随机的; 这一对中的对手将永远是A或B的对手。

如果您可以将D列更改为年龄组(71-80,81-90等),则以下公式将按照您想要的作为第一步(超过2人组合在一起)。 在I3中粘贴下面的公式,并按下Ctrl + Shift + Enter,因为它是一个数组公式。 将其复制到下面的其他单元格。

 =IFERROR(INDEX(F$1:F2,MATCH(C3&D3&E3,C$1:C2&D$1:D2&E$1:E2,0)),MAX(F$2:F2)+1) 

这将当前行的C,D和E列中的string组合与先前行中的string组合数组相匹配,并分配相同的Pair编号,如果不匹配,则获得下一个新编号。

尝试这个修改后的公式(数组公式),不要在一个组中放入两个以上的条目。 我创build了另一个列G2,它是G2 = C2&D2&E2

 =IF(COUNTIF(G$1:G2,G3)<2,IFERROR(INDEX(F$1:F2,MATCH(C3&D3&E3,C$1:C2&D$1:D2&E$1:E2,0)),MAX(F$2:F2)+1),MAX(F$2:F2)+1) 

首先,你可以创build一个连接你正在比较的3个值的新列(J),你可以用这样的公式来做到这一点:

 =C2&IF(D2>80,"YES","NO")&D3 

你可以用一个公式来填充I2,用一个公式来检查连接值是否在数据集中重复,如下所示:

 =COUNTIFS($J$2:$J$6,J2)>1