Page 1 of 1

ต้องการเรียงลำดับตามแนวนอนครับ

Posted: Thu Apr 02, 2020 1:58 am
by yodpao.b
ต้องการเรียงลำดับตามแนวนอนครับ ทำอย่างไร
pic3.PNG
จากรูปต้องการให้เรียงดังนี้
ยกตัวอย่าง
EV001 EV002 EV004 EV006 EV008 EV009 EV010 EV011 EV014 EV017 EV018
โดยข้อมูลด้านล่างต้องย้ายตามไปด้วย

Re: ต้องการเรียงลำดับตามแนวนอนครับ

Posted: Thu Apr 02, 2020 7:08 am
by norkaz
1) คลุมพื้นที่ คลุมหัวตารางด้วย
2) Data-> Sort -> Options-> Sort left to right -> OK
3) ที่ Sort by เลือกแถว ในที่นี้คือ Row 9
4) ที่ Order เลือก A to Z -> OK

Norkaz

Re: ต้องการเรียงลำดับตามแนวนอนครับ

Posted: Sat Apr 04, 2020 1:08 am
by yodpao.b
ขอคุณมากครับ
ทำตามผลที่ได้ตามต้องการครับ

Re: ต้องการเรียงลำดับตามแนวนอนครับ

Posted: Sat Apr 04, 2020 2:12 am
by yodpao.b
ผมใช้ มาโครในการเขียน code
pic1.PNG
จากรูปด้านบน
เมื่อรันโคดแล้วพบว่าไฟลข้อมูลที่มีมากกว่า ทำงานไม่ได้ตามที่ต้องการ
ติดปัญหาที่ code แถบสีเหลือง
จะแก้ไขอย่างไรดีครับ ถ้าข้อมูลมีมากบางไฟล์มีไม่ถึง รึอาจมีมากกว่าที่ code กำหนด

code ที่ผิด
Sub Macro_SortField()

Range("D9").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
ActiveWorkbook.Worksheets("data_total").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("data_total").Sort.SortFields.Add Key:=Range( _
"D9:AN9"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("data_total").Sort
.SetRange Range("D9:AN1293")
.Header = xlGuess
.MatchCase = False
.Orientation = xlLeftToRight
.SortMethod = xlPinYin
.Apply
End With

Range("B7").Select

End Sub

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

Re: ต้องการเรียงลำดับตามแนวนอนครับ

Posted: Sat Apr 04, 2020 6:13 am
by snasui
:D กรุณาโพสต์ Code ให้แสดงรูปแบบข้อความ Code อ่านกฎการใช้บอร์ดข้อ 5 ด้านบนประกอบครับ :roll:

Re: ต้องการเรียงลำดับตามแนวนอนครับ

Posted: Sat Apr 04, 2020 1:17 pm
by yodpao.b

Code: Select all

Sub Macro_SortField()

    Range("D9").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveWorkbook.Worksheets("data_total").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("data_total").Sort.SortFields.Add Key:=Range( _
        "D9:AN9"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("data_total").Sort
        .SetRange Range("D9:AN1293")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlLeftToRight
        .SortMethod = xlPinYin
        .Apply
    End With
    
    Range("B7").Select


    
End Sub
code อยู่ใน Module1
เมื่อ code ทำงาน แล้ว นั้นถูกต้อง
แต่พอผมเพิ่มจำนวนบรรทัดลงในไฟล์
จะเห็นว่าเมื่อ Run code อีกครั้ง
บรรทัดล่างที่เพิ่มจะไม่ทำงาน
ผมคิดว่าโคดประกาศตำแหน่งจึงทำให้ไม่สามารถไปถึงตำแหน่งบรรทัดสุดท้ายได้
ต้องแก้ไขอย่างไรดีครับ

Re: ต้องการเรียงลำดับตามแนวนอนครับ

Posted: Sat Apr 04, 2020 1:29 pm
by snasui
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

Dim rall As Range
With ActiveSheet
    Set rall = .Range("d9").CurrentRegion
    .Sort.SortFields.Clear
    .Sort.SortFields.Add Key:=Range( _
        "D9:AN9"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With .Sort
        .SetRange rall
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlLeftToRight
        .SortMethod = xlPinYin
        .Apply
    End With
    .Range("B7").Select
End With

Re: ต้องการเรียงลำดับตามแนวนอนครับ

Posted: Sat Apr 04, 2020 1:46 pm
by yodpao.b
เม่ื่อคลิกปุ่ม เรียงลำดับ
code ทำงานถึงตำแหน่งซ้ายสุดและล่างสุดแล้วครับ
แต่มันทำงานกับ 2 คอลัมด้านหน้าด้วยมันส่งทั้ง 2 คอลัมไปอยู่หลังสุด
ตั้งการให้ทั้งสองคอลัมอยู่ด้านหน้าที่เดิมครับ
1.PNG

Re: ต้องการเรียงลำดับตามแนวนอนครับ

Posted: Sat Apr 04, 2020 1:53 pm
by snasui
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

'Other code
Set rall = .Range("d9").CurrentRegion
Set rall = rall.Offset(0, 2).Resize(, rall.Columns.Count - 2)
.Sort.SortFields.Clear
'Other code

Re: ต้องการเรียงลำดับตามแนวนอนครับ

Posted: Sat Apr 04, 2020 2:30 pm
by yodpao.b
โด้ดนี่ผ่านแล้วครับ
แต่ผมแก้ตัวเลขนิดหน่อย

Code: Select all

Set rall = rall.Offset(0, 3).Resize(, rall.Columns.Count - 3)
ขอบคุณมากครับ

Re: ต้องการเรียงลำดับตามแนวนอนครับ

Posted: Sat Apr 04, 2020 3:59 pm
by snasui
:D แก้ได้ตามสะดวก การเขียน Code ต้องพยายามเรียนรู้เพื่อให้ปรับแก้เองได้ครับ