Microsoft Excel'de bir sütundaki boş olmayan son hücrenin değerini bulmanın formülünü bilen var mı?
Microsoft Excel'de bir sütundaki boş olmayan son hücrenin değerini bulmanın formülünü bilen var mı?
Yanıtlar:
Bu hem metin hem de sayılarla çalışır ve boş hücreler olup olmadığı umurunda değildir, yani boş olmayan son hücreyi döndürür.
Dizi olarak girilmesi gerekir , yani yazdıktan veya yapıştırdıktan sonra Ctrl-Shift-Enter tuşlarına basmanız gerekir. Aşağıdakiler A sütunu içindir:
=INDEX(A:A,MAX((A:A<>"")*(ROW(A:A))))
CELL()
veya 'ye aktarılabilir OFFSET()
), oysa daha fazla oy alan , size nerede olduğunu söylemeden bir değer döndürür.
Aşağıdaki basit formülü kullanmak çok daha hızlı
=LOOKUP(2,1/(A:A<>""),A:A)
Excel 2003 için:
=LOOKUP(2,1/(A1:A65535<>""),A1:A65535)
Size aşağıdaki avantajları sağlar:
Açıklama:
(A:A<>"")
dizi döndürür {TRUE,TRUE,..,FALSE,..}
1/(A:A<>"")
bu diziyi olarak değiştirir {1,1,..,#DIV/0!,..}
.LOOKUP
beklediği sıralanmış içinde dizi artan düzeni ve eğer dikkate alarak LOOKUP
fonksiyonu tam bir eşleşme bulamazsa, bu en büyük değeri seçer lookup_range
(bizim durumumuzda {1,1,..,#DIV/0!,..}
(bizim durumumuzda veya değere eşit az olduğunu) 2
), formül 1
dizinin sonunu bulur ve ilgili değeri result_range
(üçüncü parametre - A:A
) döndürür .Ayrıca küçük bir not - yukarıdaki formül hatalı hücreleri hesaba katmaz (bunu yalnızca son boş olmayan hücrede hata varsa görebilirsiniz). Bunları hesaba katmak istiyorsanız, kullanın:
=LOOKUP(2,1/(NOT(ISBLANK(A:A))),A:A)
aşağıdaki resim farkı göstermektedir:
LOOKUP
Son argümanın result_vector
isteğe bağlı olduğunu söyleyen belgeler . Ancak atlarsam, anlamadığım çok garip bir sonuç alıyorum.
LOOKUP
fonksiyon bulamazsa, lookup_value
fonksiyon en büyük değerle eşleşiyorsa lookup_vector
veya ona eşittir lookup_value.
" Hatayı =LOOKUP(2,A:A<>"",A:A)
oluşturmadan kullanırsam , ortada bir değer döndürüyor gibi görünüyor vektör. Bu durumda tam işlevselliğin ne olduğunu bulamadım. #DIV/0!
1/...
=LOOKUP(2,1/(A:A<>""),ROW(A:A))
ancak ROW
işlev eklemek "oynaklık" efekti ekleyecek - formül, wroksheet üzerindeki herhangi bir hücre her değiştiğinde yeniden hesaplanacak
İşte başka bir seçenek: =OFFSET($A$1;COUNTA(A:A)-1;0)
COUNTA
yerine kullanın COUNT
). Boş hücrelerden bahsetmiyorum bile.
Doug Glancy'nin cevabının verdiği büyük ipucundan esinlenerek, aynı şeyi bir dizi formülüne ihtiyaç duymadan yapmanın bir yolunu buldum. Bana nedenini sormayın, ancak mümkünse dizi formüllerinin kullanımından kaçınmaya istekliyim (herhangi bir nedenle değil, bu sadece benim tarzım).
İşte burada:
=SUMPRODUCT(MAX(($A:$A<>"")*(ROW(A:A))))
Referans sütun olarak Sütun A kullanılarak boş olmayan son satırı bulmak için
=SUMPRODUCT(MAX(($1:$1<>"")*(COLUMN(1:1))))
1. satırı referans satırı olarak kullanarak son boş olmayan sütunu bulmak için
Bu, dinamik adlandırılmış aralıkları verimli bir şekilde tanımlamak için indeks işlevi ile birlikte kullanılabilir, ancak bu, burada ele alınan acil soruyla ilgili olmadığından başka bir gönderi için bir şeydir.
Yukarıdaki yöntemleri Excel 2010 ile hem "yerel olarak" hem de "Uyumluluk Modu" nda (Excel'in eski sürümleri için) test ettim ve çalışıyorlar. Yine, bunlarla Ctrl + Shift + Enter tuşlarından herhangi birini yapmanıza gerek yoktur. Excel'de sumproduct'ın çalışma şeklinden yararlanarak, dizi işlemlerini taşıma ihtiyacını karşılayabiliriz, ancak bunu bir dizi formülü olmadan yaparız. Umarım dışarıdaki biri bu önerilen sumproduct çözümlerinin güzelliğini, sadeliğini ve zarafetini benim kadar takdir edebilir. Yine de yukarıdaki çözümlerin bellek verimliliğini onaylamıyorum. Sadece basit olmaları, güzel görünmeleri, amaçlanan amaca yardımcı olmaları ve kullanımlarını başka amaçlara genişletecek kadar esnek olmaları :)
Bu yardımcı olur umarım!
Herşey gönlünce olsun!
Bu sorunun eski olduğunu biliyorum, ancak verilen cevaplardan memnun değilim.
LOOKUP, DÜŞEYARA ve YATAYARA performans sorunları içerir ve gerçekten asla kullanılmamalıdır.
Dizi işlevlerinin çok fazla ek yükü vardır ve ayrıca performans sorunları da olabilir, bu nedenle yalnızca son çare olarak kullanılmalıdır.
Veriler bitişik olarak boş değilse COUNT ve COUNTA sorunla karşılaşır, yani boşluklarınız varsa ve ardından söz konusu aralıkta tekrar verileriniz olur
DOLAYLI uçucudur, bu nedenle yalnızca son çare olarak kullanılmalıdır
OFFSET uçucudur, bu nedenle yalnızca son çare olarak kullanılmalıdır
olası son satır veya sütuna yapılan başvurular (örneğin, Excel 2003'teki 65536. satır) sağlam değildir ve fazladan ek yüke neden olur
Bu benim kullandığım şey
veri türü karıştırıldığında: =max(MATCH(1E+306,[RANGE],1),MATCH("*",[RANGE],-1))
verilerin yalnızca sayı içerdiği bilindiğinde: =MATCH(1E+306,[RANGE],1)
verilerin yalnızca metin içerdiği bilindiğinde: =MATCH("*",[RANGE],-1)
MATCH en düşük ek yüke sahiptir ve uçucu değildir, bu nedenle çok fazla veriyle çalışıyorsanız, en iyisi budur.
TRUE
/ FALSE
) sahip hücreler varsa , bunlar algılanmayacaktır. Bu cevabın kesin olmamasına rağmen, yine de bu cevabın performans üzerinde en az etkiye sahip olduğunu düşünüyorum.
=INDEX(N:N,MATCH(1E+306,N:N,1))
Bu, Excel 2003'te çalışır (ve daha sonra küçük düzenlemelerle, aşağıya bakın). Bunu bir dizi formülü olarak girmek için Ctrl + Shift + Enter tuşlarına (yalnızca Enter değil) basın.
=IF(ISBLANK(A65536),INDEX(A1:A65535,MAX((A1:A65535<>"")*(ROW(A1:A65535)))),A65536)
Excel 2003 olduğunu unutmayın yapamaz bütün bir sütuna dizi formülünün uygulanması. Bunu yapmak verim sağlar #NUM!
; öngörülemeyen sonuçlar ortaya çıkabilir! (DÜZENLEME : Microsoft'tan çelişkili bilgiler: Aynı durum Excel 2007 için de geçerli olabilir veya olmayabilir ; sorun 2010'da düzeltilmiş olabilir . )
Bu yüzden dizi formülünü aralık A1:A65535
ve son hücreye özel bir muamele vermek için uyguluyorum, ki bu A65536
Excel 2003'te. Sadece söyleyemez A:A
ya da A1:A65536
ikincisi otomatik olarak döndüğü gibi bile olamaz A:A
.
A65536
Boş olduğundan kesinlikle eminseniz , IF
bölümü atlayabilirsiniz :
=INDEX(A1:A65535,MAX((A1:A65535<>"")*(ROW(A1:A65535))))
Excel 2007 veya 2010 kullanıyorsanız, son satır numarasının 65536 değil 1048576 olduğunu unutmayın, bu nedenle yukarıdakileri uygun şekilde ayarlayın.
Verilerinizin ortasında boş hücre yoksa, daha basit olan formülü kullanırdım =INDEX(A:A,COUNTA(A:A))
.
=INDEX(19:19,COUNTA(19:19))
Muhtemelen dizi formülleri olmayan alternatif bir çözüm, daha sağlam ve daha dizi formülleri olmayan çözelti, bir (a ipucu) ile bir önceki yanıt , bir
=INDEX(A:A,INDEX(MAX(($A:$A<>"")*(ROW(A:A))),0))
Bu yanıtı örnek olarak görün . Bu sorunun çözülmesine yardımcı olan Brad ve Barry Houdini'ye şeref .
Dizi olmayan bir formülü tercih etmenin olası nedenleri aşağıda verilmiştir:
Resmi bir Microsoft sayfası ("Dizi formüllerini kullanmanın dezavantajları" na bakın).
Dizi formülleri büyülü görünebilir, ancak bazı dezavantajları da vardır:
A
oluşumları bir ile değiştirdim D
. Neyi yanlış yapıyorum?
Sütun (A) 'da arama yaparsanız şunu kullanın:
=INDIRECT("A" & SUMPRODUCT(MAX((A:A<>"")*(ROW(A:A)))))
Aralığınız A1: A10 ise şunları kullanabilirsiniz:
=INDIRECT("A" & SUMPRODUCT(MAX(($A$1:$A10<>"")*(ROW($A$1:$A10)))))
bu formülde:
SUMPRODUCT(MAX(($A$1:$A10<>"")*(ROW($A$1:$A10))))
son boş olmayan satır numarasını döndürür ve dolaylı () hücre değerini döndürür.
=INDEX(A:A, COUNTA(A:A), 1)
buradan alındı
=MATCH("*";A1:A10;-1)
metin verileri için
=MATCH(0;A1:A10;-1)
sayısal veriler için
Ive tüm uçucu olmayan sürümleri denedim ama yukarıda verilen bir sürüm işe yaramadı .. excel 2003 / 2007güncelleme. Elbette bu excel 2003'te yapılabilir. Dizi veya standart formül olarak değil. Ya sadece boş, 0 veya # değer hatası alıyorum. Bu yüzden uçucu yöntemlere başvurdum .. Bu işe yaradı ..
= ARA (2,1 / (T4: T369 <> ""), T4: T369)
@Julian Kroné .. ";" kullanarak yerine "," ÇALIŞMAZ! Sanırım MS excel değil Libre Office mi kullanıyorsunuz? LOOKUP o kadar sinir bozucu derecede belirsiz ki, onu yalnızca son çare olarak kullanıyorum
Bu kodu bir VBA modülüne yerleştirin. Kayıt etmek. İşlevler altında, Kullanıcı tanımlı Bu işlevi arayın.
Function LastNonBlankCell(Range As Excel.Range) As Variant
Application.Volatile
LastNonBlankCell = Range.End(xlDown).Value
End Function
metin verileri için:
EQUIV("";A1:A10;-1)
sayısal veriler için:
EQUIV(0;A1:A10;-1)
Bu size seçilen aralıktaki boş olmayan son hücrenin göreli dizinini verir (burada A1: A10).
Değeri almak istiyorsanız, mutlak hücre referansını metinsel olarak oluşturduktan sonra DOLAYLI üzerinden erişin, örneğin:
INDIRECT("A" & (nb_line_where_your_data_start + EQUIV(...) - 1))
Ben de aynı sorunu yaşadım. Bu formül aynı zamanda eşit derecede iyi çalışır: -
=INDIRECT(CONCATENATE("$G$",(14+(COUNTA($G$14:$G$65535)-1))))
14 saymak istediğiniz satırlardaki ilk satırın satır numarasıdır.
Kronik Pençe Dişi
Arada boş hücre olmayacağını biliyorsanız, en hızlı yol budur.
=INDIRECT("O"&(COUNT(O:O,"<>""")))
Yalnızca boş olmayan hücreleri sayar ve uygun hücreye başvurur.
Belirli bir aralık için de kullanılabilir.
=INDIRECT("O"&(COUNT(O4:O34,"<>""")+3))
Bu, O4: O34 aralığındaki son boş olmayan hücreyi döndürür.
W5ALIVE'dan gelen yanıtın, bir sütundaki son veri satırını bulmak için kullandığıma en yakın olduğunu düşünüyorum. Sütun A'daki verilere sahip son satırı aradığımı varsayarsak, daha genel arama için aşağıdakileri kullanırdım:
=MAX(IFERROR(MATCH("*",A:A,-1),0),IFERROR(MATCH(9.99999999999999E+307,A:A,1),0))
İlk MATCH son metin hücresini bulacaktır ve ikinci MATCH son sayısal hücreyi bulacaktır. EĞERHATA işlevi, ilk KAÇINCI tüm sayısal hücreleri bulursa veya ikinci eşleşme tüm metin hücrelerini bulursa sıfır döndürür.
Temel olarak bu, W5ALIVE'ın karma metin ve sayı çözümünün küçük bir varyasyonudur.
Zamanlamayı test ederken, bu, eşdeğer ARA varyasyonlarından önemli ölçüde daha hızlıydı.
Bu son hücrenin gerçek değerini döndürmek için, dolaylı hücre referansını şu şekilde kullanmayı tercih ederim:
=INDIRECT("A"&MAX(IFERROR(MATCH("*",A:A,-1),0),IFERROR(MATCH(9.99999999999999E+307,A:A,1),0)))
Sancho.s tarafından sunulan yöntem belki daha temiz bir seçenektir, ancak satır numarasını bulan kısmı buna göre değiştirirdim:
=INDEX(MAX((A:A<>"")*(ROW(A:A))),1)
tek fark, ", 1" ilk değeri döndürürken ", 0" değer dizisinin tamamını döndürmesidir (biri hariç tümü gerekli değildir). Hücreyi burada indeks işlevine yönlendirmeyi, başka bir deyişle hücre değerini şu şekilde döndürmeyi tercih ediyorum:
=INDIRECT("A"&INDEX(MAX((A:A<>"")*(ROW(A:A))),1))
Harika iş parçacığı!
Dizileri kullanmaktan korkmuyorsanız, aşağıdaki problemi çözmek için çok basit bir formül:
= TOPLA (EĞER (A: A <> "", 1,0))
Bu bir dizi formülü olduğundan CTRL + ÜST KRKT + ENTER tuşlarına basmalısınız.
Benim için çalışan basit bir tane:
=F7-INDEX(A:A,COUNT(A:A))
Tamam, soruyu soranla aynı sorunu yaşadım ve her iki en iyi yanıtı da denedim. Ama sadece formül hataları alıyorum. "," İle ";" değiştirmem gerektiği ortaya çıktı. formüllerin çalışması için. XL 2007 kullanıyorum.
Misal:
=LOOKUP(2;1/(A:A<>"");A:A)
veya
=INDEX(A:A;MAX((A:A<>"")*(ROW(A:A))))
Sürüm izleme için (sayının başına v harfini ekleyerek), bunun Xcelsius'ta (SAP Dashboards) iyi çalıştığını buldum
="v"&MAX(A2:A500)