Как использовать строку из одной ячейки в качестве массива в функции без VBA - PullRequest
0 голосов
/ 16 января 2019

Как мне преобразовать строку из ячейки в текстовый массив внутри функции, которая должна использовать массив, без использования VBA и без добавления массива в любую другую часть документа?Это будет один из этих массивов на более чем 1000 строк.Формат строки: ^ [a-zA-Z0-9., -] * $ с разделителем "," в качестве разделителя.

Это та функция, которую я хотел бы достичь

У меня естьТаблица Excel со следующими столбцами
A: Идентификационные номера для сравнения, разделенные запятой (разделитель может быть изменен при необходимости).Около 100 идентификаторов было бы хорошо поддерживать как минимум.
B: ID (каждое значение в строках столбца уникально, но не отсортировано и не может быть отсортировано, поскольку сортировка необходима на основе других критериев)
C: Значение (несколько строк в столбце могут иметь одно и то же значение)
D: вывести один идентификатор из разделенных запятыми идентификаторов, который имеет наибольшее значение в своей строке

Проблемная частьoutput
До сих пор я создал функцию, которая находит правильный идентификатор в столбце B на основе значений в столбце C, но только если я ввожу строку из столбца A в качестве константы массива вручную внутри функции.Мне не удалось получить функцию для создания самого массива из столбца А., что необходимо.

Рабочая часть кода

В этом коде я ввел значения из столбца А вручнуюи это работает как надо.

=INDEX({"1.01-1","1.01-3","1.08-1","1.01-1-1A"},MATCH(MAX(INDEX(C$10:C$20,N(IF(1,MATCH({"1.01-1","1.01-3","1.08-1","1.01-1-1A"},B$10:B$20,0))))),INDEX(C$10:C$20,N(IF(1,MATCH({"1.01-1","1.01-3","1.08-1","1.01-1-1A"},B$10:B$20,0)))),0))

Обратите внимание, что начальная строка не является первой строкой, и массив используется в функции 3 раза.

Код, который пытается преобразовать строку в текстовый массив

Не работает, но если обернут в SUMPRODUCT (), он предоставляет массив для функции SUMPRODUCT (), конечно, не пригодный для использования, так как тогда яне может передать массив.Фон для этого кода можно найти в вопросе Разделить строку (ячейку) в Excel без VBA (например, для формулы массива) !.

=TRIM(MID(SUBSTITUTE(A10,",",REPT(" ",99)),(ROW(OFFSET($A$1,,,LEN(A10)-LEN(SUBSTITUTE(A10,",",""))+1))-1)*99+((ROW(OFFSET($A$1,,,LEN(A10)-LEN(SUBSTITUTE(A10,",",""))+1)))=1),99))

Второй код выводит первый элементмассива и вставленный в первый код не изменяют этот результат, как это было при переносе второго кода в SUMPRODUCT ().

Вот изображение моей упрощенной настройки теста в Excel для этого случая, идентичноечто описано выше.

Упрощенная настройка теста

1 Ответ

0 голосов
/ 16 января 2019

Я не совсем уверен, что вы делаете со своей формулой. Но для преобразования содержимого ячейки в текстовый массив, разделенный запятыми, который будет использоваться в качестве аргумента массива для функций INDEX или MATCH, вы можете использовать функцию FILTERXML. Вам нужно будет узнать о XML и XPATH, чтобы понять, что происходит, но для этого есть множество веб-ресурсов.

Например, с

A10:  "1.01-1","1.01-3","1.08-1","1.01-1-1A"

Приведенная ниже формула вернет 1.08-1. Обратите внимание на 3 для аргумента строки функции INDEX.

=INDEX(FILTERXML("<t><s>" & SUBSTITUTE(SUBSTITUTE(A10,"""",""), ",", "</s><s>") & "</s></t>", "//s"),3)
...