Koşul, ilk kez diğerinde ilk kez karşılandığında bir sütundan değer döndürecek formül


0

Örnek:

Dört sütunlu bir elektronik tablo verilir - A, B, C ve D ve satır 1 bir başlık satırıdır ...

A2 = 1
B2 = (Rastgele pozitif tamsayı)
C2 = (Başka bir rasgele pozitif tamsayı)

A3 = A2 + 1
B3 = B2-C2
A4 = A3 + 1
B4 = B3-C2

...

D2 problem hücresidir. D2'de, B sütununda <= 0 olan bir değerin ilk örneğiyle eşleşen A sütununun değerini döndürmek istiyorum.

görüntü tanımını buraya girin

Yanıtlar:


1

Paul'un cevabına benzer şekilde ben kullanırdım IndexveMatch

=INDEX($A:$A,MATCH(0,$B:$B,-1)+1)
  1. Tüm sütunları kullanın, böylece sütundaki veri miktarının ayarlanması gerekmez.
  2. Kullanım Indexyerine Offsetberi Offsetuçucu ve Indexdeğildir. (Uçucu işlevler her sayfa hesaplamasında yeniden hesaplanırken, uçucu işlevler yalnızca başvurulan veri değişikliği sırasında yeniden hesaplanır. Çok fazla uçucu işlev Excel'i yavaşlatabilir.)

Uçucu ve uçucu olmayanların burada neden alakalı olduğundan emin değilim. Biraz daha açıklayabilir misiniz?
Iszi

Bunun nedeni, bir sayfadaki birçok gönüllü işlev yeniden hesaplama işlemini yavaşlatmasıdır.
Chris Neilsen,

Ben de öyle düşündüm ama başka bir sebep olup olmadığını merak ediyordum. Bu, verilen seçeneklerin en çok yönlü olduğunu gösteriyor ve benim için çalışıyor. Teşekkürler!
Iszi

Eğer MAÇ ilk değerle olmak istiyorsan <0 o zaman bu her zaman işe, 0'a B4 değiştirmeyi deneyin sanmıyorum ..... bu alternatif sürümün çalışması gerekir =INDEX($A1:$A100,MATCH(TRUE,INDEX($B1:$B100<=0,0),0))- bu da B sütunu varlık dayanmaz sıralanmamış
barry houdini

@ barryhoudini Belki ayrı bir cevap olarak önerebilir ve biraz daha açıklama verebilir misiniz? Örneğin, TRUE'yi MATCH için bir argüman olarak kullanmanızla karıştırıldım. Ayrıca, hücre referansları hala chris'in örneğinde olduğu gibi tüm sütunlarda olmalıdır - veri setimin boyutu değişecektir.
Iszi

1

İhtiyacınız olanı elde etmek için MATCH kullanabilirsiniz.

MATCH(0,B2:B6,-1)+1B2:B6sayıya eşit veya daha düşük olan ilk değeri aramaya bakar 0ve bağıl konumunu döndürür. Sıfırdan dizine alınır, bu nedenle dizininize uygun olanı ekleriz.

Sıfırdan indekslenen, B2 sırasının 0, B3'in 1, B4'in 2 ve B5'in 3 olduğu anlamına gelir. Yani MATCH "3" değerini geri döndürür.

A sütununda kendi dizininiz var ve bu sıralı değilse veya başka değerler içeriyorsa veya 1'den başlamazsa, bunu elde etmek için ofset kullanabilirsiniz:

=OFFSET(A2,MATCH(0,B2:B6,-1),0)

Bu, bu sıra pozisyonunda değeri bulmak için A2'den geriye doğru saymak için MATCH sonucunu kullanıyor.


0

Bunu sadece B2 ve C2 kullanarak hesaplayamaz mısın?

=CEILING(B2/C2,1)+1

Chris'in cevabındaki yorumuma göre - güncellenmiş sürüm

=INDEX($A:$A,MATCH(TRUE,INDEX($B:$B<=0,0),0))

Bu, ilk değer <= 0 olduğunda, Chris'in önerisindeki doğal sorunu yanlış değere almanızı önler.

Parça , ilk önce <0 B sütunu ile birlikte başlayan ilk değer $B:$B<0olan bir "dizi" döndürür , ardından MATCH bu ilk örneğin konumunu bulur ve INDEX daha sonra A sütunundan karşılık gelen değeri alır.TRUE/FALSETRUE

İkinci INDEX sadece "dizi girişinden" kaçınmak için var - onsuz çalışıyor, yani

=INDEX($A:$A,MATCH(TRUE,$B:$B<=0,0))

....... ancak bu versiyonun "dizi girildi" - yani onaylanmış olması gerekir CTRL+SHIFT+ENTER.

Tüm sütunları kullanarak (ve Excel 2003 ya da önceki sürümlerinde çalışmaz - bu sürümlerde belirli bir aralık kullanmanız gerekir), önceki önerilerden biraz daha verimsizdir.

Chris'in önerisine göre -1 "eşleşme türüne" sahip MATCH'nin B sütununda azalan değerlere sahip olması gerektiğini unutmayın - bu formül çalışır ancak B sütunu sipariş edilir.


Yol çalışması etrafında verilen problemin. Bunu bazı uygulamalar için kullanabilirim, ancak bununla ilgili sorunun bir kısmı verilen örneğin dışında kalıyor - gerçek elektronik tabloda, düşüş belirli bir noktadan sonra değişiyor. Bu yüzden gerçekten "ilk negatif bul" etkisini elde etmem gerekiyor.
Iszi

Ayrıca, gerçek elektronik tabloda, geri döndürülmesini istediğim veriler sayısal değil. Dikkatimi, gelecekteki sorular sorarken aklımda tutmam gereken temel detaylara verdiğiniz için teşekkür ederiz.
Iszi

Tamam, özür dilerim, çok zeki olmaya çalışıyorum :( - Chris'in cevabına bir yorum gönderdim .....
barry houdini
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.