如何使用结构化引用来标识列并将标识列中的行值用作条件?

时间:2016-06-10 23:46:36

标签: excel excel-2013 excel-indirect

我有一个名为'student_courses'的Excel 2013表,其中包含列:stu_id,stu_major,stu_course和名为validated_crs的计算列。

我正在尝试为名为validated_crs的计算列创建一个公式,用于计算每条记录。

在这个计算列中,我需要引用stu_major列中的值来查找第二个表中的列'qualified_courses'。 'qualified_courses'表中的标题与stu_major值相关联。

我需要检查'qualified_courses'中相关列中的任何值是否与'student_courses'表中正在评估的记录中的'stu_course'值匹配。

如果相关列中的任何值与第一个表中任何给定记录的stu_course值匹配,则它应在计算列中返回“validated”值。

到目前为止,我已经找到了如何使用=INDIRECT("qualified_courses"&"["&[@[stu_major]]&"]")返回第二个表列值,但我不知道如何使用返回的值集来检查stu_course值以查看是否存在一场比赛。

非常感谢,

林赛

student_courses表:

stu_id     stu_major     stu_course     validated_crs
5432       MULTE         BIOL1102       validated
5432       MULTE         MUSC1303       NULL
5432       MULTE         ENGL2303       validated
6737       MULTM         HIST1104       validated
6737       MULTM         BIOL1222       NULL
6737       MULTM         EDUC2303       validated
6737       MULTM         EDUC1302       validated

qualified_courses表:

MULTA      MULTB         MULTE          MULTM
ART1301    HIST1301      BIOL1102       HIST1104
BIOL1322   POLS2210      ENGL2303       EDUC2303
ENGL1440   IS3340        ART3303        EDUC1302
           BIOL2302      BIOL1222       MUSC1303

1 个答案:

答案 0 :(得分:2)

此公式以您的公式为基础:

=IF(ISNUMBER(MATCH([@[stu_course]],INDIRECT("qualified_courses"&"["&[@[stu_major]]&"]"),0)),"Validated","")

我们使用MATCH函数在返回的列中搜索课程。如果有,则返回一个数字,否则为错误。

ISNUMBER返回TRUE / FALSE,IF用它来确定哪个结果。

但我不喜欢INDIRECT()公式,因为它是VOLATILE公式。我更喜欢INDEX公式:

=IF(ISNUMBER(MATCH([@[stu_course]],INDEX(qualified_courses,0,MATCH([@[stu_major]],qualified_courses[#Headers],0)),0)),"Validated","")

将返回相同的内容。

我们使用INDEX / MATCH代替INDIRECT找到正确的列。 MATCH再次返回一个数字,这次是第二个表中的列。

INDEX()使用此nubmer返回该位置的完整列。第二个标准的0表示我们需要完整的列。

然后就像第一个一样。

VOLATILE公式是每次Excel重新计算它所绑定的数据是否发生更改时重新计算的公式。

非易失性公式只会在他们引用的数据发生变化时重新计算。

图片中的validated_cs列是顶部公式,下一列是底部:

enter image description here