Page 1 of 1
ช่วยหน่อยครับ ดึงDataจากDadaBaseมาเรียงลำดับตามอักษร ตัวเลข โดยใช้ VBA Excel
Posted: Mon Jan 15, 2018 6:34 pm
by mr_tomtom
ผมเพิ่งเริ่มจะหัดใช้ฟังก์ชั่นเกี่ยวกับ VBA EXCEL ซึ่งในงานที่รับผิดชอบมันมีข้อมูลค่อนข้างเยอะและข้อมูลจากหลายๆส่วนรวมๆกันสลับกันไปมาดังนั้นจึงต้องการที่จะดึงเอาข้อมูลต้องนั้นมาเรียงลำดับใหม่โดยใช้ VBA ช่วย ดังไฟล์แนบครับ
Re: ช่วยหน่อยครับ ดึงDataจากDadaBaseมาเรียงลำดับตามอักษร ตัวเลข โดยใช้ VBA Excel
Posted: Mon Jan 15, 2018 7:05 pm
by snasui
ผมสังเกตเห็นว่ารูปแบบตารางและข้อมูลในชีต Data กับชีต Filter เหมือนกันทุกประการ เพียงแต่ต้องการจัดเรียงใหม่ตามคอลัมน์ B เท่านั้น หากเป็นเช่นนี้สามารถบันทึก Macro ให้คัดลอกข้อมูลทั้งหมดจากชีต Data มาวางในชีต Filter จากนั้นค่อยจัดเรียงตามค่าในคอลัมน์ B ไม่ทราบว่าการทำเช่นนี้จะตรงตามต้องการหรือไม่และติดปัญหาใดหรือไม่ครับ
กรณีต้องการใช้สูตรสามารถทำตามด้านล่างครับ
- ที่ B3 คีย์
=IF(ROWS(B$3:B3)>LOOKUP(9.99999999999999E+307,Data!$A:$A),"",INDEX(Data!$B$3:$B$12,MATCH(SMALL(IF(ISERR(CODE(Data!$B$3:$B$12)),"",CODE(Data!$B$3:$B$12)+COUNTIF(Data!$B$3:$B$12,"<"&Data!$B$3:$B$12)),ROWS(B$2:B2)),CODE(Data!$B$3:$B$12)+COUNTIF(Data!$B$3:$B$12,"<"&Data!$B$3:$B$12),0)))
Ctrl+Shift+Enter > Copy ลงด้านล่าง
- ที่ A3 คีย์
=INDEX(Data!$A$3:$A$12,MATCH(B3,Data!$B$3:$B$12,0))
Enter > Copy ลงด้านล่าง
ศึกษาเพิ่มเติมได้ที่
http://snasui.com/wordpress/sort-data-with-formula/
!
| Note: Ctrl+Shift+Enter
เป็นการสร้างสูตร Array โดยสามารถเลือกดำเนินการตามข้อ 1 หรือ 2 ด้านล่าง
- กรณีคีย์สูตรเอง เมื่อคีย์สูตรแล้ว แทนที่จะกด Enter ให้กดแป้น
Ctrl และ Shift พร้อมกันค้างไว้แล้วกด Enter เพื่อสร้างเป็นสูตร Array
- กรณี Copy สูตรไปวางให้กดแป้น F2 เพื่อทำการ Edit Cell นั้นก่อน
จากนั้นกดแป้น Ctrl และ Shift พร้อมกันค้างไว้แล้วตามด้วย Enter เพื่อสร้างเป็นสูตร Array
- หากกดแป้นถูกต้องสูตรนั้นจะมีเครื่องหมายปีกกาครอบ เช่น {=YourFormulas(...)}
ปีกกานี้ไม่สามารถคีย์เข้าไปเอง จะต้องมาด้วยการกดแป้น Ctrl+Shift+Enter เท่านั้น
ถ้ายังไม่เห็นปีกกาครอบสูตรแสดงว่ากดแป้นให้รับสูตรไม่ถูกต้อง
- การแก้ไขเปลี่ยนแปลงสูตร Array จะต้องกดแป้นให้รับสูตรด้วย Ctrl+Shift+Enter ทุกครั้ง
|
Re: ช่วยหน่อยครับ ดึงDataจากDadaBaseมาเรียงลำดับตามอักษร ตัวเลข โดยใช้ VBA Excel
Posted: Tue Jan 16, 2018 10:15 pm
by mr_tomtom
- ขอบคุณครับ ทำได้แล้วสามารถเรียงลำดับตามพยัญชนะและตัวเลขได้ถูกต้อง (ดัง Code ตามข้างล่างนี้ โดยได้นำไปปรับใส่ไฟล์งานจริงตามรูปแนบ) แต่ติดตรงถ้าข้อมูลเยอะมากๆ เครื่องคอมฯจะค้างหรือก็ประมวลผลนานมากๆ และอีกอย่าง
- ถ้าเป็น VBA excel จะเร็วกว่าไหมหรือสามารถประมวลได้โดยไม่หนักไหมครับ ถ้าสามารถประมวลผลเร็วกว่าขอคำแนะนำด้วยครับ
1.ที่ชีท Filter B3
=IF(ROWS(B$3:B3)>LOOKUP(9.99999999999999E+307,Data!$A:$A),"",INDEX(Data!$B$6:$B$1000,MATCH(SMALL(IF(ISERR(CODE(Data!$B$6:$B$1000)),"",CODE(Data!$B$6:$B$1000)+COUNTIF(Data!$B$6:$B$1000,"<"&Data!$B$6:$B$1000)),ROWS(B$2:B2)),CODE(Data!$B$6:$B$1000)+COUNTIF(Data!$B$6:$B$1000,"<"&Data!$B$6:$B$1000),0)))
2.ที่ชีท Filter A3
=INDEX(Data!$A$6:$A$1000,MATCH(B3,Data!$B$6:$B$1000,0))
3.และที่ Filter C3
=IFERROR(VLOOKUP($B3,Data!$B$6:$BD$1000,15,0),"")
Re: ช่วยหน่อยครับ ดึงDataจากDadaBaseมาเรียงลำดับตามอักษร ตัวเลข โดยใช้ VBA Excel
Posted: Wed Jan 17, 2018 8:24 am
by logic
mr_tomtom wrote:
- ถ้าเป็น VBA excel จะเร็วกว่าไหมหรือสามารถประมวลได้โดยไม่หนักไหมครับ ถ้าสามารถประมวลผลเร็วกว่าขอคำแนะนำด้วยครับ
ทำด้วย Macro เร็วกว่าครับ อาจารย์บอกวิธีไปแล้ว ลองทำดูครับ
snasui wrote: ↑Mon Jan 15, 2018 7:05 pm
ผมสังเกตเห็นว่ารูปแบบตารางและข้อมูลในชีต Data กับชีต Filter เหมือนกันทุกประการ เพียงแต่ต้องการจัดเรียงใหม่ตามคอลัมน์ B เท่านั้น หากเป็นเช่นนี้สามารถบันทึก Macro ให้คัดลอกข้อมูลทั้งหมดจากชีต Data มาวางในชีต Filter จากนั้นค่อยจัดเรียงตามค่าในคอลัมน์ B ไม่ทราบว่าการทำเช่นนี้จะตรงตามต้องการหรือไม่และติดปัญหาใดหรือไม่ครับ
Re: ช่วยหน่อยครับ ดึงDataจากDadaBaseมาเรียงลำดับตามอักษร ตัวเลข โดยใช้ VBA Excel
Posted: Wed Jan 17, 2018 10:27 am
by mr_tomtom
ขอบคุณครับ ผมลืมแบบ macro ไปซะงั้น
Re: ช่วยหน่อยครับ ดึงDataจากDadaBaseมาเรียงลำดับตามอักษร ตัวเลข โดยใช้ VBA Excel
Posted: Thu Jan 18, 2018 2:26 pm
by eyepop99
ถ้าตารางเหมือนกัน ทุกประการ ผมไม่แน่ใจว่าใช้ Sort ข้อมูลเอาเลย ได้หรือเปล่า