Veri boşluklarını doldurmak için bir Excel fonksiyonunu kodlamak


2

Excel'de şu anda aşağıdaki dağılım grafiğine ve dizilerden biri için karşılık gelen veri kümesine sahibim:

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

Şu anda sahip olduğum veri boşlukları için noktaları enterpolasyon yapmamı sağlayacak bir tür işlev yaratmaya çalışıyorum; nihai amaç, dağılım grafiği için yumuşak bir eğri oluşturmaktır. Kavramsal olarak, oluşturmaya çalıştığım işlev şu şekildedir:

Verilen:

n is an integer, x = 3 + 20n, y = 3 + 20(n + 1)    

=IF(B(3 + 20n) < cell < B(3 + 20(n+1)), add (y-x)/19 to previous value, do nothing)

Yani, 23, 43, 63, ... sütunlarında veri noktalarım var. ve önceki hücreye her kutu için benzersiz bir aralık ekleyerek boşlukları doldurmaya çalışıyorum. Bu aralık, her bir kazanın alt ve üst sınırları alınarak ve 19'a bölünerek elde edilir. Başka bir deyişle, her kutu şöyle görünmelidir:

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

Bunu yaklaşık 1000 hücre için yapmak zorundayım, bu yüzden manuel olarak yapmak sıkıcı. Tek seferde her şeyi yürütmemi sağlayacak böyle bir fonksiyonun nasıl oluşturulacağına dair rehberlik çok takdir edilecektir; Dahası, bununla ilgili daha iyi bir yol varsa, herhangi bir bilgi çok yardımcı olacaktır.

Yanıtlar:


1

İlk önce fazladan bir sütun ekleyin. Bu sütunda bu formülü kullanabilirsiniz:

=IF(MOD((ROW()-3),20)=0,B3,INDIRECT("B"&(QUOTIENT((ROW()-3),20)*20+3))+  
(INDIRECT("B"&(QUOTIENT((ROW()-3),20)*20+23))-INDIRECT("B"&  
(QUOTIENT((ROW()-3),20)*20+3)))/20*(ROW()-(QUOTIENT((ROW()-3),20)*20+3)))

Bu formül nasıl çalışır:

MOD(ROW()-3),20)=0

Bu, satırın 23,43,63 olup olmadığını kontrol eder, ... Öyleyse bitişik hücreyi alır, sonraki formül olmazsa:

INDIRECT("B"&(QUOTIENT((ROW()-3),20)*20+3))

Bu, dolaylı işlevi kullanarak, satırın geçerli satırdan az olduğu ilk hücrenin adresini ve ayrıca 23,43,63 değerini hesaplar. Geçerli satırdan 3 çıkarır ve daha sonra 20'ye bölünür ve daha düşük bir tamsayıya yuvarlar. Sonra 20 ile çarpıyor ve doğru satır numarasını almak için 3 ekliyor. Bu daha sonra istediğiniz hücrenin adresini oluşturmak için B'ye birleştirilir.

+(INDIRECT("B"&(QUOTIENT((ROW()-3),20)*20+23))-INDIRECT("B"&  
(QUOTIENT((ROW()-3),20)*20+3)))/20*(ROW()-(QUOTIENT((ROW()-3),20)*20+3))

Bu sadece formun bir interpolasyon formülüdür:

 y_int = y_start + [(y_end-y_start)/(x_end-x_start)]*(x_int-x_start)

y_start yukarıda açıkladığım oydu. O zaman neredeyse aynı olan y_end'iniz olur, bir sonraki değeri elde etmek için sadece 3 yerine 23 eklersiniz. O zaman 20'ye bölün ve bu iki değer arasındaki farktır. X_int-x_start aşağıdaki formüldür:

ROW()-(QUOTIENT((ROW()-3),20)*20+3)

Bu, mevcut satırı alır ve ondan daha düşük olan 23,43,63 .. 'ü çıkarır, y_start'ı bulmak için yaptığım yöntemi kullanarak.

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.