Bir dizeyi formülmiş gibi değerlendiren Excel işlevi?


26

Diyelim ki bir hücreye benzer bir "11+5"hatta bir metin dizgim var "=11+5". Excel'de bu dizeyi aslında bir formülmiş gibi değerlendirmeme izin verecek bir işlev var mı?

Bu, Excel'de 'dinamik' formüller yazmak istediğim başka bir proje için yardımcı olacaktır.


3
excel tam olarak bunu yapan EVALUATE () işlevine sahipti. Bu uzun zaman önceydi, ve yeni excel konusunda pek emin değilim. Dürtmek ve eşdeğer bir şey bulabilir miyim bir bakalım.
aCuria

1
Bu işlev tanıdık geliyor, ama kesinlikle şu anda kullandığım şey olan Excel2007'de bulamıyorum.
drapkin11

Onu ya da bulamıyorum = /
aCuria

Yanıtlar:


26

EVALUATE Mevcut tüm versiyonlarda VBA’da mevcuttur.

Çalışma sayfası işlevi olarak kullanıma sunmak için VBA kodunuza ekleyebilir veya basit bir UDF'ye sarabilirsiniz.

Function ev(r As Range) As Variant
    ev = Evaluate(r.Value)
End Function

Temelde geçirilen parametrenin değerini, bir hücreye girilmiş gibi aynı bir Excel formülü olarak ele alır.

"11+5"ve "=11+5"aynı sonucu üretecek


1
Excel'de kullanıcı tanımlı işlevler hakkında her şeyi unuttum.
drapkin11

Range parametresini String olarak değiştirerek küçük bir değişiklik yaptım ve benden hoşlandı. teşekkürler
Makah

17
=evaluate(put_reference[s]_here)

Bu bir işlevdir - yalnızca İsim Yöneticisinde kullanılabilir.

Bu nasıl kullanabilirsiniz:

  • Bir hücreye gelin ve Ad Yöneticisi'ni açın (FORMULAS sekmesinden veya CTRL + F3 tuşlarına basarak)

    Örnek değerlendirin

  • =evaluate(İstediğiniz hücreye yazın ve tıklayın (göreceli referansı tutmak en iyisidir).

  • Formülü bitirin )
  • Bir NAME verin - (bu örnekte sadece arayacağım eva).
  • Tıklayın Tamam .

Şimdi, B1'i seçtiğinizi ve tüm bunların A1'e başvurduğunu varsayalım. A1’de " 1 + 1 " yazabilirsiniz ve B1’de yazacaksınız =eva- ENTER tuşuna bastığınızda, B1 değeri olacaktır 2. Ad Yöneticisi'ndeki başvuru göreceli olduğundan, istediğiniz =evahücreden bir hücreden kalan herhangi bir hücrenin değerlendirmesini almak için kullanabilirsiniz . (örneğin B2'de, =evaA2 hücresinin sonucunu döndürür)


1
Çok iyi - ve bilmek güzel. Hatta bir tablo sütunu için bile çalışır: = DEĞERLENDİRME (Tablename [@ [column]]) En Excel Yardımında veya kolayca bulunamayan bir öğeyi kolayca bulabilirsiniz
Paschi

1
... ve her zamanki gibi excel formüllerinde olduğu gibi, eğer yerelleştirilmiş bir yapı kullanıyorsanız, yerelleştirilmiş işlevi kullanmanız gerekir - örneğin, Excel 2016 =auswerten(...)
DE'de

6

@Karel ve @Laurentiu Mirica'nın büyük cevabı ile önemli bir uyarı var: başvurulan hücre değişmediği sürece değerlendirme fonksiyonu yeniden hesaplanmaz. Örneğin, C1 hücresi metni "A1+B1"ve D1 işlevi içerir =eval. A1 veya B1'deki değerler değişirse, D1 hücresi yeniden hesaplanmaz .

Eval sorununun gösterilmesi

Bu, dizeye veya eval hücresine geçici bir işlev eklenerek düzeltilebilir. Bu, çalışma sayfası her yeniden hesaplandığında yeniden hesaplamayı zorlar. Örneğin, C1 hücresi ile değiştirilebilir =if(today(),"A1+B1",). Veya, D1 ile değiştirilebilir =if(today(),eval,). Herhangi bir geçici işlev yapmalıdır.

Üçüncüsü ve belki de en basit çözüm, isim yöneticisindeki yarı işlevi değiştirmek =if(today(),evaluate(c1),)


Teşekkürler Bir süredir bunun gibi bir numara arıyordum :)
Ben Personick

4
=indirect()

Bunu bir hücrede kullanırsanız (birleştirme işleminin yanında) çok faydalı olabilir.

Örneğin, bu formül B5 hücresinin değerini başka bir çalışma sayfasında (bu çalışma sayfasındaki A2 hücresinde adı olan) gösterir:

=INDIRECT(CONCATENATE(A2,"!B5"))

INDIRECT'in çalışması için harici çalışma sayfasının açık olması gerekir.


Çalışmaz,
#REF

9
INDIRECT matematik ve işlevleri yerine getirebilir, ancak yalnızca hücre başvurusu oluşturmanın bir parçası olarak kullanılabilir. Soruda sorulan genel anlamda kullanılamaz.
fixer1234 7:16
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.