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.
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:
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ış ( 1
veya 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))))}
{=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.