Çok geniş bir veri aralığında bulunan bir değere CLOSEST olan bir değer döndürme


1

A1:A20Değerlerini geniş bir veri tablosunda bulmam gereken bir sütunu var .

Bu örneğin amaçları için veri tablosunun farklı olduğunu söyleyeceğim D1:Z25.

İdeal olarak, sütuntaki tam değerin Atabloda bulunup bulunmadığını bana söyleyen bir Excel formülü olacaktı ve değilse CLOSEST değerini ona geri vereceğim.

Formülü kullanabilirim

=IF(SUM(IF(D1:Z25=$A1,1,0))>=1,$A1,"")+ ctrl, shift, enterVe döner TAM bu tablo içinde bulunuyorsa, bir değer.

Sorum şu: eğer EXACT değeri tablo içerisinde değilse, CLOSEST değerini ona geri verebileceğim bir yol var mı?

Değerlerimin tam olması gerektiğinden, yuvarlama kullanmak istemiyorum.


En yakın ifadeyle, her iki yöndeki en küçük farkı mı kastediyorsunuz? Öyleyse, SMALL işlevini, hedef ve dizi değerleri arasındaki farka uygulanan ABS işlevi ile birleştirebilirsiniz. Kesin bir eşleşme varsa, sıfır farkı mümkün olan en küçük farktır. Bir çözüm geliştirmek için zamanım yok, ancak, örneğin, {=SMALL(ABS($A1-$D$1:$Z$25),1)}minimum farkı bulur, bu yüzden en kötü durum, A1 + diff ve A1-diff'in tam eşleşmesini arar.
fixer1234

EXACT değerini bulmak için bazı örnek verileri paylaşır mısınız?
Rajesh S

Yanıtlar:


0

Sorununuz için alternatif bir yol. Ne yazık ki, davanızdaki gibi 2 boyutlu dizilerde çalışmıyor. Değerlerinizi tek boyutlu bir dizi biçimine dönüştürebiliyorsanız, örneğin D1: Z575. Aşağıdaki formül istediğiniz değeri döndürür.

=INDEX(D1:Z575,MATCH(MIN(ABS(D1:Z575-A1)),ABS(D1:Z575-A1),0))

Önemli:Ctrl + Shift+ Entertuş bileşimine Enteryalnızca bu tuşla basın . Çünkü formül sadece bir dizi formülü ise işe yarar .

Mantık, fixer1234'ün yorumuna benzer şekilde, minimum farkın konumunu bulmak ve INDEX işlevinde bu konumu kullanarak değeri döndürmek içindir .

Formülün detaylı açıklaması: En yakın eşleşmeyi bulma


0

Muhtemelen bunu yapmanın daha zarif bir yolu var, ama işte en azından bir kararsız çözüm. Formül büyük hale gelir, ben de bunu parçalar halinde açıklayacağım.

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

Bunun nasıl çalıştığını göstermek istedim, bu yüzden menzili yönetilebilir tuttum. Gereksinimlerinize göre ölçeklendirin.

Veri dizim D1: F10. Ben sadece ardışık sayılarla doldurdum çünkü bu kolaydı ve gösterimi netleştirdi. Formül, tam sayıları veya belirli bir sıradaki sayıları temel almaz. Formülün çalıştığını doğrulamak için değerlerin birkaçını eşleşen değerlerin bazılarının kopyalarıyla değiştirdim.

A sütununda birkaç hedef değer vardır - biri en yakın eşleşmenin yuvarlandığı, tam eşleşmenin, en yakın eşleşmenin yuvarlandığı ve hedefin en yakın iki eşleşme arasında eşit olduğu bir eşleşme. Her sütunda bir eşleşme olması için hedef değerleri seçtim.

B sütunu, her hedef değer için dizideki en yakın eşleşmeyi içerir (çözüm).

Formül bileşenlerden oluşur, bu yüzden bu kılavuzda gösterilen bileşenleri açıklayacağım:

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

Hedef değerler, A sütununda çoğaltılır. B sütunu, hedef değer ile tablodaki en yakın değer arasındaki minimum farkı bulur. B16'daki formül:

{=MIN(ABS($D$1:$F$10-A1))}

Bu bir dizi formülüdür. Son formülün bir bileşenidir, bu yüzden son formülün girilmesi gerekir Ctrl Shift Enter.

Farkın hangi yönde olduğunu, tablodaki en yakın değerle eşleştirmek için toplama veya çıkarma işleminin gerekip gerekmediğini bilmiyoruz, bu yüzden ikisini de deneyin. Eşleştirme değerini "yuvarlama" ile bulmak için, C sütunundaki formülü kullanır. Eşleştirme değerini "yuvarlama" ile bulmak için, D sütunundaki formülü kullanır.

=SUMPRODUCT(($D$1:$F$10=A1-B16)*$D$1:$F$10)
=SUMPRODUCT(($D$1:$F$10=A1+B16)*$D$1:$F$10)

İlk parantezler doğruysa, değerlendirecek 1, aksi takdirde olacak 0. SUMPRODUCT bunu ilişkili hücre değeriyle çarpar ve sonuçları toplar.

Ancak bazı garip sonuçlar dikkat edin.

  • Birkaç hedef sıfır döndürür veya eşleşme olmaz. Diğer tarafa yuvarlayarak eşleşmenin bulunduğu durumlardır.
  • En yakın iki değer arasında ortada olan hedef, daha düşük eşleşen değer yuvarlama ve daha yüksek eşleşen değer yuvarlama döndürür. Hangisinin seçildiğine dikkat ediyorsanız, formül bileşenlerini sıralayın, böylece tercih edilen yönde yuvarlama seçilir.
  • Birkaç değer olması gerektiği gibi iki katına çıkar. Bunlar en yakın değeri kopyaladığım durumlardır; formül her birine eklenir.

Bu vakalarla başa çıkmak için kaç tane eşleşme bulunduğunu sayarız. Bu, E ve F sütunlarında yapılır:

{=SUM($D$1:$F$10=A1-B16)}
{=SUM($D$1:$F$10=A1+B16)}

Bu bileşenler aynı zamanda dizi formülleridir. E sütunundaki formül, her hücre değerinin hedef eksi ile eşit olup olmadığını değerlendirir; bu, Doğru veya Yanlış ( 1veya 0) olup, bu değerleri toplar. F sütunundaki formül, hedefe ilaveten farkı test etmesi dışında aynıdır.

Bu sonuçları iki şekilde kullanabiliriz: hangi sonucun kullanılacağını seçmek için eşleşme yok (sıfır sonuç), önceki adımda birden fazla eşleşmenin şişirilmiş değerini düzeltmek için eşleşme sayısı olarak test etmek.

En yakın eşleşmeyi bulduğumuzdan beri her zaman bir "en yakın" olacaktır, bu yüzden yukarı veya aşağı yuvarlama sıfıra gidemez. Sonuçlardan sadece birini test etmemiz gerekir. Eğer sıfırsa, diğerini kullanırız. Sıfır değilse, bu değeri kullanırız çünkü diğer değer sıfır olur, aynı olur veya testin sırasına göre seçilebilecek geçerli başka bir sonuç olur.

Seçilen geçerli sonuç için, sayım bölen olarak kullanılır. Yani sonuç için formül:

=IF(E16=0,D16/F16,C16/E16)

Demek böyle çalışıyor. Bunu tek bir konsolide formüle dönüştürmek, hücre referanslarını başvurulan hücrede bulunan formülle değiştirmekle ilgilidir. İşte birleştirilmiş formül şöyle gözüküyor (daha okunaklı hale getirmek için boşluk ve satır besleme ekleyeceğim; formülü kopyalayıp yapıştırmak istiyorsanız bunları kaldırmak isteyeceksiniz):

{=IF(SUM($D$1:$F$10=A1-MIN(ABS($D$1:$F$10-A1)))=0,  
   SUMPRODUCT(($D$1:$F$10=A1+MIN(ABS($D$1:$F$10-A1)))*$D$1:$F$10)/SUM($D$1:$F$10=A1+MIN(ABS($D$1:$F$10-A1))),  
   SUMPRODUCT(($D$1:$F$10=A1-MIN(ABS($D$1:$F$10-A1)))*$D$1:$F$10)/SUM($D$1:$F$10=A1-MIN(ABS($D$1:$F$10-A1))))}
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.