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
:D ผมสังเกตเห็นว่ารูปแบบตารางและข้อมูลในชีต Data กับชีต Filter เหมือนกันทุกประการ เพียงแต่ต้องการจัดเรียงใหม่ตามคอลัมน์ B เท่านั้น หากเป็นเช่นนี้สามารถบันทึก Macro ให้คัดลอกข้อมูลทั้งหมดจากชีต Data มาวางในชีต Filter จากนั้นค่อยจัดเรียงตามค่าในคอลัมน์ B ไม่ทราบว่าการทำเช่นนี้จะตรงตามต้องการหรือไม่และติดปัญหาใดหรือไม่ครับ :?:

กรณีต้องการใช้สูตรสามารถทำตามด้านล่างครับ
  1. ที่ 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 ลงด้านล่าง
  2. ที่ 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 ด้านล่าง
  1. กรณีคีย์สูตรเอง เมื่อคีย์สูตรแล้ว แทนที่จะกด Enter ให้กดแป้น
    Ctrl และ Shift พร้อมกันค้างไว้แล้วกด Enter เพื่อสร้างเป็นสูตร Array
  2. กรณี Copy สูตรไปวางให้กดแป้น F2 เพื่อทำการ Edit Cell นั้นก่อน
    จากนั้นกดแป้น Ctrl และ Shift พร้อมกันค้างไว้แล้วตามด้วย Enter เพื่อสร้างเป็นสูตร Array
  3. หากกดแป้นถูกต้องสูตรนั้นจะมีเครื่องหมายปีกกาครอบ เช่น {=YourFormulas(...)}
    ปีกกานี้ไม่สามารถคีย์เข้าไปเอง จะต้องมาด้วยการกดแป้น Ctrl+Shift+Enter เท่านั้น
    ถ้ายังไม่เห็นปีกกาครอบสูตรแสดงว่ากดแป้นให้รับสูตรไม่ถูกต้อง
  4. การแก้ไขเปลี่ยนแปลงสูตร 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 :D ผมสังเกตเห็นว่ารูปแบบตารางและข้อมูลในชีต 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 ข้อมูลเอาเลย ได้หรือเปล่า