Можем ли да търсим и връщаме множество стойности в една клетка в Excel (разделени със запетая или интервал)?
Много пъти ми бяха задавани този въпрос от много мои колеги и читатели.
Excel има някои невероятни формули за търсене, като VLOOKUP, INDEX/MATCH (и сега XLOOKUP), но никой от тях не предлага начин за връщане на множество съвпадащи стойности. Всичко това работи, като идентифицира първото съвпадение и го връща.
Затова направих малко VBA кодиране, за да измисля персонализирана функция (наричана още потребителска функция) в Excel.
Актуализиране: След като Excel пусна динамични масиви и страхотни функции като UNIQUE и TEXTJOIN, вече е възможно да се използва проста формула и връща всички съвпадащи стойности в една клетка (обхванати в този урок).В този урок ще ви покажа как да направите това (ако използвате най -новата версия на Excel - Microsoft 365 с всички нови функции), както и начин да направите това в случай, че използвате по -стари версии ( използвайки VBA).
Така че нека започнем!
Търсене и връщане на множество стойности в една клетка (използване на формула)
Ако използвате Excel 2016 или предишни версии, преминете към следващия раздел, където ще покажа как да направите това с помощта на VBA.
С абонамента за Microsoft 365 вашият Excel вече има много по -мощни функции и функции, които не са съществували в предишни версии (като XLOOKUP, Dynamic Arrays, UNIQUE/FILTER и др.)
Така че, ако използвате Microsoft 365 (по -рано известен като Office 365), можете да използвате методите, обхванати в този раздел, могат да търсят и връщат множество стойности в една клетка в Excel.
И както ще видите, това е наистина проста формула.
По -долу имам набор от данни, където имам имената на хората в колона А и обучението, което са преминали в колона Б.
Щракнете тук, за да изтеглите примерния файл и продължете
За всеки човек искам да разбера какво обучение са завършили. В колона D имам списък с уникални имена (от колона А) и искам бързо да потърся и извлека цялото обучение, което всеки човек е извършил, и да ги получа в един набор (разделен със запетая).
По -долу е формулата, която ще направи това:
= TEXTJOIN (",", TRUE, IF (D2 = $ A $ 2: $ A $ 20, $ B $ 2: $ B $ 20, ""))
След като въведете формулата в клетка E2, я копирайте за всички клетки, където искате резултатите.
Как действа тази формула?
Позволете ми да деконструирам тази формула и да обясня всяка част от това как тя се събира ни дава резултата.
Логическият тест във формулата IF (D2 = $ A $ 2: $ A $ 20) проверява дали клетката с име D2 е същата като тази в диапазон A2: A20.
Той преминава през всяка клетка в диапазона A2: A20 и проверява дали името е същото в клетка D2 или не. ако е същото име, връща TRUE, в противен случай връща FALSE.
Така че тази част от формулата ще ви даде масив, както е показано по -долу:
{TRUE; FALSE; FALSE; TRUE; FALSE; FALSE; FALSE; FALSE; FALSE; FALSE; FALSE; FALSE; FALSE; FALSE; FALSE; FALSE; FALSE; FALSE; FALSE}
Тъй като искаме само да получим обучението за Bob (стойността в клетка D2), трябва да получим всички съответни обучения за клетките, които връщат TRUE в горния масив.
Това лесно се постига чрез посочване на [value_if_true] част от формулата IF като диапазон, който има обучение. Това гарантира, че ако името в клетка D2 съвпада с името в диапазона A2: A20, формулата IF ще върне цялото обучение, което е преминал този човек.
И където масивът връща FALSE, ние сме посочили стойността [value_if_false] като “” (празно), така че връща празно.
IF частта от формулата връща масива, както е показано по -долу:
{“Excel”; ””; ””; ”PowerPoint”; ””; ””; ””; ””; ””; ””; ””; ””; ”” ”;” ”;” ” ; ””; ””; ””}
Където има имената на обучението, което Боб е взел, и празни места, където името не беше Боб.
Сега всичко, което трябва да направим, е да комбинираме тези имена на обучение (разделени със запетая) и да го върнем в една клетка.
И това може лесно да се направи с помощта на новата формула TEXTJOIN (налична в Excel2021-2022 и Excel в Microsoft 365)
Формулата TEXTJOIN приема три аргумента:
- Разделителят - който е „,“ в нашия пример, тъй като искам обучението да бъде разделено със запетая и интервал
- TRUE - което казва на формулата TEXTJOIN да игнорира празни клетки и да комбинира само тези, които не са празни
- Формулата If, която връща текста, който трябва да се комбинира
Ако използвате Excel в Microsoft 365, който вече има динамични масиви, можете просто да въведете горната формула и да натиснете Enter. И ако използвате Excel2021-2022, трябва да въведете формулата и да задържите клавишите Control и Shift и след това да натиснете Enter
Щракнете тук, за да изтеглите примерния файл и продължете
Вземете множество стойности за търсене в една клетка (без повторение)
Тъй като формулата UNIQUE е достъпна само за Excel в Microsoft 365, няма да можете да използвате този метод в Excel2021-2022В случай, че във вашия набор от данни има повторения, както е показано по -долу, трябва да промените малко формулата, така че да получите само списък с уникални стойности в една клетка.
В горния набор от данни някои хора са преминали обучение няколко пъти. Например Боб и Стан са преминали обучението по Excel два пъти, а Бети е преминала обучение по MS Word два пъти. Но в нашия резултат не искаме да повтаряме име на обучение.
Можете да използвате следната формула, за да направите това:
= TEXTJOIN (",", TRUE, UNIQUE (IF (D2 = $ A $ 2: $ A $ 20, $ B $ 2: $ B $ 20, "")))
Горната формула работи по същия начин, с малка промяна. използвахме формулата IF в рамките на функцията UNIQUE, така че в случай, че има повторения в резултата от формулата if, функцията UNIQUE ще я премахне.
Щракнете тук, за да изтеглите примерния файл
Търсене и връщане на множество стойности в една клетка (използване на VBA)
Ако използвате Excel 2016 или предишни версии, няма да имате достъп до формулата TEXTJOIN. Така че най -добрият начин след това да потърсите и да получите множество съвпадащи стойности в една клетка е като използвате персонализирана формула, която можете да създадете с помощта на VBA.За да получим множество стойности за търсене в една клетка, трябва да създадем функция във VBA (подобна на функцията VLOOKUP), която проверява всяка клетка в колона и ако стойността за търсене е намерена, я добавя към резултата.
Ето кода на VBA, който може да направи това:
„Код от Sumit Bansal (https://trumpexcel.com) Функция SingleCellExtract (Lookupvalue As String, LookupRange As Range, ColumnNumber As Integer) Dim i As Long Dim Result As String For i = 1 To LookupRange.Columns (1). .Count If LookupRange.Cells (i, 1) = Lookupvalue Then Result = Result & "" & LookupRange.Cells (i, ColumnNumber) & "," End If Next i SingleCellExtract = Left (Резултат, Len (Резултат) - 1) Крайна функция
Къде да поставите този код?
- Отворете работна книга и щракнете върху Alt + F11 (това отваря прозореца на VBA Editor).
- В този прозорец на VBA Editor вляво има изследовател на проекти (където са изброени всички работни книги и работни листове). Щракнете с десния бутон върху всеки обект в работната книга, където искате да работи този код, и отидете на Вмъкване -> Модул.
- В прозореца на модула (който ще се появи вдясно) копирайте и поставете горния код.
- Сега сте готови. Отидете до всяка клетка в работната книга и въведете = SingleCellExtract и включете необходимите входни аргументи (т.е. LookupValue, LookupRange, ColumnNumber).
Как действа тази формула?
Тази функция работи подобно на функцията VLOOKUP.
За вход са необходими 3 аргумента:
1. Търсене на стойност - Низ, който трябва да търсим в диапазон от клетки.
2. LookupRange - Масив от клетки, откъдето трябва да извлечем данните ($ B3: $ C18 в този случай).
3. ColumnNumber - Това е номерът на колоната на таблицата/масива, от който трябва да се върне съответстващата стойност (2 в този случай).
Когато използвате тази формула, тя проверява всяка клетка в най -лявата колона в диапазона за търсене и когато намери съвпадение, добавя към резултата в клетката, в която сте използвали формулата.
Помня: Запазете работната книга като работна книга с активирани макроси (.xlsm или .xls), за да използвате отново тази формула. Освен това тази функция ще бъде налична само в тази работна книга, а не във всички работни книги.
Щракнете тук, за да изтеглите примерния файл
Научете как да автоматизирате скучни повтарящи се задачи с VBA в Excel. Присъедини се към Excel VBA курсВземете множество стойности за търсене в една клетка (без повторение)
Възможно е да имате повторения в данните.
Ако използвате кода, използван по -горе, той ще ви даде повторения и в резултата.
Ако искате да получите резултат, където няма повторения, трябва да промените кода малко.
Ето кода на VBA, който ще ви даде множество стойности за търсене в една клетка без никакви повторения.
'Код от Sumit Bansal (https://trumpexcel.com) Функция MultipleLookupNoRept (Lookupvalue As String, LookupRange As Range, ColumnNumber As Integer) Dim i Както Long Dim Result As String For i = 1 To LookupRange.Columns (1). .Count If LookupRange.Cells (i, 1) = Lookupvalue Тогава For J = 1 To i - 1 If LookupRange.Cells (J, 1) = Lookupvalue Тогава If LookupRange.Cells (J, ColumnNumber) = LookupRange.Cells (i, ColumnNumber) Тогава GoTo Skip End If End If End If Next J Result = Result & "" & LookupRange.Cells (i, ColumnNumber) & "," Skip: End If Next i MultipleLookupNoRept = Left (Резултат, Len (Резултат) - 1) Край Функция
След като поставите този код във VB Editor (както е показано по -горе в урока), ще можете да използвате MultipleLookupNoRept функция.
Ето моментна снимка на резултата, който ще получите с това MultipleLookupNoRept функция.
Щракнете тук, за да изтеглите примерния файл
В този урок разгледах как да използвам формули и VBA в Excel за намиране и връщане на множество стойности за търсене в една клетка в Excel.
Въпреки че може лесно да се направи с проста формула, ако използвате Excel в абонамент за Microsoft 365, ако използвате предишни версии и нямате достъп до функции като TEXTJOIN, все пак можете да направите това с помощта на VBA, като създадете своя собствена персонализирана функция.