Вот подход VBA. Предполагая Excel 2007 или более поздней версии; Первые несколько шагов будут отличаться, если вы используете предварительную версию Excel.
Включить вкладку разработчика
Нажмите "Visual Basic" на вкладке "Разработчик" на ленте.
Щелкните правой кнопкой мыши на «VBAProject (независимо от того, что ваш лист называется.xls *)» и выполните Вставить -> Модуль в контекстном меню.
Вставьте в этот код
Option Explicit
Function allquixotic(param As Variant, search As Range, values As Range, Optional absolute As Boolean = False) As String
Dim sep As String, retval As String
Dim i As Integer, rownum As Integer
Dim look As Range, j As Range
sep = ", "
retval = ""
For i = 1 To search.Rows.Count
Set look = search.Cells(i, 1)
If absolute Then
rownum = look.Row
Else
rownum = i
End If
If look.Value = param Then
If absolute Then
Set j = values.Worksheet.Cells(rownum, values.Column)
Else
Set j = values.Cells(i, 1)
End If
retval = IIf(retval = "", retval & j.Value, retval & sep & j.Value)
End If
Next
allquixotic = retval
End Function
Используйте функцию рабочего листа (не стесняйтесь переименовать ее) с помощью формулы
=allquixotic(A1,$A$1:$A$15,$B$1:$B$15,true)
Используйте маркер заполнения, чтобы поместить формулу во все ячейки
Параметры следующие:
=allquixotic(look_cell, key_range, value_range, absolute)
look_cell
: первый параметр, должен быть отдельной ячейкой или литералом значения. Допустимый ввод включает в себя такие вещи, как 3
, $6.25
, "Hello"
и т.д. Это значение, которое вы пытаетесь найти в key_range
.
key_range
: это должен быть диапазон ячеек (более одной ячейки); если absolute
- true, тогда вы получите очень странные результаты, если только это не непрерывный диапазон (все значения в последовательных строках).
value_range
: это должен быть диапазон ячеек (более одной ячейки); если absolute
- true, тогда вы получите очень странные результаты, если только это не непрерывный диапазон (все значения в последовательных строках).
absolute
: если true, то мы будем использовать абсолютный номер строки (относительно количества строк во всей электронной таблице) каждой "найденной" строки в key_range
чтобы определить, для какой строки извлечь значение из value_range
. Если false, мы будем использовать относительные числа; например, если мы найдем совпадение в третьей строке key_range
, мы извлечем значение из третьей строки value_range
. Рекомендуемое значение - ЛОЖЬ, или вы можете не указывать его по умолчанию.
Примечание . Эта функция не поддерживает случай, когда диапазоны ключей и значений находятся в столбцах, но его довольно легко адаптировать к этому.
Кроме того, если вы укажете несколько столбцов в key_range или value_range, будет использоваться только самый левый столбец.