надеюсь, кто-то из вас сможет мне помочь.
Я создаю электронную таблицу Excel, которая импортирует файл данных и сравнивает данные с несколькими другими источниками, включая имена файлов, в очень большой папке. Цель на данный момент — взять номер детали (текст), найти этот номер детали в запросе папки, объединить путь к папке с именем файла и создать гиперссылку.
Я почти закончил работу с таблицей, но не могу разобраться с функцией гиперссылки. Проблема в том, что у нас есть процесс редактирования, поэтому первая версия — это «Rev01 (a)(b), PartNumber», а затем «Rev02 (a)(b), PartNumber». Большинство функций поиска/индекса, которые я видел, используют MAX()
, который работает только со значениями, а не с текстом. А остальные вообще не работают.
(Для меня важно то, что я использую только формулы распределения, поэтому я могу повторно использовать лист, не беспокоясь о перетаскивании формул вниз)
Еще через несколько часов поиска и опробования новых формул я обнаружил, что если вы используете =IF(ISNUMBER(SEARCH(A2,B2:B4)),B2:B4,"")
, вы получите все имена файлов с первым номером детали.
Итак, используя BYROW
и LAMBDA
, я построил вот это чудовище:
=HYPERLINK(BYROW(A2:A3,LAMBDA(row,LET(partnum,IF(ISNUMBER(SEARCH(row,B2:B4)),C2:C4&B2:B4,""),filtered,FILTER(partnum,partnum<>""),INDEX(filtered,COUNTA(filtered))))))
Ключевая идея для меня заключалась в том, чтобы использовать Result1 в качестве массива и INDEX
нового массива, чтобы получить последнее значение в массиве (в данном случае его необходимо отсортировать по возрастанию, что легко сделать с помощью LET
):
INDEX(filtered,COUNTA(filtered))
Теперь мой вопрос: HYPERLINK()
создается гиперссылка только на первую ячейку, есть ли способ создать гиперссылку на все ячейки? Кроме того, есть ли более простой способ сделать это? Это кажется немного сложным, но я ничего не нашел в Интернете.
Очень хорошая попытка! Какую версию Excel вы используете (и будете)? Предпочтительно получить информацию из раздела «О программе».
Нкалви, я использую Microsoft Excel 365 MSO.
Если проблема заключается в том, что вам не нужно перетаскивать формулы вниз, попробуйте настроить диапазон данных в виде таблицы Excel. Однако имейте в виду, что формулы развернутого массива не работают в таблицах. Вы можете добавить данные непосредственно под таблицей (следующая строка), и формулы заполнятся автоматически.
Спасибо вам всем. Я подтвердил, что функция ГИПЕРССЫЛКА работает только для формул разгрузки или динамических массивов (DAF) в веб-версии, а не в версии для ПК. Цените помощь!
Как я уже говорил, функция HYPERLINK()
на данный момент не работает с DAF
Spill Arrays, на данный момент она работает в Excel For Web, но рано или поздно эта функция не появится. Кроме того, если у вас есть локальные файлы, которые пытаются открыть из Интернета, они не откроются, вам нужно будет открыть их на рабочем столе, и опять же, в массиве ссылка всегда будет направлять первый элемент в массиве, поэтому примите ответ, который не работает. поверх рабочего стола, хотя и для Excel для Интернета (временно), не меняет универсальную функцию, для которой еще нет документации или обновлений. Это только передает сообществу неверную информацию.
Разливаю за HYPERLINK
Возможный обходной путь использования HYPERLINK
с распределенными массивами:
предварительно заполните диапазон ссылок, учитывая самый большой набор результатов, при этом первая ячейка указывает на ячейку с формулой разлива.
Как в примере ниже:
D2
введите HYPERLINK(E2)
, заполнитеE2
введите формулу разлива, результат будет в видеCONCAT("[", INDEX(filtered, COUNTA(filtered)), "]")
вместо HYPERLINK(CONCAT…
Таким образом, нам не придется заполнять то, что уже пролилось :)
Если вы еще этого не сделали, не могли бы вы попробовать это:
=BYROW(A2:A3, LAMBDA(row,
LET(partnum, IF(ISNUMBER(SEARCH(row, B2:B4)), C2:C4 & B2:B4, ""),
filtered, FILTER(partnum, partnum <> ""),
HYPERLINK(CONCAT("[", INDEX(filtered, COUNTA(filtered)), "]")))))
[]
необходимо, если в пути есть пробелы.Пожалуйста, протестируйте и дайте знать.
Начало новой строки текста внутри ячейки в Excel - Служба поддержки Microsoft
Необязательно — извлеките номера ревизий, чтобы найти максимум
Поскольку вам, кажется, нравятся LAMBDA
, определение вспомогательной функции first_number
в диспетчере имен для извлечения номера версии может оказаться полезным. Это быстрособранная функция, более короткие вы можете найти где-нибудь еще. Я предпочитаю использовать REGEX
, но он может быть пока недоступен в вашей версии Excel.
first_number
определено в диспетчере имен:
=LAMBDA(text,
LET(
len_, LEN(text),
num_start, MIN(MAP(SEQUENCE(len_), LAMBDA(i, IF(ISNUMBER(--MID(text, i, 1)), i, len_ + 1)))),
num_end, MIN(
MAP(
SEQUENCE(len_ - num_start + 1, , num_start),
LAMBDA(i, IF(ISNUMBER(--MID(text, i, 1)), len_ + 1, i))
)
),
--MID(text, num_start, num_end - num_start)
)
)
Part Number
можно использовать TEXTSPLIT
для извлечения Part Number
и Revision
.=LET(
file_names, TOCOL(B2:B10, 1),
paths, TOCOL(C2:C10, 1),
revisions, TOCOL(TRIM(BYROW(file_names, LAMBDA(row, TEXTBEFORE(row, ",")))), 2),
part_nums, TOCOL(TRIM(BYROW(file_names, LAMBDA(row, TEXTAFTER(row, ",")))), 2),
rev_numbers, MAP(revisions, first_number),
make_hyperlink, LAMBDA(path_and_file, HYPERLINK(CONCAT("[", path_and_file, "]"))),
make_links, MAP(
UNIQUE(part_nums),
LAMBDA(part_num,
LET(
max_rev_num, MAX(FILTER(rev_numbers, part_nums = part_num)),
path_and_file_for_latest, FILTER(
HSTACK(paths, file_names),
(part_nums = part_num) * (rev_numbers = max_rev_num)
),
make_hyperlink(path_and_file_for_latest)
)
)
),
make_links
)
Спасибо за предложение по кронштейну! Это было очень полезно и решило мою проблему со ссылкой. Однако, как отмечают другие пользователи, HYPERLINK() не работает для функций разгрузки на рабочем столе. Вам нужно перетащить формулу (или VBA) вниз. Тем не менее, он отлично работает онлайн. При открытии веб-версии документа проблем нет, поэтому я отправлю заявку вместе с другими, чтобы они исправили ошибку.
Всегда пожалуйста, и спасибо за вопрос :) Я использую «инсайдерскую бета-версию» для Windows, и HYPERLINK
spilled
из MAP
работает, как и ожидалось, то есть для локальных файлов. Надеюсь, скоро он появится на обычном канале.
@CoulterWilliams, после экспериментов мне интересно узнать об этом обходном пути: предварительно заполнить столбец для ссылок с относительной ссылкой на то, где ссылка будет заполнена формулой разлива. Например, ячейка I2:i100
заполнилась =HYPERLINK(H2)
. Введите формулу разлива в H2
. Теперь ссылки работают как положено. Я думаю, это лучше, чем заполнять исходную формулу.
HYPERLINK()
не работайте с массивами разгрузки, он всегда будет перенаправляться на первый компонент/ячейку/строку в массиве. Пожалуйста, проведите небольшое исследование по этой теме, я уверен, что есть два-три таких поста, где это обсуждалось. Вам нужно использовать метод копирования.Dynamic Array Formulas
акаDAF
не работает сHYPERLINK()
--> Прочитайте комментарии в следующем посте ответьте и еще один прочитайте комментарии