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]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)สูตรเช่นนี้ทำงานได้จึงไม่แปลกที่จะได้คำตอบครับXcelvba wrote: Mon Dec 26, 2022 10:38 am 2.เมื่อผมใช้ =SUMIF(A1:A10,C1:C5,B1:B10 ) ได้ Arrayที่มีค่า 100
- เมื่อผมใช้ SUM / SUMPRODUCT ครอบ จะได้ค่าที่ต้องการ
ขอบคุณครับ อ. สอบถามเพิ่มเติมครับsnasui wrote: Mon Dec 26, 2022 10:55 amเทียบกันเช่นนี้ไม่ได้ครับ
หลักการเทียบคือเอาค่าเดี่ยวไปเทียบกับช่วง หากเป็นช่วงเทียบกับช่วงจะต้องใช้ช่วงที่เท่ากัน ถ้าไม่เท่ากันจะต้องใช้สูตรเข้าไปช่วย เช่น =Match(A1:A10,C1:C5,0) จะได้ 10 รายการ (เท่ากับจำนวนของ A1:A10)
สูตรเช่นนี้ทำงานได้จึงไม่แปลกที่จะได้คำตอบครับXcelvba wrote: Mon Dec 26, 2022 10:38 am 2.เมื่อผมใช้ =SUMIF(A1:A10,C1:C5,B1:B10 ) ได้ Arrayที่มีค่า 100
- เมื่อผมใช้ SUM / SUMPRODUCT ครอบ จะได้ค่าที่ต้องการ
ตัวอย่างสูตรที่ D15 ครับ
=SUMPRODUCT(($A$4:$A$11=C15)*($B$4:$AE$11)*ISNUMBER(MATCH($B$3:$AE$3,ROW(INDIRECT(SUBSTITUTE(D$13,"-",":"))),0)))
Enter > Copy ลงด้านล่าง
Xcelvba wrote: Mon Dec 26, 2022 12:04 pm AGGREGATE(15,6,ROW(A1:A10)/ISNUMBER(MATCH(A1:A10,E1:E5,0)),ROWS(I$5:I5))
ไม่ได้มีความหมายว่าให้นำค่าที่น้อยที่สุดในลำดับที่เท่านั้นเท่านี้มาแสดง แต่เป็นการนำค่าในลำดับที่เป็นผลลัพธ์ของ MATCH(A1:A10,E1:E5,0)+Rows(H5:H5) มาแสดงพร้อมกันในคราวเดียว สูตรแบบนี้ทำงานได้ใน O365 แต่จะมีค่าผิดพลาดออกมาด้วยเนื่องจากไม่ได้กันค่าผิดพลาดออกไปเหมือนกับ Aggregate
ขอบคุณ อาจารย์มาก ครับ ได้ความรู้เพิ่มมากขึ้นนิดนึงแล้วครับsnasui wrote: Mon Dec 26, 2022 12:31 pmXcelvba wrote: Mon Dec 26, 2022 12:04 pm AGGREGATE(15,6,ROW(A1:A10)/ISNUMBER(MATCH(A1:A10,E1:E5,0)),ROWS(I$5:I5))หมายถึงให้หาค่าจากช่วง ROW(A1:A10)/ISNUMBER(MATCH(A1:A10,E1:E5,0)) ที่น้อยที่สุดในลำดับที่เป็นผลลัพธ์ของ ROWS(I$5:I5) และ Aggregate จะไม่นำค่า Error มาพิจารณา
ส่วนไม่ได้มีความหมายว่าให้นำค่าที่น้อยที่สุดในลำดับที่เท่านั้นเท่านี้มาแสดง แต่เป็นการนำค่าในลำดับที่เป็นผลลัพธ์ของ MATCH(A1:A10,E1:E5,0)+Rows(H5:H5) มาแสดงพร้อมกันในคราวเดียว สูตรแบบนี้ทำงานได้ใน O365 แต่จะมีค่าผิดพลาดออกมาด้วยเนื่องจากไม่ได้กันค่าผิดพลาดออกไปเหมือนกับ Aggregate
การที่สูตรใดสามารถให้ผลลัพธ์มาเป็นค่าใดจะทราบได้จากการศึกษาความหมายและคุณสมบัติของฟังก์ชันต่าง ๆ ที่ประกอบเข้ามาเป็นสูตรนั้น ๆ ครับ