我有一张表,需要提取一些数据,但我不太确定如何做到这一点。
以下是该表的一个示例。
| A + B + C + D + E + F |
|--------+--------+---------------+-------+--------+--------|
| FNAME | LNAME | FULLNAME | GRADE | EFFORT | CODE |
|--------+--------+---------------+-------+--------+--------|
| FNAME1 | LNAME1 | FNAME1 LNAME1 | A | | GRADE |
|--------+--------+---------------+-------+--------+--------|
| FNAME1 | LNAME1 | FNAME1 LNAME1 | H | | EFFORT |
|--------+--------+---------------+-------+--------+--------|
| FNAME2 | LNAME2 | FNAME2 LNAME2 | C | | GRADE |
|--------+--------+---------------+-------+--------+--------|
我需要将努力等级移至努力列,但在不同的行中。示例如下。
| A + B + C + D + E + F |
|-------+-------+-----------+-------+--------+--------|
| FNAME | LNAME | FULLNAME | GRADE | EFFORT | CODE |
|-------+-------+-----------+-------+--------+--------|
| NAME1 | NAME1 | NAMENAME1 | A | | GRADE | ← To column E here ←
|-------+-------+-----------+-------+--------+--------| ↑
| NAME1 | NAME1 | NAMENAME1 | H | | EFFORT | → Move this Grade from column D ↑
|-------+-------+-----------+-------+--------+--------|
这就是我想要的一个例子......
| A + B + C + D + E + F |
|--------+--------+---------------+-------+--------+--------|
| FNAME | LNAME | FULLNAME | GRADE | EFFORT | CODE |
|--------+--------+---------------+-------+--------+--------|
| FNAME1 | LNAME1 | FNAME1 LNAME1 | A | H | GRADE |
|--------+--------+---------------+-------+--------+--------|
| FNAME2 | LNAME2 | FNAME2 LNAME2 | C | | GRADE |
|--------+--------+---------------+-------+--------+--------|
问题是,并非所有学生都有努力成绩,如果没有,就不会有一行。此外,有时会有一行额外的评论等...因此数据不是恒定的。
答案1
在新工作表中,复制标题 ( A1:F1
) 并在辅助列中输入 1。我假设您使用的是列 G
;即单元格 G1
。输入
=IF(INDEX(Sheet1!A:A, $G2)<>"", INDEX(Sheet1!A:A, $G2), "")
进入 A2
,并向右拖动/填充至 F2
。然后更改 E2
为
=IF(INDEX(Sheet1!F:F, $G2+1)="EFFORT", INDEX(Sheet1!D:D, $G2+1), "")
并输入
=IF(INDEX(Sheet1!F:F, $G1+1)="GRADE", $G1+1, $G1+2)
到 G2
。选择A2:G2
并向下拖动/填充至所需的距离。
G
然后,如果需要,隐藏列 。
列 是(在新工作表上) 我们(主要)从中提取数据的G
行的索引。它比上一行的索引多一个,除非它指向 CODE 为 的行,在这种情况下我们假设它是一行并在前一行上加两行(即跳过该行)。列 -和 只是从 上的同一列复制而来,如 Column 所索引 。Column (EFFORT) 中的公式 查看当前学生是否是具有两行的学生(因此指的是同一个学生,CODE 为),如果是,则从第二行的 Column 中提取 EFFORT 成绩 。Sheet1
GRADE
EFFORT
EFFORT
A
D
F
Sheet1
G
E
$G2+1
EFFORT
D
对于这些数据:
+ A + B + C + D + E + F +
+-------+--------+--------------+-------+--------+--------+
| FNAME | LNAME | FULLNAME | GRADE | EFFORT | CODE |
+-------+--------+--------------+-------+--------+--------+
| John | Smith | John Smith | A | | GRADE |
| John | Smith | John Smith | H | | EFFORT |
| Mary | Jones | Mary Jones | B | | GRADE |
| Isaac | Newton | Isaac Newton | A+ | | GRADE |
| Isaac | Newton | Isaac Newton | C | | EFFORT |
+-------+--------+--------------+-------+--------+--------+
我得到了这个结果:
答案2
不用枢轴你就能处理这个问题。
根据您的示例,将其放在您的Effort
列上Sheet2
:
=INDEX(Sheet1!$D$2:$D$10, MATCH(1, (Sheet2!$C2 = Sheet1!$C$2:$C$10) * (Sheet1!$F$2:$F$10 = "EFFORT"), 0))
然后按++Ctrl插入数组公式。ShiftEnter
解释
Sheet1!$D$2:$D$10
是Effort
Sheet1 上源表中的列。
(Sheet2!$C2 = Sheet1!$C$2:$C$10)
正在查找匹配FULLNAME
(Sheet1!$F$2:$F$10 = "EFFORT")
正在查找匹配项CODE
“EFFORT”
两者都返回布尔值,0
和1
。如果两个条件都匹配(找到具有匹配 FULLNAME 和 CODE 的行),则它1 * 1
向函数返回 1()MATCH
。