Hàm Excel đánh giá một chuỗi như thể nó là một công thức?


26

Giả sử tôi có một chuỗi văn bản như "11+5"hoặc thậm chí "=11+5"được lưu trữ trong một ô. Có một hàm nào trong Excel sẽ cho phép tôi thực sự đánh giá chuỗi đó như thể nó là một công thức không?

Điều này sẽ hữu ích cho một dự án khác nơi tôi muốn có thể viết các công thức 'động' trong Excel.


3
excel có hàm EVALUATE () thực hiện chính xác điều này. Đó là một thời gian dài trước đây, và tôi không chắc chắn về excel mới. Sẽ chọc xung quanh và xem nếu tôi có thể tìm thấy một cái gì đó tương đương.
aCuria

1
Hàm đó nghe có vẻ quen thuộc, nhưng tôi chắc chắn không thể tìm thấy nó trong Excel2007, đây là thứ tôi đang sử dụng.
drapkin11

Tôi không thể tìm thấy nó = /
aCuria

Câu trả lời:


26

EVALUATE có sẵn trong VBA trong tất cả các phiên bản hiện tại

Bạn có thể đưa nó vào mã VBA của bạn hoặc bọc nó vào một UDF đơn giản để làm cho nó có sẵn dưới dạng hàm bảng tính

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

Về cơ bản, nó xử lý giá trị của tham số đã truyền dưới dạng công thức Excel, giống như khi nó được nhập vào một ô

"11+5""=11+5"sẽ tạo ra kết quả tương tự


1
Tôi đã quên tất cả về các hàm do người dùng định nghĩa trong Excel - cảm ơn.
drapkin11

Tôi đã thực hiện một sửa đổi nhỏ khi thay đổi tham số Range thành String và nó hoạt động tốt với tôi. cảm ơn
Makah

17
=evaluate(put_reference[s]_here)

Đây là một semif - nó chỉ có thể được sử dụng trong Trình quản lý tên.

Đây là cách bạn có thể sử dụng nó:

  • Trỏ tới một ô và bạn mở Trình quản lý tên (Từ tab FORMULAS hoặc bằng cách nhấp vào CTRL + F3)

    Đánh giá ví dụ

  • Viết =evaluate(và nhấp vào ô bạn muốn (tốt nhất để giữ tham chiếu tương đối).

  • Kết thúc công thức với )
  • Đặt cho nó một TÊN - (trong ví dụ này tôi sẽ chỉ gọi nó eva).
  • Nhấn OK .

Bây giờ, giả sử rằng bạn đã chọn B1 và ​​thực hiện tất cả điều này đề cập đến A1. Trong A1, bạn có thể đặt " 1 + 1 " và trong B1 bạn viết =eva- một khi bạn nhấn ENTER, giá trị B1 sẽ là 2. Vì tham chiếu trong Trình quản lý tên là tương đối, bạn có thể sử dụng =evađể đánh giá bất kỳ ô nào còn lại từ nơi bạn muốn. (ví dụ: trong B2, =evasẽ trả về kết quả của ô A2)


1
Rất tốt - và tốt đẹp để biết. Nó thậm chí hoạt động cho một cột trong bảng: = EVALUATE (Tablename [@ [cột]]) Một cái gì đó bạn không thể tìm thấy trong Hướng dẫn nâng cao hoặc trợ giúp Excel dễ dàng nhất
Paschi

1
... và như thường lệ với các công thức excel, nếu bạn sử dụng bản dựng được bản địa hóa, bạn cần sử dụng hàm được bản địa hóa - ví dụ: trong Excel 2016 DE được gọi là=auswerten(...)
kiwiwings

6

Có một cảnh báo quan trọng với câu trả lời tuyệt vời từ @karel và @Laurentiu Mirica: chức năng đánh giá sẽ không tính toán lại trừ khi các ô được tham chiếu thay đổi. Ví dụ, ô C1 chứa văn bản "A1+B1"và D1 chứa hàm =eval. Nếu các giá trị trong A1 hoặc B1 thay đổi, ô D1 không được tính toán lại .

Trình diễn vấn đề tệ nạn

Điều này có thể được sửa chữa bằng cách đưa một hàm dễ bay hơi vào trong chuỗi hoặc ô eval. Điều này sẽ buộc tính toán lại mỗi lần tính toán lại. Ví dụ, ô C1 có thể được thay thế bằng =if(today(),"A1+B1",). Hoặc, D1 có thể được thay thế bằng =if(today(),eval,). Bất kỳ chức năng dễ bay hơi nên làm.

Giải pháp thứ ba và có lẽ đơn giản nhất là thay đổi chức năng bán trong trình quản lý tên thành =if(today(),evaluate(c1),)


Cảm ơn tôi đã tìm kiếm một mẹo như thế này trong một thời gian :)
Ben Personick

4
=indirect()

nếu bạn sử dụng cái này trong một tế bào (cùng với concatenate) thì nó có thể rất hữu ích.

Ví dụ: công thức này sẽ hiển thị giá trị của ô B5 trên một trang tính khác (tên của nó được lưu trữ trong ô A2 trên trang tính này):

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

Để làm cho INDIRECT hoạt động, bảng tính bên ngoài phải được mở.


Không hoạt động, trả về #REF
SIslam

9
INDIRECT có thể thực hiện toán học và các hàm, nhưng chỉ là một phần của việc tạo tham chiếu ô. Nó không thể được sử dụng theo nghĩa chung được hỏi trong câu hỏi.
fixer1234
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.