Fungsi Excel yang mengevaluasi string seolah-olah itu rumus?

26

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.

drapkin11
sumber
3
excel memiliki fungsi EVALUATE () ini yang melakukan ini. Itu sudah lama sekali, dan saya tidak terlalu yakin tentang excel baru. Akan melihat-lihat dan melihat apakah saya dapat menemukan sesuatu yang sama.
aCuria
1
fungsi itu terdengar familier, tapi saya jelas tidak bisa menemukannya di Excel2007, yang saat ini saya gunakan.
drapkin11
Saya juga tidak bisa menemukannya = /
aCuria

Jawaban:

26

EVALUATE tersedia di VBA di semua versi saat ini

Anda bisa memasukkannya dalam kode VBA Anda, atau membungkusnya menjadi UDF sederhana untuk membuatnya tersedia sebagai fungsi lembar kerja

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

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 sama

chris neilsen
sumber
1
Saya lupa semua tentang fungsi yang ditentukan pengguna di Excel -Terima kasih.
drapkin11
Saya melakukan modifikasi kecil mengubah parameter Range ke String dan berfungsi baik membentuk saya. terima kasih
Makah
17
=evaluate(put_reference[s]_here)

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)

    Evaluasi Contoh

  • Tulis =evaluate(dan klik pada sel yang Anda inginkan (sebaiknya simpan referensi relatif).

  • Selesaikan formula dengan )
  • Berikan NAME - (dalam contoh ini saya akan menyebutnya eva).
  • Klik OK .

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 menjadi 2. Karena referensi di Name Manager bersifat relatif, Anda dapat menggunakan =evauntuk mendapatkan evaluasi dari sel mana saja yang tersisa dari sel yang Anda inginkan. (mis. dalam B2, =evaakan mengembalikan hasil sel A2)

Laurentiu Mirica
sumber
1
Sangat bagus - dan menyenangkan untuk diketahui. Ia bahkan berfungsi untuk kolom tabel: = EVALUASI (Tablename [@ [kolom]]) Sesuatu yang tidak dapat Anda temukan di sebagian besar Bantuan Excel- atau Tutorial tingkat lanjut dengan mudah
Paschi
1
... dan seperti biasa dengan rumus excel, jika Anda menggunakan bangunan yang dilokalkan, Anda perlu menggunakan fungsi yang dilokalkan - misalnya dalam Excel 2016 DE itu disebut=auswerten(...)
kiwiwings
7

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 .

Demonstrasi masalah eval

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),)

jlear
sumber
Terima kasih, saya telah mencari trik seperti ini dan untuk beberapa waktu :)
Ben Personick
4
=indirect()

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):

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

Agar INDIRECT berfungsi, lembar kerja eksternal harus terbuka.

pengguna206351
sumber
Tidak berfungsi, mengembalikan #REF
SIslam
10
INDIRECT dapat melakukan matematika dan fungsi, tetapi hanya sebagai bagian dari membuat referensi sel. Ini tidak dapat digunakan dalam pengertian umum yang diajukan dalam pertanyaan.
fixer1234