ฟังก์ชั่น Excel ที่ประเมินสตริงราวกับว่ามันเป็นสูตรหรือไม่


26

สมมติว่าฉันมีสตริงข้อความเหมือน"11+5"หรือแม้กระทั่ง"=11+5"เก็บไว้ในเซลล์ มีฟังก์ชันใน Excel ที่จะอนุญาตให้ฉันประเมินสตริงนั้นเสมือนว่าเป็นสูตรหรือไม่

สิ่งนี้จะเป็นประโยชน์สำหรับโครงการอื่นที่ฉันต้องการเขียนสูตร 'ไดนามิก' ใน Excel


3
excel มีฟังก์ชัน EVALUATE () ที่ทำสิ่งนี้ แม้ว่าจะเป็นเวลานานแล้วและฉันก็ไม่แน่ใจเกี่ยวกับ excel ใหม่ จะแหย่ไปรอบ ๆ และดูว่าฉันจะหาอะไรได้
aCuria

1
ฟังก์ชั่นนี้ฟังดูคุ้นเคย แต่ฉันไม่สามารถหามันได้ใน Excel2007 ซึ่งเป็นสิ่งที่ฉันใช้อยู่ในปัจจุบัน
drapkin11

ฉันไม่สามารถพบมัน = /
aCuria

คำตอบ:


26

EVALUATE สามารถใช้ได้ใน VBA ในทุกรุ่นปัจจุบัน

คุณสามารถรวมไว้ในรหัส VBA ของคุณหรือตัดเป็น UDF อย่างง่ายเพื่อให้สามารถใช้งานได้ในฟังก์ชั่นแผ่นงาน

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

โดยทั่วไปจะถือว่าค่าของพารามิเตอร์ที่ส่งผ่านเป็นสูตร Excel เช่นเดียวกับถ้ามันถูกป้อนในเซลล์

"11+5"และ"=11+5"จะให้ผลลัพธ์เดียวกัน


1
ฉันลืมทุกอย่างเกี่ยวกับฟังก์ชั่นที่ผู้ใช้กำหนดใน Excel - ขอบคุณ
drapkin11

ฉันทำการปรับเปลี่ยนพารามิเตอร์ Range เล็กน้อยเป็น String และใช้งานได้ดีกับฉัน ขอบคุณ
Makah

17
=evaluate(put_reference[s]_here)

นี่คือ semifunction - มันสามารถเท่านั้นที่จะใช้ในชื่อผู้จัดการ

นี่คือวิธีที่คุณสามารถใช้:

  • ชี้ไปที่เซลล์และคุณเปิดตัวจัดการชื่อ (จากแท็บสูตรหรือด้วยการคลิก CTRL + F3)

    ประเมินตัวอย่าง

  • เขียน=evaluate(และคลิกที่เซลล์ที่คุณต้องการ (ที่ดีที่สุดในการอ้างอิงอ้างอิง)

  • จบสูตรด้วย )
  • ให้ชื่อ - (ในตัวอย่างนี้ฉันจะเรียกมันว่าeva)
  • คลิกตกลง

ทีนี้สมมติว่าคุณเลือก B1 แล้วอ้างถึง A1 ทั้งหมด ใน A1 คุณสามารถใส่ " 1 + 1 " และใน B1 คุณเขียน=eva- เมื่อคุณตีได้ ENTER ค่า B1 2จะ เนื่องจากการอ้างอิงในตัวจัดการชื่อนั้นสัมพันธ์กันคุณสามารถใช้=evaเพื่อรับการประเมินผลของเซลล์ใด ๆ ที่เหลือจากที่คุณต้องการ (เช่นใน B2 =evaจะส่งคืนผลลัพธ์ของเซลล์ A2)


1
ดีมาก - และน่ารู้ มันใช้งานได้กับคอลัมน์ในตาราง: = ประเมินค่า (Tablename [@ [คอลัมน์]]) บางสิ่งที่คุณไม่สามารถหาได้ใน Excel Help- หรือแบบฝึกหัดขั้นสูงได้อย่างง่ายดาย
Paschi

1
... และตามปกติด้วยสูตร excel ถ้าคุณใช้=auswerten(...)
บิลด์ที่

6

มีข้อแม้ที่สำคัญพร้อมคำตอบที่ยอดเยี่ยมจาก @karel และ @Laurentiu Mirica: ฟังก์ชั่นการประเมินจะไม่คำนวณใหม่เว้นแต่ว่าการเปลี่ยนแปลงของเซลล์อ้างอิง ยกตัวอย่างเช่นเซลล์ C1 ประกอบด้วยข้อความ"A1+B1"และ D1 =evalมีฟังก์ชั่น หากค่าใน A1 B1 หรือการเปลี่ยนแปลงของเซลล์ D1 ไม่ได้รับการคำนวณใหม่

การสาธิตปัญหาการทดลอง

สิ่งนี้สามารถแก้ไขได้โดยการแนะนำฟังก์ชั่นการระเหยในสตริงหรือเซลล์ eval สิ่งนี้จะบังคับให้คำนวณซ้ำทุกครั้งที่มีคำนวณแผ่นงานใหม่ ยกตัวอย่างเช่นเซลล์ C1 =if(today(),"A1+B1",)จะถูกแทนที่ด้วย หรือ D1 =if(today(),eval,)จะถูกแทนที่ด้วย ฟังก์ชั่นการระเหยใด ๆ ควรทำ

วิธีที่สามและบางทีวิธีที่ง่ายที่สุดคือเปลี่ยน semi-function ใน name manager เป็น =if(today(),evaluate(c1),)


ขอบคุณที่ฉันได้รับการมองหาเคล็ดลับเช่นนี้ของและบางครั้ง :)
เบน Personick

4
=indirect()

ถ้าคุณใช้สิ่งนี้ในเซลล์ (ข้างๆ concatenate) มันจะมีประโยชน์มาก

ตัวอย่างเช่นสูตรนี้จะแสดงค่าของเซลล์ B5 ในแผ่นงานอื่น (ชื่อที่เก็บไว้ในเซลล์ A2 บนแผ่นงานนี้):

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

ในการทำให้ INDIRECT ทำงานต้องเปิดเวิร์กชีทภายนอก


ไม่ทำงานส่งคืน #REF
SIslam

9
INDIRECT สามารถดำเนินการทางคณิตศาสตร์และฟังก์ชั่น แต่เป็นเพียงส่วนหนึ่งของการสร้างการอ้างอิงเซลล์ ไม่สามารถใช้ในแง่ทั่วไปที่ถามในคำถาม
fixer1234
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.