У меня есть 2 вкладки листа в рабочей книге Excel, информация о tickets и tickets info . У меня есть значения в столбце A tickets (от A2:A500). Я хочу найти для каждого значения от А2 до А500 ticket ища в столбце А информации о tickets_info . Если есть совпадение, вернуть все ячейки для этой строки (ticket_info содержит информацию для каждого запроса от столбца A до столбца N).

Я использую следующую формулу:

=VLOOKUP(A2,tickets_info!A$2:N$5000,2,FALSE)

записав его в листе ticket колонка С (колонка А содержит номер билета и столбец Б содержит имя пользователя).

Я использовал A2 до N5000, который представляет собой диапазон данных из листа ticket_info , который содержит много столбцов информации, относящейся к каждому билету. Номера билетов указаны в столбце А от А2 до А5000.

Я сталкиваюсь с "недопустимой ошибкой ссылки" при фиксации формулы.

2 ответа2

1

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

1-й ПОДХОД "все значения в одной ячейке":

  • На листе "билеты"

    1. Формула размещения ячейки C2 = IFERROR(1+MATCH($ A2, 'tickets_info'!$ A $ 2:$ A $ 5000,0), 0) ;

    2. Формула для ячейки D2 =IF($C2>0,INDIRECT("'tickets_info'!O"&$C2),"") ;

    3. выберите ячейки C2 и D2 и скопируйте формулу до строки 500.

    4. (необязательно) скрыть столбец C.

  • На листе "tickets_info"

    1. на ячейку O2 поставить формулу =B2 & " " & C2 & " " & ... & N2 ;

    2. скопируйте формулу до строки 5000.

    3. (необязательно) скрыть столбец O.

РЕДАКТИРОВАТЬ: Что делать, если по какой-то причине вы хотите / должны оставить лист "tickets_info" нетронутым?

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

=IF($C2>0,INDIRECT("'tickets_info'!B" & $C2)
  & " " & INDIRECT("'tickets_info'!c" & $C2)
  ...
  & " " & INDIRECT("'tickets_info'!N" & $C2),"")

или (даже дольше)

=IF($C2>0,INDIRECT(ADDRESS($C2,2,,,"tickets_info"))
  & " " & INDIRECT(ADDRESS($C2,3,,,"tickets_info"))
  ...
  & " " & INDIRECT(ADDRESS($C2,14,,,"tickets_info")),"")

затем скопируйте вниз. Таким образом, вам больше не понадобится формула столбца O для "tickets_info" (и, следовательно, нет необходимости изменять ее каким-либо образом).

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

ЗАКЛЮЧИТЕЛЬНОЕ ЗАМЕЧАНИЕ ДЛЯ ЭТОГО РЕДАКТИРОВАНИЯ: окончательная формула будет длинной, но могла бы быть действительно огромной, если бы мы хотели обойтись без формулы промежуточного значения на C2 и использованием уникальной комбинированной формулы C2/D2 для этой ячейки (но это очень неудобно в моем мнение, так что я точно не собираюсь вам показывать как!)

2-Й ПОДХОД "a-single-cell-per-value" - ОБНОВЛЕНО:

Если вы хотите отобразить значения из листа "tickets_info" с B2 по N2 в отдельных столбцах на листе "tickets", то вот вариант:

  1. Формула размещения ячейки C2 = IFERROR(1+MATCH($ A2, 'tickets_info'!$ A $ 2:$ A $ 5000,0), 0) ;

  2. Формула размещения ячейки D2 (по-старому) =IF($C2>0,INDIRECT("'tickets_info'!B"&$C2),"") ;

    (обновленная альтернатива) =IF($C2>0,INDIRECT(ADDRESS($C2,COLUMN()-1,,,"tickets_info")),"") ;

  3. (если делать по-старому) скопируйте / вставьте формулу на D2 в интервал между ячейками E2 и P2, НО обязательно измените ("приращение"), что B между ! и & к необходимым C , D , ..., N в других столбцах, где вы скопировали формулу;

    (при использовании обновленной альтернативы - МОЙ ПРЕДПОЧТИТЕЛЬНЫЙ) Важно понимать, что при использовании COLUMN() в формуле вам не нужно помнить о "пошаговом" изменении !B" больше, когда вы копируете формулу на соседних столбцах - разве это не свобода? ;-) Тогда вы можете просто скопировать / вставить формулу в интервал ячеек D2:P2 без необходимости что-либо менять и, следовательно, (не могу сказать о производительности, но) это наверняка будет лучшим выбором, если вы хотите избежать риска ошибки, которые могут возникнуть, если вы забудете увеличивать ссылки после копирования формул ... или даже если вам просто лень писать / изменять повторяющиеся блоки кода (... как я! ;-D)

  4. выберите интервал ячеек от C2 до P2 и скопируйте формулу до строки 500 (или как угодно).

  5. (необязательно) скрыть столбец C.

Вот и все.

ЗАКЛЮЧИТЕЛЬНОЕ ЗАМЕЧАНИЕ ПО ЭТОМУ ПОДХОДУ (чтобы проанализировать путь вниз): я часто предпочитаю MATCH а не VLOOKUP но в этом случае я пошел с ним сразу, потому что, во-первых, я думал, что вам нужен способ получить все соответствующие значения строки на "tickets_info" с одним поиском; даже промежуточные значения, рассчитанные в столбце C, в основном присутствуют по той же причине. Если вам нужны отдельные значения, вы можете даже избавиться от них, комбинируя формулы столбцов C/D следующим образом:

=IF(ISERROR(1+MATCH($A2,'tickets_info'!$A$2:$A$5000,0)),"",INDIRECT(ADDRESS(1+MATCH($A2,'tickets_info'!$A$2:$A$5000,0),COLUMN()-1,,,"tickets_info")))

и просто скопируйте / вставьте его в интервал ячеек C2:O500.

Наконец, в этом случае, как также предложил fixer1234, VLOOKUP становится возможной альтернативой таким (даже немного более коротким) способом записи:

=IF(ISERROR(VLOOKUP($A2,'tickets_info'!$A$2:$N$5000,COLUMN()-1,FALSE)),"",VLOOKUP($A2,'tickets_info'!$A$2:$N$5000,COLUMN()-1,FALSE))

PS Что делать, если вы столкнулись с проблемами форматирования после того, как скопировали / пропустили формулу?

  • Если вы выбрали второй подход, просто отформатируйте ячейку в нужном вам формате (т.е. дата / время для значений даты и времени); для этого вы можете использовать обычное форматирование ячеек или определить пользовательское форматирование, если хотите, или, проще (и настоятельно рекомендуется!) скопируйте исходный столбец (столбцы) на листе "tickets_info", из которого извлекаются значения, и вставьте / форматируйте только для специальных целей в соответствующий столбец (столбцы) назначения копии листа "тикета".

  • Если вы выбрали первый вариант, вам может потребоваться преобразовать полученное числовое значение в форматированный текст с помощью функции TEXT. В этом случае следует помнить одну вещь: используя функцию TEXT, вы потеряете возможность использовать исходное значение для выполнения таких операций, как, например, вычисления даты или времени, тесты для проверки соответствия даты определенным условиям и т.д.

Поэтому совет будет использовать первый подход, только если / если:

а) вы просто имеете дело с извлечением текстовых значений (чисел или чего-либо, что уже сохранено в текстовых столбцах), так как это не будет иметь никакого значения;

или б) достаточно простой каскадной копии значений, и вы не планируете УВЕРЕННО, что они понадобятся вам по отдельности для выполнения каких-либо операций.

... иначе не думайте об этом и всегда следуйте второму подходу с закрытыми глазами, это точно не повредит.

Теперь, чтобы прийти к заключению, (наконец-то) я добавляю несколько предложений по ссылкам от fixer1234 о последних обсуждаемых вопросах:

Как создать пользовательское форматирование номера (с полным набором кодов).

Объяснение использования функции TEXT для преобразования предоставленного числового значения в текст.

0

У меня была та же проблема, и я использовал следующее:

  • В Tickets выберите С2 по О2
  • Не нажимая никуда, начните вводить:

    = VLOOKUP(A2, tickets_info!$ A $ 2:$ N $ 5000, {2,3,4,5,6,7,8,9,10,11,12,13,14,15}, ЛОЖЬ)

  • Нажмите Ctrl+Shift+Enter одновременно
  • Автозаполнение вниз

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .