EXCEL TOOLS
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
[code]
และปิดด้วย [/code]
ตัวอย่างเช่น [code]dim r as range[/code]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)ปกติ Range Name สามารถสร้างเป็น Array ได้อยู่แล้วครับ แต่เราไม่สามารถใช้สูตร Array ในการสร้าง Range Name หรือ Data Validationbank9597 wrote:เนื่องจากผมได้สร้าง RangeName แบบ อาร์เรย์ ทำให้การทำงานของโปรแกรมช้าลงทันที ทั้งๆที่ข้อมูลมีปริมาณน้อย
อ่อครับปกติ Range Name สามารถสร้างเป็น Array ได้อยู่แล้วครับ
Code: Select all
=INDEX(Sheet1!$A:$A,MATCH(CHAR(255),Sheet1!$A:$A)):INDEX(Sheet1!$A:$A,MATCH(INDEX(Sheet1!$B:$B,MATCH(CHAR(255),Sheet1!$A:$A))-5,Sheet1!$B:$B,0))
สูตรนี้แม้จะอ้างทั้งคอลัมน์หรือทั้ง Worksheet ก็สามารถทำงานได้เร็วเพราะไม่มีสภาพเป็น Volatile ความช้าหรือเร็วอยู่ที่ฟังก์ชั่น Match ไม่ได้ขึ้นกับฟังก์ชั่น Index สำหรับฟังก์ชั่น Match ที่นำมาใช้กับสูตรนี้เป็นการ Match แบบ Binary Search ไม่ใช่เป็นแบบ Extract Match (แบบตรงตัว) จึงทำงานได้เร็วมากbank9597 wrote:สูตร =Sheet1!$A$2:INDEX(Sheet1!$A:$A,MATCH(CHAR(255),Sheet1!$A:$A)) จะอ้างอิงทั้งคอลัมน์ (ไม่ใช้ Offset ดังที่ถามไว้ข้างต้น)
นำไปใช้กับไฟล์ตัวจริงแล้วครับ ทำงานได้เร็วจริงๆ ตามที่อาจารย์ได้กล่าวไว้ครับสูตรนี้แม้จะอ้างทั้งคอลัมน์หรือทั้ง Worksheet ก็สามารถทำงานได้เร็วเพราะไม่มีสภาพเป็น Volatile ความช้าหรือเร็วอยู่ที่ฟังก์ชั่น Match ไม่ได้ขึ้นกับฟังก์ชั่น Index สำหรับฟังก์ชั่น Match ที่นำมาใช้กับสูตรนี้เป็นการ Match แบบ Binary Search ไม่ใช่เป็นแบบ Extract Match (แบบตรงตัว) จึงทำงานได้เร็วมาก