Page 1 of 1
จะใช้ VBA แยกคอลลัมแล้วทำ BOM ยังไงดีครับ
Posted: Tue Aug 28, 2018 9:48 am
by scars13
รบกวน อาจารย์และทุกท่าน ด้วยครับ
เนื่องจาก BOM Stucture ของผมมันดึง ออกมาจากระบบเป็นรูป Text ไฟลล์
จานนั้นผมเลย Import เข้ามาที่ Excel แล้วทำการแบ่ง Column เบื้องต้น แต่ปัญหาคือ Parent กับลูกๆของมันอยู่ใน column เดียวกัน
เลยคิดว่าต้องใช้ VBA เพื่อ แยกและทำการวางแบบ Transpote ออกมานะครับ
คอนเซปผมมีคร่าวๆประมาณนี้ ไม่ทราบว่าจะต้อง เขียนคำลั่งออกมายังไงครับ
ไฟลล์ ผมมี 3 ชีท
ชีท1 เป็นต้นฉบับหลังจากดึงข้อมมูล มาจาก txt
ชีท2 ผมเร่ิ่มแตก Column เองเพื่อหาว่าตัวไหนเป็น Parent Level0..1..2..3..4 ตามลำดับ
เลเวล 0 คือเบอร์ FG
เลเวล 1 คือ component
เลเวล 2 คือ component ที่เป็น Sub ของ เลเวล1
เลเวล 3 คือ component ที่เป็น Sub ของ เลเวล2 ซึ่งเป็น Sub ของ 1 อีกทีตามลำดับ
ชีท 3 ผมใส่สีเพื่อ แสดงว่าตัวไหนเป็น เลเวลไหน เพื่อจะ Copy ให้เป็นแบบขวา ใน column O P Q R S
ถ้าทำได้ผมก็จะสามารถ pivot vออกมาทางขวามือได้
ในตัวอย่างนี้ผมมี FG แค่เบอร์เดียวนะครับ
แต่หน้างานจริงผมจะวนลูป เบอร์ FG ไปที่เบอร์อื่นด้วยนะครับ
Re: จะใช้ VBA แยกคอลลัมแล้วทำ BOM ยังไงดีครับ
Posted: Tue Aug 28, 2018 12:37 pm
by scars13
ตอนนี้ผมลอง แตก Column ออกมาที่ O P Q R S T
O เป็น relationship เฉยๆ ไม่ได้มีส่วนในการคำนวณ สเตปต่อไปแต่อย่างใด
P เป็น เบอร์ แม่/ parent ของตัวถัดไป
Q หาเบอร์ FG ออกมา
R หาเบอร์โปรแกรมสั่งตัด ออกมา
S หา component ที่อยู่ในโปรแกรมสั่งตัด ( sub ของ R) ===>ยังติดอยู่ เพราะ มีรายการที่ไม่ต้องการติดมาด้วย "ที่เป็นสีเหลือง"
T หา เบอร์ผ้าใช้สั่งตัด ซึ่งจะเป็น Sub ของ S>R>P อีกที ===>น่าจะไม่ติดอะไรแต่สูตรยังไม่ไดนามิก
รบกวนช่วยดูสูตรที่ผมทำในแต่ละ Column ด้วยนะครับ ผมทำอยู่ใน Sheet1
*** สูตรที่ใช้ใน Column O P มันไดนามิก เพราะผมหามาจาก Youtube
https://www.youtube.com/watch?v=5zrBDlsNg7c
Re: จะใช้ VBA แยกคอลลัมแล้วทำ BOM ยังไงดีครับ
Posted: Tue Aug 28, 2018 4:12 pm
by astalavista
ที่ sheet1
ลองใส่ที่ U1=0 , V1=1 ... Y1=4
ที่ U2=IF($A2=U$1,LOOKUP(2,1/($A$2:$A2=U$1),$B$2:$B2),"") copy ไปขวา ถึง Y2 และลงล่างถึงหมดข้อมูล ดูครับ
Re: จะใช้ VBA แยกคอลลัมแล้วทำ BOM ยังไงดีครับ
Posted: Tue Aug 28, 2018 9:30 pm
by scars13
astalavista wrote: Tue Aug 28, 2018 4:12 pm
ที่ sheet1
ลองใส่ที่ U1=0 , V1=1 ... Y1=4
ที่ U2=IF($A2=U$1,LOOKUP(2,1/($A$2:$A2=U$1),$B$2:$B2),"") copy ไปขวา ถึง Y2 และลงล่างถึงหมดข้อมูล ดูครับ
ขอบคุณครับ ออกเลยครับที่ติดอยู่ ขอบคุณมากๆครับ
อจครับและท่านอื่นๆที่แวะผ่านเข้ามา
ถ้าเคสนี้ ผมจะเขียน VBA นี่ต้องเขียน Code ยังไงบ้างครับ
Re: จะใช้ VBA แยกคอลลัมแล้วทำ BOM ยังไงดีครับ
Posted: Tue Aug 28, 2018 9:33 pm
by menem
ลองดูนะครับว่าตรงกับที่ต้องการหรือไม่
Re: จะใช้ VBA แยกคอลลัมแล้วทำ BOM ยังไงดีครับ
Posted: Tue Aug 28, 2018 10:51 pm
by scars13
[attachment=0]BOM FG (1).xlsb
menem wrote: Tue Aug 28, 2018 9:33 pm
ลองดูนะครับว่าตรงกับที่ต้องการหรือไม่
แบบนี้ใช่เลยครับ นำไปวางแบบ Transpose และสามารถนำไป pivot ต่อได้
ผมกำลังคิดไม่ตกอยู่เลยครับว่า จะต้องมานั่งตัดบรรทัด ตัวที่ว่างๆ เอง และอื่นๆ อีก จากไฟลล์ txt น่าจะเสียเวลา
ผมลองเอาข้อมมุลที่ใหญ่กว่านี้มา ( มีหลายๆ เบอร์ FG ) ไว้ใน ชีทที่ 4
ทีนี้ลองเปลี่ยน พารามิเตอร์ดูที่ ชีท " sheet1 C:3" ผลคือ ข้อมมูลออกมาตามที่ต้องการครับ แต่ผมไล่ดูแล้ว มันจับข้อมูลถึง
FG แถวที่ 856 ส่วน FG // parent ที่อยู่ ตั้งแต่ แถว 856 ลงไป ยังขับไม่เจอนะครับ
รบกวนขอคำแนะนำเพิ่มเติมด้วยครับ
ขอบคุณครับ
Re: จะใช้ VBA แยกคอลลัมแล้วทำ BOM ยังไงดีครับ
Posted: Wed Aug 29, 2018 1:25 pm
by menem
ให้ลอง copy สูตรใน sheet1 ลงไปถึงบรรทัด 10000 ครับ
(เพราะสูตรต้องยาวพอกับตัวข้อมูล)
Re: จะใช้ VBA แยกคอลลัมแล้วทำ BOM ยังไงดีครับ
Posted: Thu Aug 30, 2018 1:45 pm
by scars13
menem wrote: Wed Aug 29, 2018 1:25 pm
ให้ลอง copy สูตรใน sheet1 ลงไปถึงบรรทัด 10000 ครับ
(เพราะสูตรต้องยาวพอกับตัวข้อมูล)
ขอบคุณครับ ผมรบกวนสอบถามต่ออีกนิด ในกรณีที่ ไฟลล์ข้อมูลดิบที่เราดึงมา มันไปถึง แถวที่ 10,000 นี่ จำเป็นมั้ยครับที่เราต้องดึงสูตรให้มากกว่า 10,000 หรือให้เท่ากันก็พอในกรณีที่ไม่มี ไอเท็ม เพิ่มในอนาคตแล้วนะครับ
อีกเคสที่ผมเจอก็คือ หลังจากที่ ลองลากแล้ว ผมเจอว่า บางตัวที่ ชื่อมันเป็น Parent แต่จริงๆ มันไม่ใช่ มันเป็น Sub Level ที่2 แต่ดันมี ลูกที่ เลเวล3 ตามมาด้วย
ซึ่งข้อจำกัดของระบบที่ผมใช้คือมันเป็น Single Level อะไรก็ตามที่มี Sub Level ต่อไปอีก มันจะมองว่าตัวนั้นเป็น Parent ไปด้วยทีนี้ผมก็ งงทีแรกว่า ทำไม เบอร์ที่เคยเป็น Level 1 Level2 ขึ้นมาเป็น Parent เฉยเลย
กรณี ถ้าผมจับ Vlookup เพื่อ แยกก่อนว่าจริงๆแล้ว Parent ตัวไหนคือ FG หรือ จริงๆ แล้วเราจะหา BOM ที่ต้องการจริงๆ โดยมี Parent เป็น FG ได้มั้ยครับ
Re: จะใช้ VBA แยกคอลลัมแล้วทำ BOM ยังไงดีครับ
Posted: Thu Aug 30, 2018 4:37 pm
by menem
การเขียนสูตรแบบนี้ ใช้วิธีตรวจจับทีละบรรทัดข้อมูล ดังนั้นจำเป็นที่จะต้องมีเท่ากับหรือมากกว่าตัวข้อมูลครับ
ส่วนเรื่องการเป็น Parent จริงหรือเทียมนั้น หากในรายงานระบุว่าเป็น Parent ทั้งที่จริง ๆ แล้วเป็นแค่ Sub Level 1/2
การเขียนสูตรเพื่อดักจับอาจจะค่อนข้างยาก เพราะมีหลายปัจจัยที่อาจจะทำให้สูตรทำงานผิดพลาดในอีกแบบได้เช่นกัน
แนวทางที่ดีคือ หาวิธีในการ Export ข้อมูลออกมาให้ถูกต้องจะดีที่สุด (หากทำได้ครับ)
Re: จะใช้ VBA แยกคอลลัมแล้วทำ BOM ยังไงดีครับ
Posted: Thu Aug 30, 2018 10:17 pm
by scars13
menem wrote: Thu Aug 30, 2018 4:37 pm
การเขียนสูตรแบบนี้ ใช้วิธีตรวจจับทีละบรรทัดข้อมูล ดังนั้นจำเป็นที่จะต้องมีเท่ากับหรือมากกว่าตัวข้อมูลครับ
ส่วนเรื่องการเป็น Parent จริงหรือเทียมนั้น หากในรายงานระบุว่าเป็น Parent ทั้งที่จริง ๆ แล้วเป็นแค่ Sub Level 1/2
การเขียนสูตรเพื่อดักจับอาจจะค่อนข้างยาก เพราะมีหลายปัจจัยที่อาจจะทำให้สูตรทำงานผิดพลาดในอีกแบบได้เช่นกัน
แนวทางที่ดีคือ หาวิธีในการ Export ข้อมูลออกมาให้ถูกต้องจะดีที่สุด (หากทำได้ครับ)
ขอบคุณมากๆครับ สำหรับคำแนะนำ ผมสอบถามทาง IT ก็ได้แนวางเหมือนที่เคยแอบคิดว่า ต้อง Vlookup จับว่าตัวไหนเป็น FG ก่อน
T___T
*** แล้วพวก Power Query นี่พอจะมีแนวทางที่จะเอามาประยุกต์ใช้ได้มั้ยครับ
Re: จะใช้ VBA แยกคอลลัมแล้วทำ BOM ยังไงดีครับ
Posted: Fri Aug 31, 2018 3:31 pm
by menem
Power Query ไม่เคยใช้ครับ
ประเด็นสำคัญคือ ใน Material เองมีสถานะเป็น FG ในตัวด้วย
ซึ่งทำให้ยากในการพิจารณาว่า มันเป็น Mat/FG ตอนที่ Export
ออกมา
ดังนั้น การที่มันระบุตนเองว่าเป็น FG กรณีมี Sub ต่อท้าย
อาจจะเป็นสิ่งที่เหมาะสมก็ได้ครับ (เพียงแต่เรามองว่ามัน
ไม่ใช่ FG แบบที่เรายอมรับกัน)