
ดังที่บอกไปคือสามารถทำได้ทั้ง 2 แบบ ทั้งสูตร ทั้ง VBA แต่หากจะทำด้วย VBA จำเป็นต้องเขียนมาเองก่อนเสมอครับ
เบื้องต้นผมลองทำมาด้วยสูตรให้ก่อนดังนี้ครับ
ที่ชีท "รายงาน1" เซลล์ K6 คีย์ =SUM(IF(A_บิล!$C$2:$C$140<>"ยกเลิก",IF(A_บิล!$C$2:$C$140<>"",1,0)))
กด Ctrl+Shift ค้าง ตามด้วยปุ่ม Enter (จะมีเครื่องหมาย {} คร่อมสูตรไว้อัตโนมัติ)
ที่ชีท "รายงาน1" เซลล์ A7 คีย์
=IF(ROWS(A$7:A7)>$K$6,"",INDEX
(A_บิล!B$2:B$140,SMALL(IF(A_บิล!$C$2:$C$140<>"ยกเลิก",ROW(A_บิล!$C$2:$C$140)-ROW(A_บิล!$C$2)+1),ROWS(A$7:A7))))
กด Ctrl+Shift ค้าง ตามด้วยปุ่ม Enter คัดลอกไปทางขวามือถึงคอลัมน์ G
หากข้อมูลไม่ตรงกับหัวคอลัมน์ ให้ปรับชื่อคอลัมน์ให้ตรงกับข้อมูลที่เราเลือก (สีแดงในสูตรด้านบน) จากนั้นคัดลอกลงมาพร้อมกัน
ที่ชีท "รายงาน1" เซลล์ H7 คีย์ =IF(ISNUMBER(G7),G7*7%,"") คัดลอกลงมา
ที่ชีท "รายงาน1" เซลล์ I7 คีย์=IF(ISNUMBER(G7),G7+H7,"") คัดลอกลงมา
ที่ชีท "รายงาน1" เซลล์ K6 คีย์ =SUM(IF(รายงาน1!$A$7:$A$150>=G2,IF(รายงาน1!$A$7:$A$150<=I2,1,0)))
กด Ctrl+Shift ค้าง ตามด้วยปุ่ม Enter
ที่ชีท "รายงาน3" เซลล์ A7 คีย์ =IF(ROWS($A$7:A7)>$L$2,"",INDEX(รายงาน1!A$7:A$140,SMALL(IF(รายงาน1!$A$7:$A$140>=$G$2,IF(รายงาน1!$A$7:$A$140<=$I$2,ROW(รายงาน1!$A$7:$A$140)-ROW(รายงาน1!$A$7)+1)),ROWS(A$7:A7))))
กด Ctrl+Shift ค้าง ตามด้วยปุ่ม Enter คัดลอกไปทางขวามือถึงคอลัมน์ I แล้วคัดลอกลงล่างพร้อมกัน