Misalkan saya memiliki string teks suka "11+5"
atau bahkan "=11+5"
disimpan dalam sel. Apakah ada fungsi di Excel yang memungkinkan saya untuk benar-benar mengevaluasi string itu seolah-olah itu rumus?
Ini akan membantu untuk proyek lain di mana saya ingin dapat menulis rumus 'dinamis' di Excel.
microsoft-excel
worksheet-function
drapkin11
sumber
sumber
Jawaban:
EVALUATE
tersedia di VBA di semua versi saat iniAnda bisa memasukkannya dalam kode VBA Anda, atau membungkusnya menjadi UDF sederhana untuk membuatnya tersedia sebagai fungsi lembar kerja
Itu pada dasarnya memperlakukan nilai parameter yang diteruskan sebagai rumus Excel, sama seperti jika dimasukkan dalam sel
"11+5"
dan"=11+5"
akan menghasilkan hasil yang samasumber
Ini adalah semifungsi - hanya dapat digunakan di Pengelola Nama.
Ini adalah bagaimana Anda dapat menggunakannya:
Arahkan ke sel dan Anda membuka Name Manager (Dari tab FORMULAS atau dengan mengklik CTRL + F3)
Tulis
=evaluate(
dan klik pada sel yang Anda inginkan (sebaiknya simpan referensi relatif).)
eva
).Sekarang, anggaplah Anda telah memilih B1 dan membuat semua ini merujuk ke A1. Di A1 Anda bisa meletakkan " 1 +1 " dan di B1 Anda menulis
=eva
- setelah Anda menekan ENTER, nilai B1 akan menjadi2
. Karena referensi di Name Manager bersifat relatif, Anda dapat menggunakan=eva
untuk mendapatkan evaluasi dari sel mana saja yang tersisa dari sel yang Anda inginkan. (mis. dalam B2,=eva
akan mengembalikan hasil sel A2)sumber
=auswerten(...)
Ada peringatan penting dengan jawaban hebat dari @karel dan @Laurentiu Mirica: fungsi evaluasi tidak akan menghitung ulang kecuali sel yang direferensikan berubah. Misalnya, sel C1 berisi teks
"A1+B1"
dan D1 berisi fungsi=eval
. Jika nilai dalam A1 atau B1 berubah, sel D1 tidak dihitung ulang .Ini dapat dikoreksi dengan memasukkan fungsi volatil ke dalam string atau sel eval. Ini akan memaksa penghitungan ulang setiap kali lembar kerja dihitung ulang. Misalnya, sel C1 bisa diganti dengan
=if(today(),"A1+B1",)
. Atau, D1 bisa diganti dengan=if(today(),eval,)
. Fungsi volatile apa pun harus dilakukan.Solusi ketiga dan mungkin yang paling sederhana adalah mengubah semi-fungsi di manajer nama menjadi
=if(today(),evaluate(c1),)
sumber
jika Anda menggunakan ini dalam sel (di samping concatenate) itu bisa sangat berguna.
Misalnya, rumus ini akan menampilkan nilai sel B5 pada lembar kerja lain (nama yang disimpan dalam sel A2 di lembar kerja ini):
Agar INDIRECT berfungsi, lembar kerja eksternal harus terbuka.
sumber