Bir dizgede bir kelimeyi nasıl arayacağınızı anlıyorsunuz:
SEARCH(A$2, E1)
A2
(“bo” E1
gibi bir değer olabilir ) içindeki (“bob”) değerini arar . Bu geri döner #VALUE
, çünkü “bob” “sam” de görünmez. Ancak,
SEARCH("sam", "I'm sam")
döner 5
, çünkü “sam”, “sam” 'da belirir ve 5. karakterden başlar.
Bu numarayı çok sayıda arama dizgisine ölçeklendirmek için numaradan istiyorsun. İşin püf noktası dizi formüllerini kullanmaktır . Bir dizi formülü buna biraz benziyor:
=SEARCH(A$2:A$17, E1)
bu arama E1
için her değerlerin A2:A17
16 sonuçlarının bir dizi oluşturma. Örnek veriler için bu sonuçlar { #VALUE
; #VALUE
; 5
; …}.
Bu cevabın altındaki önemli notu görün.
Bunu kendi başınıza kullanamazsınız, çünkü bir hücrenin bir diziyi değil, bir değeri değerlendirmesi gerekir. Ama böyle bir şey yapabilirsin
=COUNT(SEARCH(A$2:A$17, E1))
sonuçtaki sayıları sayar SEARCH
- yani, kelimelerin kaç tanesinde A
(“bob”, “linda”, “sam” vb.) bulunduğunu söyler E1
. Yani, senin
=IF( OR(ISNUMBER(SEARCH(A$2,E1)),…,ISNUMBER(SEARCH(A$17,E1))), 1, 0)
formül ( 1
en az bir kelime bulunursa, 0
aksi takdirde) ile değiştirilebilir
=IF(COUNT(SEARCH(A$2:A$17, E1))>0, 1, 0)
ya da sadece
=--(COUNT(SEARCH(A$2:A$17, $E1))>0)
( --
A TRUE
/ FALSE
değerinin önüne (çift eksi) koymak , sırasıyla 1
veya içine çevirir 0
.)
Ama muhtemelen sadece belirlemek daha fazlasını yapmak istiyoruz olmadığını dizelerinden biri maçları; Muhtemelen hangisini bilmek istersin . SEARCH(A$2:A$17, E1)
Diziyi değerlendirdiğimi söylediğimi hatırlayın
{ #VALUE
; #VALUE
; 5
; …}? Şunu çıkaralım 5
:
=MIN(IFERROR(SEARCH(A$2:A$17, $E1), ""))
ISERROR
biraz tersi olması ISNUMBER
dışında biraz ; Döndürdüğü TRUE
parametresinin hata değeri ise ve FALSE
bu normal bir değer (sayı, Boole, tarih veya dize) buysa.
IFERROR
çok uygun bir fonksiyondur;
IFERROR ( hesaplanan_değer , varsayılan_değer )
İçin Kısa
IF (ISERROR ( calculator_value ), default_value , calculator_value )
yani, bir hata değeri için varsayılan bir değer (tipik olarak hatalı olmayan bir değer) kullanır.
- Bu yüzden
IFERROR(SEARCH(A$2:A$17, $E1), "")
yukarıdaki dizi sonucunu { ""
; ""
; 5
; …}.
- Ardından boş dizeleri atlayarak diziden en düşük sayıyı çıkarır. Normalde bu , birden fazla eşleşmenin olduğu “Lütfen sam veya bob veya lucy'yi bulun” gibi durumlar hariç , tek sayı olacaktır . Bu durumlarda, dizgideki ilk eşleşme olacaktır (burada, “sam” ifadesinin göründüğü yer).
MIN( the_above )
E
13
Öyleyse şimdi
=MATCH(MIN(IFERROR(SEARCH(A$2:A$17, E1), "")), SEARCH(A$2:A$17,E1))
Bu ( MATCH
), nerede olduğunu görmek için tam arama sonuçlarında 5
(veya 13
veya her neyse) arar. Yukarıdaki örneklerde, (veya veya her neyse) arama sonucundaki üçüncü öğe olduğu için bu geri döner 3
, çünkü üçüncü arama sözcüğü olan “sam” a karşılık gelir.5
13
Aşağıdaki resimde,
F1
(eşleşme sayısı) = =COUNT(SEARCH(A$2:A$17, E1))
G1
(ilk eşleşmenin yeri) = =MIN(IFERROR(SEARCH(A$2:A$17, E1), FALSE))
H1
(ilk eşleşmenin dizini (dize numarası)) =
=MATCH(MIN(IFERROR(SEARCH(A$2:A$17, E1), "")), SEARCH(A$2:A$17,E1))
Önemli notlar:
- Bir dizi formülü yazdığınızda (yani, yukarıda tartışılan formüllerden herhangi biri), Ctrl+ Shift+ yazarak girin Enter. Bu, çevresinde kıvrımlı kaşlı ayraçlarla görünmesine neden olur. Kıvrımlı ayraçları manuel olarak yazmayın.
- Yukarıdaki formüller, aranacak verilerinizin (“ben sam” vb.) Hücrede başladığını varsayar
E1
. Gerektiği gibi ayarlayın. Verilerinizin ilk satırına karşılık gelen formülleri girin ve aşağı sürükleyin.
- Boş hücreleri kaçının
A2:A17
, çünkü SEARCH
her dizede boş dize bulacaksınız.