Excel'de bir dizi dizinin aranması


1

Bir terim kümesi ve bu terimlerden birini veya daha fazlasını içerebilen veya içermeyen bir dizi dizim var. Terimlerin bir veya daha fazlası için bir eşleşme olup olmadığını aramak istiyorum.

Arama terimleri ( A1:A17aşağıdaki örnekteki hücreler )

* bob  
* linda  
* sam 

Arama dizeleri ( Eaşağıdaki örnekteki sütun )

* I'm sam  
* I'm lucy  
* Please find sam or bob or lucy

Şu anda ORiç içe geçmiş bir sürü arama işleviyle bir işlev kullanıyorum . Örneğin:
=IF(OR(ISNUMBER(SEARCH(A$2,E33)),ISNUMBER(SEARCH(A$3,E33)),....,ISNUMBER(SEARCH(A$17,E33))),1,0)

SQL'in alt dize IN (1,2,3,4) eşdeğerini kullanmak için bir yol tercih ederim


Hedef hücrede bunlardan herhangi biri varsa işaretlemeniz mi gerekiyor yoksa saymak gibi başka bir şey yapmanız mı gerekiyor? Excel'in FIND işlevi bu tür şeyler için mükemmeldir.
CLockeWork

Kullanılabilir özellikler sürüme göre değişir. Hangi Excel sürümünü kullanıyorsunuz?
CharlieRB

Office 2011 (Mac) üzerinde çalışıyorum
SAR622 8

Yanıtlar:


2

Bir dizgede bir kelimeyi nasıl arayacağınızı anlıyorsunuz:

SEARCH(A$2, E1)

A2(“bo” E1gibi 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 E1için her değerlerin A2:A1716 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 ( 1en az bir kelime bulunursa, 0aksi 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/ FALSEdeğerinin önüne (çift eksi) koymak , sırasıyla 1veya 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), ""))
  • ISERRORbiraz tersi olması ISNUMBERdışında biraz ; Döndürdüğü TRUEparametresinin hata değeri ise ve FALSEbu 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 )E13

Ö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 13veya 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.513

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ü SEARCHher dizede boş dize bulacaksınız.

Bu harika ve zarif .. Dizi formüllerini biliyorum ama formülü COUNT ()> 0 kullanacak şekilde ayarlamayı düşünmezdim.
SAR622

Tekrar teşekkürler. Bunu, arama formülüne uyan bir dizideki satır sayısını saymak için değiştirmeye çalışıyorum ama bir şeyleri özlüyorum. = COUNT (ARAMA (A $ 2: A $ 17, E $ 1: E $ 9)) ve yalnızca "1" değerini döndürür. Yukarıdaki örnek verilere bakıldığında "5" beklerdim. Ne kaçırdığım hakkında bir fikrin var mı?
SAR622

Aynı anda çok fazla yapmaya çalışıyorsun. =COUNT(SEARCH(A$2:A$17, E1))yapar SEARCH(A2, E1)), SEARCH(A3, E1)), SEARCH(A4, E1)), .... Fakat =COUNT(SEARCH(A$2:A$17,E$1:E$9))ilkin sonuçlarını saymaz COUNT; öyle SEARCH(A2, E1)), SEARCH(A3, E2)), SEARCH(A4, E3)), .... Gibi bir şey dene =COUNT(F$1:F$9, ">0").
G-Man,

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.