Формула Excel Vlookup для ссылки на сводную таблицу - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть сводная таблица базы данных по питанию на одном листе и планировщик еды на другом. Когда я ввожу еду, я хочу сослаться на другие ячейки, чтобы найти их значения в сводной таблице. Я могу сделать это, но моя проблема в том, что, если я добавлю больше столбцов в таблицу, все будет не синхронизировано.

=IFERROR(VLOOKUP($C7,NutritionDatabase,6,FALSE),0)

Если я введу еду в C7, в настоящее время я использую эту формулу выше, чтобы найти ккал на 100 г в 6-м столбце моей сводной таблицы NutritionDatabase.

Можно ли найти заголовок столбца и ссылаться на данные из той же строки, что и еда в C7. NutritionDatabase [[# This Row], [Kcalsp100]]

Что-то вроде этого ниже, но кроме этого не работает?

=VLOOKUP($C7,NutritionDatabase[[#This Row],[Kcalsp100]],FALSE)

Не могли бы вы поделиться опытом и советами?

Это было бы очень полезно, потому что в будущем я хочу расширить NutritionDatabase, добавив больше данных и столбцов, если я буду ссылаться на номер столбца, тогда мне придется все изменить, когда я это сделаю.

enter image description here

enter image description here

Спасибо!

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Я бы порекомендовал использовать INDEX-MATCH-MATCH. Это намного, намного быстрее, чем VLOOKUP (возможно, это не так важно для вашего случая использования, но для больших объемов данных, это обязательно), и он более адаптируем.

Используется в форме:

=INDEX(<LookUpRange>, MATCH(<RowValToFind>,<RowRange>,0), MATCH(<ColValToFind>,<ColRange>,0))

Итак, в ячейке F7 вашей таблицы плана питания вы можете использовать:

 =INDEX(NutritionDatabase!$F$3:$I$6, MATCH($C7,NutritionDatabase!$A$3:$A$6,0), MATCH(F$6,NutritionDatabase!$F$2:$I$2,0))

Я знаю, что это выглядит сложно с самого начала, но если разбить его, это не так уж плохо, намного быстрее и более универсально, чем VLOOKUP.

В основном, это говорит:

=INDEX(<get the value from in this table where...>, MATCH(<this value appears in...>, <this list of row headers and...>,0), MATCH(<this value appears in...>, <this list of column headers>, 0))

Не то, чтобы 0 в совпадении указывали на то, что оно должно быть точным.

Вот изображение другого, простого примера:

enter image description here

0 голосов
/ 04 сентября 2018

Вы можете попробовать использовать функцию MATCH для вас col_index_num в вашем VLOOKUP:

=MATCH (lookup_value, lookup_array, [match_type])

Дополнительная информация: https://exceljet.net/excel-functions/excel-match-function

Функция MATCH:

MATCH("Kcalsp100",NutritionDatabase!$A1:$A15,1)

Что это будет делать, это снова сопоставить значение поиска с первой строкой, заголовками столбцов и вернуть индекс (номер столбца) для столбца с соответствующим именем.

Функция LOOKUP:

=VLOOKUP($C7,NutritionDatabase!$A1:$E15,MATCH("Kcalsp100",NutritionDatabase!$A1:$A15,1),FALSE)

РЕДАКТИРОВАТЬ:

Глядя на новые изображения, попробуйте что-нибудь в одиночку

=VLOOKUP($C7, NutritionDatabase!$A2:$I6,MATCH($F6, NutritionDatabase!$A2:$I2,1),FALSE)

Возможно, вам придется изменить два NutritionDatabase диапазона в соответствии с вашим сценарием.

...