* Son * maçı döndürmek için DÜŞEYARA nasıl gidilir?


12

DÜŞEYARA ile çalışmaya alışkınım ama bu sefer bir sorunum var. İlk eşleşen değeri değil, son değeri istiyorum . Nasıl? (LibreOffice Calc ile çalışıyorum ancak bir MS Excel çözümü de aynı derecede faydalı olmalı.)

Bunun nedeni, binlerce satır içeren iki metin sütunum var, diyelim ki biri işlem alacaklılarının bir listesi (Amazon, Ebay, işveren, bakkal, vb.) Ve diğeri harcama kategorilerinin bir listesi (ücretler, vergiler, ev, kira vb.). Bazı işlemler her seferinde aynı harcama kategorisine sahip değildir ve en son kullanılanı almak istiyorum. Listenin hiçbir sütuna (aslında tarihe göre) göre sıralandığını ve sıralama düzenini değiştirmek istemediğimi unutmayın.

Ne var (hata işleme hariç) her zamanki "ilk maç" formülü:

=VLOOKUP( 
[payee field] , [payee+category range] , [index of category column] , 
0 )

Bunun gibi çözümler gördüm , ama #DIV/0!hatalar alıyorum :

=LOOKUP(2 , 1/( [payee range] = [search value] ) , [category range] )

Çözüm, mutlaka DÜŞEYARA değil, herhangi bir formül olabilir. Alacaklı / kategori sütunlarını da değiştirebilirim. Sıralama sütununda değişiklik yok, lütfen.


Sondan ziyade en sık değeri alan bir çözüm için bonus puan !

Yanıtlar:


3

Son eşleşen kayıttan veri almak için bir dizi formülü kullanabilirsiniz.

=INDEX(IF($A$1:$A$20="c",$B$1:$B$20),MAX(IF($A$1:$A$20="c",ROW($A$1:$A$20))))

Ctrl+ Shift+ Tuşlarını kullanarak formülü girin Enter.

Bu, a'nın INDEX/ MATCHinşaatı gibi çalışır VLOOKUP, ancak MAXyerine bir koşullu kullanılır MATCH.

Bunun tablonuzun 1. satırda başladığını varsaydığını unutmayın. Verileriniz farklı bir satırda başlıyorsa ROW(...), üst satır ile 1 arasındaki farkı çıkararak parçayı ayarlamanız gerekir .


Bu "c" harfi ile ilgili kafam karıştı - Değerlendirmenin her zaman yanlış olduğunu düşünürdüm, o zaman gerçekten ne işe yarar?
Torben Gundtofte-Bruun

Önerinizi test ettim (ve bir dizi formülü olarak kabul edildiğini kontrol ettim). Col A'nın alacaklı olduğunu ve B'nin kategori olduğunu varsayıyorum, değil mi? Ne yazık ki, LibreOffice, "Geçersiz argüman: İşlev bağımsız değişkeni geçerli değil. Tüm işlevlerin LibreOffice'de bu adla var olduğunu kontrol ettim, ancak LibreOffice'in IFdizileri işleyemediğini merak ediyorum .
Torben Gundtofte-Bruun

Maalesef, "c" kelimesi sadece eşleştirmek istediğiniz alacaklı adıydı. Bu, oynadığım örnek verilerden bir kalıntıydı. Bunun sayfanızda bir hücre başvurusu ile değiştirileceğini varsayıyorum.
2014'te Excellll

@ TorbenGundtofte-Bruun Kullandığınız formülü paylaşmak ister misiniz? Görebilirsem sorunu giderebilirim. Ayrıca, formülün Evaluate Formulahangi bölümünün hatayı oluşturduğunu görmek için her zaman formülde ilerlemeye çalışabilirsiniz . Bu özellik Excel'de bulunur ve LibreOffice Calc aynı özelliğe sahip değilse şaşırırdım.
2014'te Excellll

Orijinal formülüm basittir, bu yüzden =VLOOKUP(J1061;$J$2:$K$9999;2;0)col J'nin payees ve col K kategorilerini içerdiği :-) yeterli değildir . İlk maçı beklendiği gibi döndürür.
Torben Gundtofte-Bruun

2

(Burada sıralanan veriler için ayrı bir soru olarak cevap verilmez.)

Veri varsa edildi sıralanmış şunu kullanabilirsiniz VLOOKUPile range_lookupargüman TRUEresmen "yaklaşık maçı için arama" olarak Excel için açıklanan (veya atlanmış, bu kadar çünkü varsayılan).

Başka bir deyişle, sıralı veriler için:

  • son bağımsız değişkeni ilk değeri FALSEdöndürecek şekilde ayarlama ve
  • son bağımsız değişkeni son değeri TRUEdöndürür .

Bu büyük ölçüde belgelenmemiş ve belirsizdir, ancak VisiCalc (1979) ile ilgilidir ve bugün en azından Microsoft Excel, LibreOffice Calc ve Google E-Tablolar'da geçerlidir. Sonuçta, dördüncü parametre olmadığında LOOKUPVisiCalc (ve dolayısıyla VLOOKUPve HLOOKUP) ' nın ilk uygulamasından kaynaklanmaktadır . Bu değer, bu davranışla sonuçlanan kapsayıcı sol sınır ve özel sağ sınır (ortak ve zarif bir uygulama) kullanılarak ikili arama tarafından bulunur .

Bir aday ara ile arama başlar Teknik olarak bu araçlar [0, n), ndizinin uzunluğu ve döngü değişkeni durumu yani A[imin] <= key && key < A[imax], (<= hedef, sona erdikten sonra başlar tek bağlı, doğru, olan bağlanan bırakılır > hedef, geçerli kılınması için, ya önce uç noktalar tarafından değerleri kontrol ya da kontrol sonucu sonra), ve arka arkaya hangi tarafı korur, bu değişmez ikiye bölen ve seçme: bir yan çıkarılması ile, sen, 1 terimiyle bir aralık elde edene kadar [k, k+1)ve algoritma geri döner k. Bunun tam bir eşleşme olması gerekmez (!): Sadece aşağıdan en yakın eşleşme. Yinelenen eşleşmelerde, bir sonraki değerin daha büyük olmasını gerektirdiği için bu, son eşleşmeyi döndürür.anahtarından (veya dizinin sonundan). Yinelemeler durumunda, bazı davranışlara ihtiyacınız vardır ve bu makul ve uygulanması kolaydır.

Bu davranış, bu eski Microsoft Bilgi Bankası makalesinde açıkça belirtilmiştir (vurgu eklenmiştir): "XL: Bir dizideki ilk veya son eşleşme nasıl döndürülür " ( Q214069 ):

Sıralanmış veri dizisindeki bir değeri aramak ve başka bir dizideki o konumda bulunan karşılık gelen değeri döndürmek için LOOKUP () işlevini kullanabilirsiniz. Arama değeri dizi içinde tekrarlanırsa, karşılaşılan son eşleşmeyi döndürür . Bu davranış VLOOKUP (), HLOOKUP () ve LOOKUP () işlevleri için geçerlidir.

Bazı elektronik tablolar için resmi belgeler aşağıdadır; "son eşleşme" davranışı da belirtilmez, ancak Google E-Tablolar dokümanında ima edilir:

  • Microsoft Excel

    TRUE , tablodaki ilk sütunun sayısal veya alfabetik olarak sıralandığını varsayar ve ardından en yakın değeri arar .

  • Google E-Tablolar :

    Eğer is_sortedbir TRUEveya atlanmış, en yakın eşleşme ( veya daha eşit daha az arama anahtarına) döndürülür


En yakın maç beni deli ediyordu!
davetapley

1

Arama dizisindeki değerler ardışıksa (yani son tarih gibi en büyük değeri arıyorsanız), DOLAYLI işlevini kullanmanıza bile gerek yoktur. Bu basit kodu deneyin:

=MAX(IF($A$1:$A$20="c",$B$1:$B$20,)

CTRL + ÜST KRKT + ENTER tuşlarını kullanarak formülü tekrar girin


0

En sık değer bir gitmek vardı. LibreOffice'te çalışıp çalışmayacağından emin değilim, ancak excel'de çalışıyor gibi görünüyor

= DİZİN (2 $ B: $ B $ 9, MATCH (MAX (- ($ A $ 2: $ A $ 9 = D2) * COUNTIFS (2 $ B: $ B $ 9 $ B $ 2: $ B $ 9 $ A $ 2 : $ A $ 9, D2)), - ($ A $ 2: $ A $ 9 = D2) * COUNTIFS (2 $ B: $ B $ 9 $ B $ 2: $ B $ 9 $ A $ 2: $ A $ 9, D2 ), 0))

A sütunu alacaklı, B sütunu kategori olurdu, D2 filtrelemek istediğiniz alacaklı. Yukarıdaki fonksiyona neden fazladan çizgi eklediğinden emin değilim.

Son hücreyi bulma işlevim aşağıdaki gibi olurdu:

= DOLAYLI ("B" ve MAKS. (- ($ A $ 2: $ A $ 9 = D2) * SATIR ($ A $ 2: $ A $ 9)))

Dolaylı, döndürmek istediğim sütunu belirtmeme ve satırı doğrudan bulmama izin veriyor (bu nedenle başlık satırlarının sayısını çıkarmam gerekmiyor.

Her iki fonksiyonun da Ctrl + shift + enter tuşlarıyla girilmesi gerekir.


0
=LOOKUP([payee field] , [payee range] , [category range])

Bu size son değeri verecek

3 yıl geç kaldığım için puan kazanır mıyım?


-1

#DIV/0!Hatalarınız var, çünkü formülünüzü şöyle yazmalısınız:

=LOOKUP(2;IF(([payee range] = [search value]);1;"");[category range])

bu işe yarayacak ve son maçı bulacak.

([payee range] = [search value]) : boole matrisi TRUE / FALSE

IF(([payee range] = [search value]);1;"") : sahte boole matrisi 1 / ""

=LOOKUP(2; {pseudo-boolean matrix 1/""} );[category range]): alway son 1konumu


LOOKUPsadece sıralı listede çalışır, koordinatınızın çıktısı 1sıralanmamış bir şekilde s ve boşlukların bir listesi ile sonuçlanır , bu yüzden doğru sonuç vermez.
Máté Juhász
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.