Похоже, вы пытаетесь использовать Excel в качестве реляционной базы данных, что не так уж и здорово. В довершение всего, если в последние годы не произошло никаких изменений (я не имел удовольствия использовать что-либо позднее, чем Excel 2010), нет функции листа, чтобы превратить диапазон или массив в строку с разделителями. Вам придется придумать функцию рабочего листа VBA, которая это делает.
Вы можете использовать комбинацию формулы массива и VBA, чтобы делать то, что вы хотите. Прежде чем идти дальше, я настоятельно рекомендую вам использовать настоящую программу базы данных, если вы обнаружите, что делаете такие вещи на регулярной основе. В прошлом я злоупотреблял Excel, чтобы выполнять простые задачи, похожие на реляционные базы данных, но только простые. Если бы мне пришлось делать что-то более сложное, это было бы чрезвычайно больно.
Предполагая, что ваш ID для поиска находится в ячейке F1
а ваша таблица называется Table1
, вы вводите следующее как формулу массива (используйте control-shift-enter вместо enter). SimpleCat
- это функция составления листа VBA.
=SimpleCat(IF(Table1[Deal ID (Primary Key)]=$F$1, Table1[Name], ""))
SimpleCat
который будет работать для этого конкретного экземпляра, выглядит следующим образом:
Function SimpleCat(Args() As Variant) As Variant
Dim a As Variant
SimpleCat = ""
For Each a In Args
If a <> "" Then SimpleCat = SimpleCat & a & ", "
Next
If Len(SimpleCat) > 0 Then SimpleCat = Left$(SimpleCat, Len(SimpleCat) - 2)
End Function
Я оставляю вам упражнение для того, чтобы вы расширили SimpleCat
чтобы сделать его более общим, так как наличие более полнофункциональной универсальной функции конкатенации полезно в любом наборе инструментов.
Объяснение:
При оценке в виде формулы массива сравнение целого столбца таблицы с одним значением приведет к получению массива значений TRUE
и FALSE
. Использование IF
создаст новый массив, извлекая значения из правильной позиции массива, который вы используете, в значение, если истинная сторона IF
, и заполняя пустую строку, которую вы используете в значении, если ложная сторона IF
Функция SimpleCat
помещает все непустые значения в этом новом массиве вместе с запятыми между ними.