多个IF语句,用于确定匹配并赋值

时间:2016-06-03 01:44:18

标签: excel if-statement

我正在开展一项小型研究,基本上需要将合适的人配对并为他们分配一对编号,因此每个人都可以分配到A组或B组。 他们基本上需要来自同一个医疗诊所,性别相同,年龄低于80岁或80岁以上。

我不确定这是否可以使用excel,但基本上我有一张表单,其中包含您输入新参与者信息的表单。我需要一个公式,基本上检查这三个条件与以前的条目,找到所有3匹配的人,然后分配相同的对号。如果找不到合适的匹配,则需要分配一个新的对号。

Here is a sample data set

在上面的示例数据集中,我希望I3意识到C3,D3和E3都匹配C2,D2和E2,然后在I3中放入1。

然后对于I4,它会指定一个2,因为它与上面的任何条目都不匹配。同样适用于I5。然后I6会在I4中实现匹配并输入2。

不确定这是否有意义。每对#中也不能超过2个,但是在我能够生成数字之后我可以处理它。

3 个答案:

答案 0 :(得分:2)

如果您可以将D列更改为年龄组(71-80,81-90等),则以下公式将作为第一步(超过2人组合在一起)执行您想要的操作。在I3中粘贴以下公式并按cntrl + 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列中的字符串组合与前一行中字符串组合的数组相匹配,并指定相同的Pair编号,如果没有匹配则获取下一个新编号。

尝试使用此修改后的公式(数组公式),不要在组中放置两个以上的条目。我创建了另一列G,即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)

答案 1 :(得分:1)

  

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

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

AGGREGATE与其SMALL子功能一起使用。这允许COUNTIFS function通过检查先前制作的匹配来增加到第二,第三等配对。

使用扩展的样本数据,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)), ""))

根据需要填写。

Blairgowrie

¹ Excel 2010引入了AGGREGATE function。早期版本不提供。

²当基于AGGREGATE的公式作为常规公式输入时(即没有CSE),AGGREGATE确实应用循环阵列式处理。尝试并减少对更接近表示实际数据范围的范围的全列引用。数组处理以对数方式咀嚼计算周期,因此将参考范围缩小到最小值是一种好习惯。有关详细信息,请参阅Guidelines and examples of array formulas

³您的原始叙述声明'...介于70到80岁之间或80岁以上。'而您随后的评论声明'80以下或80以上' 。这些都不是一回事。我使用过原来的原始描述,因为你从未编辑过问题以便澄清。

发往K2的公式是不稳定的,并使用RANDBETWEEN function。对结果感到满意后,使用复制,选择性粘贴,值将公式恢复为其基础值。使用RANDBETWEEN保留公式完整意味着值可能随着整个工作簿中的任何更改而改变。只有每个匹配对的初始A / B值是随机的;该对中的匹配将始终为A或B对应。

答案 2 :(得分:0)

首先,您可以创建一个新列(J)来连接您正在比较的3个值,您可以使用这样的公式执行此操作:

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

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

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