สมมติว่าฉันมีสตริงข้อความเหมือน"11+5"
หรือแม้กระทั่ง"=11+5"
เก็บไว้ในเซลล์ มีฟังก์ชันใน Excel ที่จะอนุญาตให้ฉันประเมินสตริงนั้นเสมือนว่าเป็นสูตรหรือไม่
สิ่งนี้จะเป็นประโยชน์สำหรับโครงการอื่นที่ฉันต้องการเขียนสูตร 'ไดนามิก' ใน Excel
สมมติว่าฉันมีสตริงข้อความเหมือน"11+5"
หรือแม้กระทั่ง"=11+5"
เก็บไว้ในเซลล์ มีฟังก์ชันใน Excel ที่จะอนุญาตให้ฉันประเมินสตริงนั้นเสมือนว่าเป็นสูตรหรือไม่
สิ่งนี้จะเป็นประโยชน์สำหรับโครงการอื่นที่ฉันต้องการเขียนสูตร 'ไดนามิก' ใน Excel
คำตอบ:
EVALUATE
สามารถใช้ได้ใน VBA ในทุกรุ่นปัจจุบัน
คุณสามารถรวมไว้ในรหัส VBA ของคุณหรือตัดเป็น UDF อย่างง่ายเพื่อให้สามารถใช้งานได้ในฟังก์ชั่นแผ่นงาน
Function ev(r As Range) As Variant
ev = Evaluate(r.Value)
End Function
โดยทั่วไปจะถือว่าค่าของพารามิเตอร์ที่ส่งผ่านเป็นสูตร Excel เช่นเดียวกับถ้ามันถูกป้อนในเซลล์
"11+5"
และ"=11+5"
จะให้ผลลัพธ์เดียวกัน
=evaluate(put_reference[s]_here)
นี่คือ semifunction - มันสามารถเท่านั้นที่จะใช้ในชื่อผู้จัดการ
นี่คือวิธีที่คุณสามารถใช้:
ชี้ไปที่เซลล์และคุณเปิดตัวจัดการชื่อ (จากแท็บสูตรหรือด้วยการคลิก CTRL + F3)
เขียน=evaluate(
และคลิกที่เซลล์ที่คุณต้องการ (ที่ดีที่สุดในการอ้างอิงอ้างอิง)
)
eva
) ทีนี้สมมติว่าคุณเลือก B1 แล้วอ้างถึง A1 ทั้งหมด ใน A1 คุณสามารถใส่ " 1 + 1 " และใน B1 คุณเขียน=eva
- เมื่อคุณตีได้ ENTER ค่า B1 2
จะ เนื่องจากการอ้างอิงในตัวจัดการชื่อนั้นสัมพันธ์กันคุณสามารถใช้=eva
เพื่อรับการประเมินผลของเซลล์ใด ๆ ที่เหลือจากที่คุณต้องการ (เช่นใน B2 =eva
จะส่งคืนผลลัพธ์ของเซลล์ A2)
=auswerten(...)
มีข้อแม้ที่สำคัญพร้อมคำตอบที่ยอดเยี่ยมจาก @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),)
=indirect()
ถ้าคุณใช้สิ่งนี้ในเซลล์ (ข้างๆ concatenate) มันจะมีประโยชน์มาก
ตัวอย่างเช่นสูตรนี้จะแสดงค่าของเซลล์ B5 ในแผ่นงานอื่น (ชื่อที่เก็บไว้ในเซลล์ A2 บนแผ่นงานนี้):
=INDIRECT(CONCATENATE(A2,"!B5"))
ในการทำให้ INDIRECT ทำงานต้องเปิดเวิร์กชีทภายนอก