Как импортировать массив всех непустых ячеек листа (для умножения матриц)? - PullRequest
1 голос
/ 27 мая 2020

У меня есть таблица для расчета данных о питании для каждого приема пищи. Один лист («ингредиенты») содержит матрицу данных о питании для каждого ингредиента. Другой лист («рецепты») содержит матрицу порций каждого ингредиента для каждого приема пищи. В моем листе «Данные о питании еды» я хочу умножить эти матрицы, чтобы получить данные о питании для каждого рецепта.

Я могу сделать это для определенного количества ингредиентов и рецептов, которые у меня есть сейчас: =mmult(ingredients!B5:AF39,recipes!B2:G32), но если я добавлю рецепты или ингредиенты, я хочу, чтобы они обновлялись автоматически, поэтому мне не нужна эта формула быть жестко запрограммированным. Поскольку для умножения матрицам необходимо значение во всех ячейках, и поскольку должно выполняться ограничение NxP * PxM (количество строк x количество столбцов), мне нужно импортировать массив всех непустых ячеек каждого листа в формулу MMULT() .

Моя текущая попытка =mmult(query(ingredients!B5:FN39,"select * where Col1 is not null",0),query(recipes!B2:G32,"select * where Col1 is not null",0)) не работает. Выдает ошибку: «Невозможно проанализировать строку запроса для параметра функции QUERY 2: NO_COLUMN: Col1».

Я не могу понять, чем следует заменить слово «Col1», или моя формула эффективна способ достижения этих результатов.

Я также пробовал функцию filter(), но она не может работать с массивом.

Не обращайте внимания на странную коллекцию рецептов ... Я студент колледжа с ограниченными кулинарными навыками :).

1 Ответ

1 голос
/ 28 мая 2020

попробуйте:

=ARRAYFORMULA(MMULT(
 INDIRECT("ingredients!B5:"&ADDRESS(COUNTA(ingredients!A5:A)+4, 
 MAX(IF(ingredients!1:1="",,COLUMN(ingredients!1:1))))), 
 INDIRECT("recipes!B2:"&ADDRESS(COUNTA(recipes!A2:A)+1, 
 MAX(IF(recipes!1:1="",,COLUMN(recipes!1:1)))))))

0

...