Bir IF formülünü kısaltmak için çözüm mü arıyorsunuz


9

Aşağıdaki yapıya sahip uzun bir formülüm var:

=IF(!X!<>0,!X!+A1,"")

nerede ! X! çok uzun bir formüldür.

! X! Tekrarını önlemek için herhangi bir çözüm var mı? iki defa? İki nedenden dolayı ihtiyacım var:

  1. Formülü sayfanın kullanıcısı için okunabilir yapmak
  2. İşlem süresini azaltmak

Herhangi bir yardım için teşekkür ederim.

Teşekkürler, Dio


1
isterseniz To reduce the process time, sonucu açıkça bir yerde saklamanız gerekir, aksi takdirde koşul eşleştiğinde Excel'in değeri yeniden hesaplaması gerekir. Bölünme de çok maliyetli bir işlemdir
phuclv

2
Sadece merak ediyorum, uzun formülü olabildiğince aşağı "golf" yaptınız mı? Daha kısa yapmak için belki adlandırılmış aralıklar ekleyebilirsiniz?
BruceWayne

Uzun bir formülü daha okunabilir hale getirmek için, alt + return tuşlarını kullanarak bağımsız değişkenleri farklı satırlara ayırın. Tek dezavantajı, kullanıcı formül çubuğunun yüksekliğini genişletmedikçe, formül eksik görünüyor.
Brad Smith

Gevşek olarak ilgili: Excel'deki Boş
G-Man

Yanıtlar:


12

Başka bir yaklaşım, çift ​​inversiyon kullanmaktır :

=IFERROR(1/(1/really_long_formula)+A1,"")

Eğer really_long_formula olarak değerlendirilirse , 0 yazarsanız, sıfıra bir bölünmeyi alacak ve IFERROR()bunu yakalayacak!

Bu gereksinimi ele almanın normal yolunun (ve en iyi yolunun) yardımcı bir hücre olduğunu lütfen unutmayın .


7
bu kayan nokta bölümü nedeniyle kaybedilen hassasiyetten muzdarip olabilir
phuclv

3
@ LưuVĩnhPhúc Tamamen haklısın ! AFH yaklaşım en iyi yaklaşımdır!
Gary'nin Öğrencisi

Bu güzel, pis bir numara. Bunu kullanmaktan çok kaçınırdım, ama son çare olarak kim bilir?
André Chalella

3
NOT: bazı hassas kayıplar olabileceği doğrudur , ancak nadiren ilgili bir sorun olacaktır. 1/1/xExcel'de 100.000 rasgele sayıyla birkaç kez test ettim ve zamanın sadece% 1.4'ü bir yuvarlama hatası vardı. Bulduğum maksimum göreceli hata 1.6e-16 idi, ki bu da etkili bir şekilde sıfır. Ayrıca, ilginç bir şekilde, tamsayılar hiçbir zaman yuvarlama hataları göstermedi (0 ile 1e14 arasında birkaç aralığı test etti). Bu nedenle, bu cevap saflık / temizlik açısından açılabilir, ancak pratik bir hesaplama bakış açısından değil.
André Chalella

1
Gary'nin çözümünü en iyi buldum. Birincisi temiz olduğu için (André tarafından da belirtildiği gibi) ve diğer kullanıcılar tarafından okunabilir. İkincisi, çünkü ihtiyacımı karşılıyor. Karmaşık veya uzun tamsayılarım yok. Umarım bu yaklaşımı seçen kullanıcılar, bu çözümün avantajları ve dezavantajları hakkında uyarılmak için yorumları okurlar.
Dio

23

Açık cevap, formülü bir çalışma hücresine, ana sayfadan uzağa koymaktır. Örneğin, kullanıyorsanız H1, şu şekilde ayarlayın:

=!X!

Formülünüz şu şekilde olur:

=IF(H1<>0,H1+A1,"")

Bu, herhangi bir programlama dilinde ne yapacağının tipik bir örneğidir.


Yardım sütunu ekleme imkanım yok. Yine de teşekkürler.
Dio

2
@Dio görülmemesi gerekiyorsa, sütunu gizleyin. Okumayı kolaylaştırmak için sütun / aralığı bile adlandırabilirsiniz
Phuclv

4
@Dio - Tamam. Kabul ettiğiniz yanıt oldukça zekidir, ancak yuvarlama nedeniyle , özellikle de tamsayı verileriyle uğraşıyorsanız, doğruluğu kaybedebileceğinizi ( 1/(1/x)her zaman tam olarak aynı değildir x) unutmayın. Aynı zamanda daha genel olarak uygulanamaz (örneğin sıfırdan daha az olup olmadığını kontrol etmek). (Yorum @ LưuVĩnhPhúc ile kabul edildi cevabında geçti.)
AFH

Tavsiyeniz ve yorumlarınız için teşekkürler. Hala yeni öneriler olup olmadığını görmek için soruyu hala açık bırakacağım.
Dio

2
Uzun formülü görmek faydalı olacaktır. Bir çalışma hücresinin yanı sıra, formül içeren bir çalışma sayfasında bir ad tanımlamak mümkündür
datatoo

3

Sonuçta ""yanlış durumda olmak için gerçekten ihtiyacınız var mı? Hücrenin yalnızca boş görünmesi gerekiyorsa (örneğin =ISNUMBER(), daha sonra böyle bir şey kullanmayacaksınız ), içeriği yanlış durumda gizlemek için koşullu biçimlendirme kullanabilirsiniz .

Hücreye hiçbir şey görüntülememesi için uygulayacağınız koşullu biçim , özel biçimdir "", örneğin (Portekizce'dir, ancak fikri anlarsınız):

boş hücreler için özel biçim

Hücredeki formül, beklendiği gibi basit olacaktır =!X!+A1.

Koşullu biçimlendirme formül olabilir olmak =!X!=0, ama bu tekrar hesaplanmasını zorlayacaktır !X!size (sizin "Noktası 2") istemiyoruz, hangi. Kullanarak =B1=A1(hücrenin B1 olduğunu varsayalım) kullanarak hücrenin kendisini kullanmak daha iyidir !X! = 0.

Hücre içeriğinin gerçekten olması gerekiyorsa bile "", genellikle bu yaklaşımın kullanılabilmesi için çalışma sayfasında küçük değişiklikler yapılabilir. Durum buysa, durumu açıklayan bir yorum bırakın.


1

Yardım sütunu ekleme imkanım yok. Yine de teşekkürler.

Yardımcı sütun ekleyemiyorsanız neden çalışma sayfasının tamamını eklemiyorsunuz? Bunun birkaç avantajı vardır:

  • Yardımcı hücreniz, ayrı bir çalışma sayfasında olduğu için kullanılabilecek başka yer kaplamaz.
  • Sen edebilirsiniz hücreyi isim daha sonra adı, örneğin bunu ele=IF(X<>0,X+A1,"")
  • Bunu birden fazla hücrede yapmanız gerekiyorsa, şunları yapabilirsiniz:
    1. Yardımcı çalışma sayfasını "yardımcı" olarak yeniden adlandırın
    2. Yardımcı denklemi ana denklemle aynı hücreye yerleştirin (diyelim D5.
    3. Hücreyi helper!D5ana sayfadaki gibi adresleyin.
  • Gerekirse yardımcı sayfayı gizleyebilirsiniz.
  • İki kez değerlendirmekten daha hızlıdır.
  • Hassasiyeti kaybetmez.

Görebildiğim dezavantajlar:

  • Bunun sheetname!D5yerine ana sayfada adsız hücrelere başvurmak zorundasınız D5.
  • Şimdi formül bir yerine iki parça halinde.
  • Çalışma sayfası çoğalması.

Avantajları ve dezavantajları tartmak, birçok kullanım durumunda bunun iyi bir çözüm olduğunu düşünüyorum. Şu anda herhangi bir şey düşünemesem de, optimal olmayan durumlar var.


1
Mükemmel cevap. Gördüğüm dezavantajlar şunlardır: 1. Büyük formül artık gizlendiğinden, hesaplamayı kullanıcı için daha basit hale getirmede çok yardımcı olmuyor . 2. Birçok çalışma kitabı zaten yapraklarla dolu. Gizleseniz bile, gizlemek için birçok gizli sayfadan geçmeniz gerekebilir. Bunun dışında iyi bir çözüm.
André Chalella

@ AndréNeves Bunun için teşekkürler! İlki bana geldi, ama dezavantajlar bölümünü yazarken unutmuşum .
wizzwizz4

1

henüz önerilmeyen bir seçenek, kullanıcı tanımlı bir işlev oluşturmaktır. Menü çubuğundaki (google) geliştirici sekmesini açmanız ve bir modül oluşturmanız gerekir.

 public function udf_myCalc(ValueToAdd as double)
    dim myvar as double
    dim udf_myCalc as double
    myvar = .. put the logic of !X! in here

    if myvar<>0 then 
        udf_myCalc = myvar + ValueToAdd
    else
        udf_myCalc = ValueToAdd
    end if
 end function

Formül çubuğunda,

=udf_myCalc(A1)

NOT: Bu artık bir .xlsx (Makrolar içeren) dosyası haline gelir ve makrolar kötü amaçlı amaçlarla kullanılabileceğinden ve bazı e-posta filtreleri bunları engelleyeceğinden şirket ağında ek izinlere ihtiyaç duyabilir. Fonksiyonlar belgelenmemiştir, bu nedenle işlevlerinizin ne yaptığına dair notlar vermeniz gerekecektir ve yerleşik bir işlev olmadığının açık olması için tüm işlevlerimi udf_xxxxx olarak çağırmayı yararlı buluyorum.

UDF'li başka GOTCHA'lar da var. Bazı iyi ipuçları için bu bağlantıya bakın http://www.decisionmodels.com/calcsecretsj.htm

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.