
У меня есть таблица, из которой мне нужно извлечь некоторые данные, и я не совсем понимаю, как это сделать.
Вот пример таблицы.
| 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 в вспомогательный столбец. Я предполагаю, что вы используете Column G
; т.е. cell 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
, если хотите.
Column G
— это индекс (на новом листе) строки, Sheet1
из которой мы (в первую очередь) извлекаем данные. Он на единицу больше индекса из предыдущей строки, если только он не указывает на строку, чей CODE равен GRADE
, в этом случае мы предполагаем, что это EFFORT
строка, и добавляем два к предыдущей (т. е. пропускаем строку EFFORT
). Column A
— D
и F
просто копируются из того же столбца на Sheet1
, как индексируется Column G
. Формула в Column E
(EFFORT) проверяет, является ли текущий студент одним из двух с двумя строками (то есть $G2+1
ссылается на того же студента с CODE EFFORT
), и, если это так, извлекает оценку EFFORT из Column 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+ Shift+ Enter, чтобы вставить формулу массива.
Объяснение
Sheet1!$D$2:$D$10
ваш Effort
столбец в исходной таблице на Листе1.
(Sheet2!$C2 = Sheet1!$C$2:$C$10)
ищет соответствиеFULLNAME
(Sheet1!$F$2:$F$10 = "EFFORT")
ищет соответствие CODE
, которое является "УСИЛИЕ"
Оба возвращают логическое значение 0
и 1
. Если оба условия совпадают (найдена строка с совпадающими FULLNAME и CODE), то функция возвращает 1 ( 1 * 1
) MATCH
.