Хоча існує кілька способів зробити це за допомогою вбудованих можливостей або формул Excel, жоден не особливо привабливий.
Основна ідея полягала б у тому, щоб розділити на різні комірки елементи "Account #", які насправді містять кілька облікових записів, зробити окремий пошук імені репліка для кожного з включених облікових записів, а потім вибрати успішний пошук, якщо такий є. Розділення може бути здійснено за допомогою команди "Текст до стовпців" на вкладці "Дані" або за допомогою набору формул для аналізу рядків. "Вибір" успішних пошуку може бути здійснено за допомогою вкладених IF(ISERROR(...))функцій або, можливо, більш екзотичної формули масиву.
Тут є розумною альтернативою рішення VBA.
Наступна визначена користувачем функція приймає в якості аргументів рядок (або посилання комірки на рядок), що включає одну або кілька облікових записів і посилання на діапазон пошуку; він повертає ім'я репліка, якщо в обліковому записі в рядку є відповідність. Необов’язковий третій аргумент може бути використаний для визначення роздільника між обліковими записами в рядку облікового запису. Якщо нічого не вказано, функція використовує роздільник за замовчуванням на коми і пробіл (",") за замовчуванням.
Функція поверне ім'я представника для першого знайденого відповідності облікового запису, ігноруючи будь-які збіги, які можуть бути знайдені для інших облікових записів у рядку облікового запису. Якщо збіг облікового запису не знайдено, функція повертає # VALUE! помилка.
Option Explicit
Function AcctRepLookup(Accts As String, RepLookUpRange As Range, Optional Separator As Variant) As Variant
Dim acctArray As Variant
Dim acct As Variant
Dim lookupArray As Variant
Dim i As Long
If IsEmpty(Separator) Then
Separator = ", "
End If
acctArray = Split(Accts, Separator) 'put acct list into array
lookupArray = RepLookUpRange.Value 'put lookup table into array
For Each acct In acctArray 'loop through accounts
For i = LBound(lookupArray) To UBound(lookupArray) 'loop through lookup table
If UCase(acct) = UCase(lookupArray(i, 1)) Then
AcctRepLookup = lookupArray(i, 2) 'a match:) exit with rep name
Exit Function
End If
Next i
Next acct
AcctRepLookup = CVErr(xlErrValue) 'no match:( exit with error
End Function
Щоб встановити функцію в використовуваній робочій книзі, спершу виберіть параметр Visual Basic (перший елемент зліва) на вкладці «Розробник» Стрічки, а потім виберіть пункт Вставити / Модуль на панелі меню Вставити функцію в панель коду, що з’явиться .