Получение значений из объединенных столбцов Excel

Я делаю hlookup для значения, которое охватывает несколько столбцов. Мои данные примерно такие:

      A      B      C      D 
  ---------------------------  
1|       Col1          Col2
2|     x      y      z      w
3|
4|

В строках 3 и 4 (A3, B3, C3, D3 и т. д.) я хотел бы поместить формулы, которые будут выполнять поиск где-то еще в книге. Хитрость в том, что я бы хотел, чтобы он искал «Col1» для столбцов A и B и «Col2» для столбцов C и D. «Col1» находится в A1, но на самом деле A1 и B1 объединены. Когда я ссылаюсь на A1, появляется «Col1», но когда я ссылаюсь на B1, возвращаемое значение пусто.

Любые идеи?


person cLFlaVA    schedule 15.01.2009    source источник
comment
Всегда ли смещение равно -1, если ячейка пуста?   -  person Fionnuala    schedule 15.01.2009
comment
В реальной электронной таблице есть 5 ячеек, объединенных вместе. Мне понадобятся эти пять столбцов для ссылки на объединенную ячейку. Есть смысл?   -  person cLFlaVA    schedule 15.01.2009


Ответы (7)


Чтобы получить доступ к меткам «Col1» и «Col2», вы можете использовать следующее:

=ИНДЕКС($1:$1,1,СТОЛБЦ()-MOD(СТОЛБЦ()-1,2))

Примечание. Это предполагает, что вы группируете одинаковое количество ячеек. Если бы это были три ячейки, вы бы просто изменили последнее число в формуле на 3 и так далее.

Изменить. Вот как это работает:

INDEX($1:$1,1, x) возвращает значение ячейки в строке 1, столбце x. Если ваша таблица на самом деле не находится в верхнем левом углу рабочего листа, вы можете изменить это на фактический диапазон, который включает все ваши объединенные метки. В этом случае это будет: ИНДЕКС($A$1:$D$1,1, x)

COLUMN() возвращает номер столбца текущей ячейки (1 в столбце A, 2 в столбце B и т. д.)

MOD(COLUMN()-1,x) возвращает смещение от текущего столбца до столбца, содержащего соответствующую метку.

person e.James    schedule 15.01.2009
comment
Спасибо :) Мне нравится твой синтаксический сахар - person e.James; 15.01.2009
comment
Если это предположение не выполняется, решение Джеймса Хоула лучше, поскольку оно является полностью общим. - person AticusFinch; 15.05.2012
comment
Эта функция очень удобна, но по какой-то причине я обнаружил, что иногда она не работает, а иногда может перейти в состояние, в котором она раньше работала, но затем останавливается. (Не очень полезно, но надеюсь, что кто-то еще сталкивался с подобными аномалиями?) - person tbone; 01.08.2013

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

  1. Откройте новый Excel, объедините B1, C1, D1
  2. Введите Col1 в объединенную ячейку.
  3. В B2 введите формулу =B1, а в C2 =C1 в D2 =D1
  4. Вы должны увидеть B2 как Col1, а C2, D2 как 0.
  5. В B3 введите формулу =A3, скопируйте ее
  6. Щелкните правой кнопкой мыши объединенную ячейку B1:D1, выберите «Специальная вставка -> формулы».
  7. Вы должны увидеть, что объединенная ячейка имеет значение 0.
  8. Введите Col1 в объединенную ячейку.
  9. Теперь вы должны увидеть, что все B2, C2, D2 являются Col1, то есть теперь вы можете ссылаться на объединенную ячейку так, как вы ожидаете.

Если вы можете объединить несколько ячеек, каждая из которых имеет разную ширину, просто вставьте формулу во все из них за один раз.

Это работает благодаря выбору дизайна Microsoft. Кажется, что когда вы вставляете формулы в объединенные ячейки, каждая базовая ячейка получает формулу (напротив, если вы вводите значение, оно получает только верхнюю левую ячейку). Таким образом, вы можете использовать это в своих интересах и вставить формулу, которая ссылается ячейку рядом с ней, а затем перезапишите верхнюю левую ячейку нужным значением, тогда каждая ячейка, лежащая в основе объединенной ячейки, будет иметь это значение.

person Martin    schedule 12.06.2014
comment
Аккуратный трюк. TLDR заключается в том, что вы используете формулы вставки, чтобы распределить =<cell to my left> в каждой ячейке диапазона, а затем введите значение в первую ячейку. - person rkagerer; 04.07.2018
comment
Обратите внимание на пару небольших предостережений: вставка нового столбца внутри диапазона не приведет к повторению соседних формул, как вы могли бы ожидать (поэтому вам нужно будет повторно применить эту гимнастику). А в версиях Excel до 2010 года есть ошибка, из-за которой разъединение ячейки с последующим нажатием кнопки «Отменить» не восстанавливает рассредоточенные формулы. - person rkagerer; 04.07.2018
comment
Хороший трюк! Кажется, не работает в Google Таблицах. - person Clement; 25.01.2021

Я создал простую функцию в vba, которая решит эту проблему:

Function mergedText(rngMergedCell As Range)

    If rngMergedCell.MergeCells = True Then
        mergedText = rngMergedCell.MergeArea(1, 1)
    Else
        mergedText = rngMergedCell
    End If

End Function

Если ячейка является объединенной ячейкой, функция вернет значение в первом элементе объединенной ячейки — здесь объединенная ячейка хранит свое значение.

person Community    schedule 22.07.2009

Более общий вариант предложения e.James:

={INDEX($A$1:A1, 1, MAX(NOT(ISBLANK($A$1:A1))*COLUMN($A$1:A1)-COLUMN($A$1)+1))}

Это основано на том факте, что объединенные ячейки пусты, за исключением первой (если только вы не находитесь в случае, подобном предложению Мартина).

Примечание. Фигурные скобки нужны для обозначения формулы массива (не вводите их, просто нажмите Alt+Return, чтобы подтвердить формулу в ячейке).

person Hoel    schedule 22.12.2016

Я понимаю, что опаздываю в эту тему, но я нашел действительно простой ответ на этот вопрос.

Если, например, ваша метка объединена в 4 столбца a1:d1, и если вы ссылаетесь на b1, вы вернете «». Для динамического поиска правильных меток используйте этот fx в вашей новой таблице:

=if(OriginalTable!B1="",ThisTable!A1,OriginalTable!B1)

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

Вот и все. Надеюсь, это поможет кому-то.

person gavin    schedule 28.09.2015
comment
Это фантастический ответ, который не требует дополнительных функций/макросов и т. д. - person RPh_Coder; 07.04.2016

В ячейках B1 и D2 нет значений, только в ячейках A1 и C1 что-то есть.

Таким образом, вам просто нужно убедиться, что ваши формулы в столбцах A и B ссылаются на A1 как на искомое значение, и что ваши формулы в столбцах C и D ссылаются на C1 как на искомое значение.

person BradC    schedule 15.01.2009
comment
Я хотел этого избежать, так как на самом деле 132 столбца из 6 объединенных ячеек (6 * 22). Мне нужна была копируемая формула, которая облегчит работу в случае, если формулу когда-нибудь понадобится изменить. - person cLFlaVA; 15.01.2009

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

=LET(
TargetCell, A1,
TargetRow, ROW(TargetCell),
TargetCol, COLUMN(TargetCell),
RowReference, INDIRECT(TargetRow & ":" & TargetRow),
RowValues, TRANSPOSE(FILTER(RowReference,ISBLANK(RowReference)=FALSE)),
RowValueColumns, MATCH(RowValues, RowReference,0),
ReturnColumn, MAX(FILTER(RowValueColumns,RowValueColumns<=TargetCol)),
Return, INDIRECT(ADDRESS(TargetRow,ReturnColumn)),

Return
)
person Dave Thunes    schedule 29.06.2021