Bildiğim kadarıyla Excel'de virgülle ayrılmış etiketleri ayrıştırabilecek ve özetleyebilecek yerleşik özellikler yoktur. Tabii ki, çalışma sayfası işlevleri ve küçük bir VBA ile kendi çözümünüzü oluşturabilirsiniz. İşte bunu yapmak için hızlı bir çözüm.
Adım 1 : VBA düzenleyici bölmesini Excel'de açmak için Alt+ tuşuna basın F11. Yeni bir modül ekleyin ve özel bir işlev için bu koda yapıştırın.
Public Function CCARRAY(rr As Variant, sep As String)
'rr is the range or array of values you want to concatenate. sep is the delimiter.
Dim rra() As Variant
Dim out As String
Dim i As Integer
On Error GoTo EH
rra = rr
out = ""
i = 1
Do While i <= UBound(rra, 1)
If rra(i, 1) <> False Then
out = out & rra(i, 1) & sep
End If
i = i + 1
Loop
out = Left(out, Len(out) - Len(sep))
CCARRAY = out
Exit Function
EH:
rra = rr.Value
Resume Next
End Function
Bu işlev, sahip olduğunuz etiket verilerini özetlemek için virgülle ayrılmış listeler oluşturmanıza olanak tanır.
Adım 2 : Bir çalışma sayfasına, aramak istediğiniz etiketi bir hücreye (aşağıdaki örnekte H2) girin. Sağdaki hücrede, Ctrl+ Shift+ tuşlarına basarak aşağıdaki formülü girin Enter.
=IFERROR(CCARRAY(IF(NOT(ISERROR(FIND(H2,$B$2:$B$6))),$A$2:$A$6),", "),"No matches found.")
Ctrl+ Shift+ Tuşlarına basarak Enter, formülü bir dizi formülü olarak girersiniz. {...}
Formül çubuğunda çevrili görünecektir . Formülde $B$2:$B$6
, listelenen öğeler için tüm etiketleri içeren aralık olduğunu unutmayın $A$2:$A$6
.
DÜZENLEME:
Eşleşmelerinizin bir hücredeki liste yerine bir sütunda listelenmesini önemsemiyorsanız, yalnızca çalışma sayfası işlevlerini kullanarak etiketler için eşleşmeler döndürebilirsiniz.
Başlıklarınızın içinde olduğu durumlarda Column A
, etiketler içindedir Column B
ve aradığınız etiketi ise H2
şu kullanabilirsiniz, dizi formülünü içinde I2
ve ihtiyacınız kadar aşağı doldurun:
=IFERROR(INDEX($A$1:$A$6,SMALL(IF(NOT(ISERROR(FIND($H$2,$B$1:$B$6))),ROW($B$1:$B$6),2000000),ROW()-1)),"")
Formül, önce her satırdaki etiketlerin arama terimini içerip içermediğine bağlı olarak bir sayı dizisi oluşturarak çalışır. Bir eşleşme bulunursa, satır numarası dizide saklanır. Bulunmazsa, 2000000 dizide saklanır. Ardından, SMALL(<array>,ROW()-1)
formülün bir kısmı ROW()-1
dizideki en küçük değeri döndürür . Daha sonra, bu değer, INDEX()
başlık dizisindeki o dizindeki değerin döndürüldüğü işleve bir dizin bağımsız değişkeni olarak iletilir . Başlık dizisindeki satır sayısından büyük bir sayı INDEX()
bağımsız değişken olarak iletilirse , hata döndürülür. Herhangi bir eşleşme bulunmadığında 2000000 argüman olarak geçirildiğinden, bir hata döndürülür. IFERROR()
Fonksiyon sonra döner ""
bu durumda.
ROW()
Bu formülde nasıl kullanıldığını kavramak önemlidir . Sonuç listenizi farklı bir satırdan başlayarak görüntülemek istiyorsanız, SMALL()
işlevin ikinci bağımsız değişkenini diziden ilk en küçük değeri döndürecek şekilde ayarlamanız gerekir . Sonuçların listeniz Row 1 yerine Row 2 başlarsa Örneğin, şunları kullanırsınız SMALL(...,ROW())
yerine SMALL(...,ROW()-1)
.
Ayrıca, başlık ve etiket listeniz Satır 1'de başlamazsa, formülü de ayarlamanız gerekir. İkinci argüman IF()
işlevine Row 2 yerine 1 satırına başlıkları başlar Listenizi eklemek formül gerekir eğer verilerinizin ilk satırda bir maç, 1. Örn döndürmesini sağlayacak şekilde ayarlanmalıdır IF(...,ROW($A$2:$A$7)-1,...)
yerine IF(...,ROW($A$1:$A$6),...)
.