:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

จะใช้ VBA แยกคอลลัมแล้วทำ BOM ยังไงดีครับ

ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
scars13
Member
Member
Posts: 60
Joined: Mon Jan 22, 2018 1:35 pm

จะใช้ VBA แยกคอลลัมแล้วทำ BOM ยังไงดีครับ

#1

Post 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 ไปที่เบอร์อื่นด้วยนะครับ
Attachments
BOM FG.xlsb
(27.13 KiB) Downloaded 28 times
scars13
Member
Member
Posts: 60
Joined: Mon Jan 22, 2018 1:35 pm

Re: จะใช้ VBA แยกคอลลัมแล้วทำ BOM ยังไงดีครับ

#2

Post 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
Attachments
BOM FG.xlsb
(198.01 KiB) Downloaded 18 times
astalavista
Member
Member
Posts: 48
Joined: Tue Oct 03, 2017 11:05 am

Re: จะใช้ VBA แยกคอลลัมแล้วทำ BOM ยังไงดีครับ

#3

Post 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 และลงล่างถึงหมดข้อมูล ดูครับ
scars13
Member
Member
Posts: 60
Joined: Mon Jan 22, 2018 1:35 pm

Re: จะใช้ VBA แยกคอลลัมแล้วทำ BOM ยังไงดีครับ

#4

Post 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 ยังไงบ้างครับ
menem
Silver
Silver
Posts: 549
Joined: Mon Jan 26, 2015 11:02 am

Re: จะใช้ VBA แยกคอลลัมแล้วทำ BOM ยังไงดีครับ

#5

Post by menem »

ลองดูนะครับว่าตรงกับที่ต้องการหรือไม่
Attachments
BOM FG.xlsb
(55.84 KiB) Downloaded 28 times
Last edited by menem on Tue Aug 28, 2018 10:06 pm, edited 1 time in total.
scars13
Member
Member
Posts: 60
Joined: Mon Jan 22, 2018 1:35 pm

Re: จะใช้ VBA แยกคอลลัมแล้วทำ BOM ยังไงดีครับ

#6

Post 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 ลงไป ยังขับไม่เจอนะครับ

รบกวนขอคำแนะนำเพิ่มเติมด้วยครับ

ขอบคุณครับ
Attachments
BOM FG (1).xlsb
อัพเดทที่ชีท 4
(283.98 KiB) Downloaded 32 times
menem
Silver
Silver
Posts: 549
Joined: Mon Jan 26, 2015 11:02 am

Re: จะใช้ VBA แยกคอลลัมแล้วทำ BOM ยังไงดีครับ

#7

Post by menem »

ให้ลอง copy สูตรใน sheet1 ลงไปถึงบรรทัด 10000 ครับ
(เพราะสูตรต้องยาวพอกับตัวข้อมูล)
scars13
Member
Member
Posts: 60
Joined: Mon Jan 22, 2018 1:35 pm

Re: จะใช้ VBA แยกคอลลัมแล้วทำ BOM ยังไงดีครับ

#8

Post 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 ได้มั้ยครับ
menem
Silver
Silver
Posts: 549
Joined: Mon Jan 26, 2015 11:02 am

Re: จะใช้ VBA แยกคอลลัมแล้วทำ BOM ยังไงดีครับ

#9

Post by menem »

การเขียนสูตรแบบนี้ ใช้วิธีตรวจจับทีละบรรทัดข้อมูล ดังนั้นจำเป็นที่จะต้องมีเท่ากับหรือมากกว่าตัวข้อมูลครับ

ส่วนเรื่องการเป็น Parent จริงหรือเทียมนั้น หากในรายงานระบุว่าเป็น Parent ทั้งที่จริง ๆ แล้วเป็นแค่ Sub Level 1/2
การเขียนสูตรเพื่อดักจับอาจจะค่อนข้างยาก เพราะมีหลายปัจจัยที่อาจจะทำให้สูตรทำงานผิดพลาดในอีกแบบได้เช่นกัน

แนวทางที่ดีคือ หาวิธีในการ Export ข้อมูลออกมาให้ถูกต้องจะดีที่สุด (หากทำได้ครับ)
scars13
Member
Member
Posts: 60
Joined: Mon Jan 22, 2018 1:35 pm

Re: จะใช้ VBA แยกคอลลัมแล้วทำ BOM ยังไงดีครับ

#10

Post 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 นี่พอจะมีแนวทางที่จะเอามาประยุกต์ใช้ได้มั้ยครับ
menem
Silver
Silver
Posts: 549
Joined: Mon Jan 26, 2015 11:02 am

Re: จะใช้ VBA แยกคอลลัมแล้วทำ BOM ยังไงดีครับ

#11

Post by menem »

Power Query ไม่เคยใช้ครับ

ประเด็นสำคัญคือ ใน Material เองมีสถานะเป็น FG ในตัวด้วย
ซึ่งทำให้ยากในการพิจารณาว่า มันเป็น Mat/FG ตอนที่ Export
ออกมา

ดังนั้น การที่มันระบุตนเองว่าเป็น FG กรณีมี Sub ต่อท้าย
อาจจะเป็นสิ่งที่เหมาะสมก็ได้ครับ (เพียงแต่เรามองว่ามัน
ไม่ใช่ FG แบบที่เรายอมรับกัน)
Post Reply