Page 1 of 1

เรียงลำดับงานตามวันกำหนดส่งงานเร็วที่สุดอย่างมีเงื่อนไข

Posted: Tue May 26, 2015 7:06 pm
by ploynattharat
ขออนุญาตสอบถามผู้รู้คะ

คือดิฉันอยากให้ผู้รู้ช่วยเหลือหน่อยคะ ที่คอลัมน์ J วันกำหนดส่งงาน คือดิฉันอยากเรียงลำดับงานตามวันกำหนดส่งที่จะถึงเร็วที่สุดก่อนคะ เมื่อกดคลิกปุ่มเรียงลำดับงานแล้ว สูตรที่ดิฉันใส่สามารถเรียงลำดับงานได้คะ แต่ทีนี้ ทีช่อง J2 และ J3 มีวันกำหนดส่งงานวันเดียวกันคะ ถ้าเกิดกรณีวันกำหนดส่งเดียวกัน อยากให้ไปดูต่อที่คอลัมน์ K คะ ยกตัวอย่างเช่น งานลำดับที่2 ระดับความยาก/ง่ายที่ช่องK3 = 3จะให้ทำงานก่อน งานลำดับที่1 ที่มีวันกำหนดส่งเดียวกัน แต่ระดับความยาก/ง่ายที่ช่อง k2 =1คะ

ปัญหาของดิฉันคือ เมื่อกดปุ่มเรียงลำดับงานตามวันกำหนดส่งแล้ว ถ้าวันกำหนดส่งงานตรงกัน ให้ดูระดับความยาก/ง่ายของงานคะ โดย3ทำงานก่อน2ทำงานก่อน1คะ อย่างตัวอย่างที่ส่งให้นั้น งานที่2 ควรไปอยู่ลำดับที่1 งานที่1ควรอยู่ลำดับที่2 งานที่4ควรอยู่ลำดับที่3 และงานลำดับที่3 ควรอยู่ลำดับที่4คะ

ขอบคุณมากคะ

Re: เรียงลำดับงานตามวันกำหนดส่งงานเร็วที่สุดอย่างมีเงื่อนไข

Posted: Tue May 26, 2015 7:19 pm
by snasui
:D ตัวอย่าง Code ครับ

Code: Select all

Sub EDD()
    Range("B2:J100").Select
    Range("J3").Activate
    ActiveWorkbook.Worksheets("OrderData").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("OrderData").Sort.SortFields.Add Key:=Range( _
        "J2:J100"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("OrderData").Sort.SortFields.Add Key:=Range( _
        "K2:K100"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("OrderData").Sort
        .SetRange Range("B2:K100")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("J2").Select
End Sub

Re: เรียงลำดับงานตามวันกำหนดส่งงานเร็วที่สุดอย่างมีเงื่อนไข

Posted: Tue May 26, 2015 7:56 pm
by ploynattharat
snasui wrote::D ตัวอย่าง Code ครับ

Code: Select all

Sub EDD()
    Range("B2:J100").Select
    Range("J3").Activate
    ActiveWorkbook.Worksheets("OrderData").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("OrderData").Sort.SortFields.Add Key:=Range( _
        "J2:J100"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("OrderData").Sort.SortFields.Add Key:=Range( _
        "K2:K100"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("OrderData").Sort
        .SetRange Range("B2:K100")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("J2").Select
End Sub


ลองใส่สูตรแล้วยังไม่ได้คะ

ที่ไฟล์ใหม่ที่แนบให้คะ หลังจากใส่สูตรแล้ว

ดิฉันลองใส่งานใหม่ วันกำหนดส่งคือ 7/8/2015 หลังจากกดเรียงงานแล้ว งานขึ้นไปอยู่ที่ลำดับที่2คะ โดยงานที่ลำดับที่ 1 วันกำหนดส่ง 10/8/2015 ที่จริงแล้ว งานลำดับที่2วันกำหนดส่งงานเร็วกว่างานลำดับที่1 งานควรจะขึ้นไปอยู่ลำดับที่1 งานลำดับที่ 3 กำหนดส่ง 9/8/2015 ควรขึ้นไปอยู่ลำดับที่2 และงานลำดับที่4 วันกำหนดส่งวันที่ 10/8/2015 มีวันกำหนดส่งตรงกับงานลำดับที่1 แต่ลำดับความยากง่าย ระดับที่3 ควรได้อยู่ลำดับงานก่อนงานที่1 ซึ่งลำดับความยาก/ง่ายอยู่ที่ระดับ1คะ เพราะฉะนั้นงานลำดับที่4 ควรอยู่ลำดับที่3 และงานลำดับที่1 ควรอยู่ลำดับที่4คะ

รบกวนช่วยดูให้อีกทีนะคะ

ขอบคุณคะ

Re: เรียงลำดับงานตามวันกำหนดส่งงานเร็วที่สุดอย่างมีเงื่อนไข

Posted: Tue May 26, 2015 10:00 pm
by snasui
:D Macro หรือ VBA เรียกว่า Code ไม่เรียกว่า สูตร ครับ

ให้ปรับ Code .SetRange Range("B2:K100")เป็น .SetRange Range("B1:K100") ครับ

Re: เรียงลำดับงานตามวันกำหนดส่งงานเร็วที่สุดอย่างมีเงื่อนไข

Posted: Wed May 27, 2015 9:21 am
by ploynattharat
snasui wrote::D Macro หรือ VBA เรียนว่า Code ไม่เรียกว่า สูตร ครับ

ให้ปรับ Code .SetRange Range("B2:K100")เป็น .SetRange Range("B1:K100") ครับ
ทำได้และคะ

ขอโทษที่ดิฉันใช้คำผิดนะคะ

ขอบคุณมากคะ

Re: เรียงลำดับงานตามวันกำหนดส่งงานเร็วที่สุดอย่างมีเงื่อนไข

Posted: Wed May 27, 2015 10:02 am
by snasui
ploynattharat wrote:
snasui wrote: :D Macro หรือ VBA เรียนว่า Code ไม่เรียกว่า สูตร ครับ

ให้ปรับ Code .SetRange Range("B2:K100")เป็น .SetRange Range("B1:K100") ครับ
ทำได้และคะ

ขอโทษที่ดิฉันใช้คำผิดนะคะ

ขอบคุณมากคะ
:D การใช้คำผิดตามข้างตนยังพอสื่อสารเข้าใจได้ ผมแจ้งไปเพื่อเพื่อน ๆ ที่เข้ามาอ่านจะได้ทราบไปด้วยกันว่าสิ่งใดเรียก Code, สูตร หรืออื่น ๆ เพื่อจะได้สื่อสารตรงกันครับ

ที่ฟอรัมถามตอบไม่อนุญาตให้ใช้ภาษาแชท หากทราบว่าเขียนผิดสามารถ Edit ได้ภายในเวลา 60 นาที

อ่านกฎด้านบนทุกข้อเพื่อทราบอีกรอบครับ :roll:

Re: เรียงลำดับงานตามวันกำหนดส่งงานเร็วที่สุดอย่างมีเงื่อนไข

Posted: Wed May 27, 2015 11:33 am
by ploynattharat
snasui wrote:
ploynattharat wrote:
snasui wrote: :D Macro หรือ VBA เรียนว่า Code ไม่เรียกว่า สูตร ครับ

ให้ปรับ Code .SetRange Range("B2:K100")เป็น .SetRange Range("B1:K100") ครับ
ทำได้แล้วคะ

ขอโทษที่ดิฉันใช้คำผิดนะคะ

ขอบคุณมากคะ
:D การใช้คำผิดตามข้างตนยังพอสื่อสารเข้าใจได้ ผมแจ้งไปเพื่อเพื่อน ๆ ที่เข้ามาอ่านจะได้ทราบไปด้วยกันว่าสิ่งใดเรียก Code, สูตร หรืออื่น ๆ เพื่อจะได้สื่อสารตรงกันครับ

ที่ฟอรัมถามตอบไม่อนุญาตให้ใช้ภาษาแชท หากทราบว่าเขียนผิดสามารถ Edit ได้ภายในเวลา 60 นาที

อ่านกฎด้านบนทุกข้อเพื่อทราบอีกรอบครับ :roll:

Re: เรียงลำดับงานตามวันกำหนดส่งงานเร็วที่สุดอย่างมีเงื่อนไข

Posted: Tue Jun 02, 2015 12:42 pm
by ploynattharat
อาจารย์คะ ขออนุญาตรบกวนหน่อยคะ

ที่worksheet ชื่อ dataorderdetail ที่ปุ่มกดเรียงลำดับที่ด้านขวาคะ

คือปุ่มนี้จะเรียงลำดับงานที่วันกำหนดส่งเร็วที่สุดก่อน(คอลัมน์ J) แต่ถ้าวันกำหนดส่งเดียวกัน จะไปเรียงลำดับความยาก/ง่ายต่อ ที่คอลัมน์K โดยลำดับ3 จะทำงานก่อนลำดับ2 และลำดับ ตามลำดับ แล้วถ้าวันกำหนดส่งและลำดับความยาก/ง่าย ตรงกันอีก จะไปเรียงลำดับ จำนวน(คอลัมน์ F) โดยจะนำจำนวนที่มากกว่าทำก่อน

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

พอดิฉันเปลี่ยนชื่อ worksheetแล้ว แล้วไปแก้ไขcode ตรงชื่อworksheet ที่ปุ่มกดเรียงลำดับแล้วเกิด debug คะ

รบกวนอาจารย์ช่วยเหลือด้วยนะคะ

ขอบคุณมากคะ

Re: เรียงลำดับงานตามวันกำหนดส่งงานเร็วที่สุดอย่างมีเงื่อนไข

Posted: Tue Jun 02, 2015 1:10 pm
by snasui
:D กลับไปตอบกรกระทู้นี้ก่อนครับ viewtopic.php?f=3&t=8674#p54305