Найдите последнюю версию и верните гиперссылку, используя столбец для поиска

надеюсь, кто-то из вас сможет мне помочь.

Я создаю электронную таблицу Excel, которая импортирует файл данных и сравнивает данные с несколькими другими источниками, включая имена файлов, в очень большой папке. Цель на данный момент — взять номер детали (текст), найти этот номер детали в запросе папки, объединить путь к папке с именем файла и создать гиперссылку.

Я почти закончил работу с таблицей, но не могу разобраться с функцией гиперссылки. Проблема в том, что у нас есть процесс редактирования, поэтому первая версия — это «Rev01 (a)(b), PartNumber», а затем «Rev02 (a)(b), PartNumber». Большинство функций поиска/индекса, которые я видел, используют MAX(), который работает только со значениями, а не с текстом. А остальные вообще не работают.

Номер детали для поиска Имя файла Путь Номер детали1 Версия 01 (a) (b), номер детали 1 С:\ Номер детали2 Версия 02 (a) (b), номер детали 1 С:\ Версия 01 (a) (b), Номер детали 2 С:\

(Для меня важно то, что я использую только формулы распределения, поэтому я могу повторно использовать лист, не беспокоясь о перетаскивании формул вниз)

Еще через несколько часов поиска и опробования новых формул я обнаружил, что если вы используете =IF(ISNUMBER(SEARCH(A2,B2:B4)),B2:B4,""), вы получите все имена файлов с первым номером детали.

Результат1 Версия 01 (a) (b), номер детали 1 Версия 02 (a) (b), номер детали 1

Итак, используя 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))
заголовок 1 C:\Rev02 (a)(b), Номер детали1 C:\Rev01 (a)(b), Номер детали2

Теперь мой вопрос: HYPERLINK() создается гиперссылка только на первую ячейку, есть ли способ создать гиперссылку на все ячейки? Кроме того, есть ли более простой способ сделать это? Это кажется немного сложным, но я ничего не нашел в Интернете.

HYPERLINK() не работайте с массивами разгрузки, он всегда будет перенаправляться на первый компонент/ячейку/строку в массиве. Пожалуйста, проведите небольшое исследование по этой теме, я уверен, что есть два-три таких поста, где это обсуждалось. Вам нужно использовать метод копирования. Dynamic Array Formulas ака DAF не работает с HYPERLINK() --> Прочитайте комментарии в следующем посте ответьте и еще один прочитайте комментарии
Mayukh Bhattacharya 06.08.2024 17:05

Очень хорошая попытка! Какую версию Excel вы используете (и будете)? Предпочтительно получить информацию из раздела «О программе».

nkalvi 06.08.2024 17:14

Нкалви, я использую Microsoft Excel 365 MSO.

Coulter Williams 06.08.2024 17:17

Если проблема заключается в том, что вам не нужно перетаскивать формулы вниз, попробуйте настроить диапазон данных в виде таблицы Excel. Однако имейте в виду, что формулы развернутого массива не работают в таблицах. Вы можете добавить данные непосредственно под таблицей (следующая строка), и формулы заполнятся автоматически.

bugdrown 06.08.2024 17:57

Спасибо вам всем. Я подтвердил, что функция ГИПЕРССЫЛКА работает только для формул разгрузки или динамических массивов (DAF) в веб-версии, а не в версии для ПК. Цените помощь!

Coulter Williams 06.08.2024 22:08

Как я уже говорил, функция HYPERLINK() на данный момент не работает с DAF Spill Arrays, на данный момент она работает в Excel For Web, но рано или поздно эта функция не появится. Кроме того, если у вас есть локальные файлы, которые пытаются открыть из Интернета, они не откроются, вам нужно будет открыть их на рабочем столе, и опять же, в массиве ссылка всегда будет направлять первый элемент в массиве, поэтому примите ответ, который не работает. поверх рабочего стола, хотя и для Excel для Интернета (временно), не меняет универсальную функцию, для которой еще нет документации или обновлений. Это только передает сообществу неверную информацию.

Mayukh Bhattacharya 06.08.2024 23:36
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
6
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Разливаю за 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) вниз. Тем не менее, он отлично работает онлайн. При открытии веб-версии документа проблем нет, поэтому я отправлю заявку вместе с другими, чтобы они исправили ошибку.

Coulter Williams 06.08.2024 22:06

Всегда пожалуйста, и спасибо за вопрос :) Я использую «инсайдерскую бета-версию» для Windows, и HYPERLINKspilled из MAP работает, как и ожидалось, то есть для локальных файлов. Надеюсь, скоро он появится на обычном канале.

nkalvi 06.08.2024 22:37

@CoulterWilliams, после экспериментов мне интересно узнать об этом обходном пути: предварительно заполнить столбец для ссылок с относительной ссылкой на то, где ссылка будет заполнена формулой разлива. Например, ячейка I2:i100 заполнилась =HYPERLINK(H2). Введите формулу разлива в H2. Теперь ссылки работают как положено. Я думаю, это лучше, чем заполнять исходную формулу.

nkalvi 06.08.2024 23:02

Другие вопросы по теме