Page 1 of 1

เรียงลำดับในComboBox

Posted: Thu Nov 17, 2011 7:51 am
by yodpao.b
อยากถามอาจารย์ว่าเมื่อคลิกเลือก ComboBox จะปรากฏรายการขึ้นมา ถ้าต้องการให้ในรายการนั้นเรียงลำดับจากน้อยไปมากเขียนโค้คอย่าไรดีครับ
โคดเดิมด้านล่าง

Code: Select all

Private Sub UserForm_Initialize()
    Sheets("Data_Seminar").Select
    Range("I4").Select
    Do While Not IsEmpty(ActiveCell.Value)
                    ComboBox111.AddItem ActiveCell.Value
                    ActiveCell.Offset(1, 0).Select
    Loop

End Sub
1.GIF

Re: เรียงลำดับในComboBox

Posted: Thu Nov 17, 2011 9:25 am
by bank9597
:D ปรัีบโค๊ดค่อนข้างยากอยู่ครับ
ลองเรียงข้อมูลใน "Data_Seminar" น่าจะง่ายกว่าน่ะครับ :D

หรือยังไง ลองส่งไฟล์แนบมาดูครับ

Re: เรียงลำดับในComboBox

Posted: Thu Nov 17, 2011 11:24 am
by yodpao.b
ลัษณะที่ว่า ลองเรียงข้อมูลใน "Data_Seminar" ดีกว่าไหม
ผมเคยทำแล้วครับคือ
1.copy คอลัมตรงการนั้นไปวางที่คอลัมอื่นแล้วสั่งให้คอลัมนั้นเรียงลำดับ
2.แล้วจึงสั่งให้ ComboBox ไปมองหา
จบขั้นตอน
แต่ข้อเสียอยู่ที่ ถ้ามีข้อมูล 10000 ข้อมูล ก็เท่ากับว่า ต้องมีข้อมูลอีก1คอลัม=10000record
จะทำให้ไฟล์มีขนาดใหญ่โดยไม่จำเป็น และที่สำคัญผมต้องทำกับหน้าที่มีข้อมูลดิบเกือบทุกหน้า
จะทำให้ไฟล์ใหญครับ
พร้อมกันนี้ได้แนบไฟล์มาด้วยครับ
เรียงลำดับในComboBox.xls

Re: เรียงลำดับในComboBox

Posted: Thu Nov 17, 2011 4:57 pm
by bank9597
:D รู้สึกว่าจะยากไปสำหรับผมแล้วครับ คงต้องพึ่งอาจารย์แล้วครับ

แต่แนะนำนิดนึงครับ ในการบันทึกข้อมูลมาจัดเก็บนั้น ผมเข้าใจว่าคุณจะทำการบันทึกผ่านฟอร์มที่สร้างขึ้นมา ทีนี้เมื่อมองรูปแบบการจัดเรียงแล้ว ยังสลับกันอยู่ เข้าใจว่าในขั้นตอนการบันทึกข้อมูลนั้นไม่มีระบบ RUN ตัวเลขให้เป็นไปตามลำดับ ดังนั้นเพื่อให้ทำงานง่ายและเราไม่ต้องเพิ่มเติมโค๊ดบ่อยๆ การจัดเก็บข้อมูลก็น่าจะเป็นสิ่งที่ควรจัดการให้ดีเป็นเบื้อนต้นก่อนครับ :D

ยังไงจะลองๆหาวิธีช่วยอีกแรงครับ :mrgreen:

Re: เรียงลำดับในComboBox

Posted: Thu Nov 17, 2011 6:26 pm
by bank9597
:D ผมได้ลองปรับโค๊ดมาให้ครับ
เป็นการแก้ไขด้วยวิธีที่ค่อนข้างจะลักไก่ไปนิด เข้าใจว่าคุณต้องการเรียงลำดับของชื่อ โดยยึดตัวเลขท้ายประโยคเป็นหลัก เวลาเราทำการ Filter จึงทำได้ยาก (สำหรับผม)
ผมเลยเปลี่ยนมาทำ Filter ในช่อง ID แทน สามารถใช้งานได้ ยังไงลองนำไปปรับแต่งเองอีกหน่อย ก็น่าจะใช้ได้แล้วครับ :D

อาจารย์จะเน้นมากครับ หากเราต้องการทำงานกับ VBA เราจึงพยายามบันทึกมาโครครับ :mrgreen:
สำเนาของ เรียงลำดับในComboBox.xls

Re: เรียงลำดับในComboBox

Posted: Fri Nov 18, 2011 7:59 am
by yodpao.b
bank9597 wrote::D รู้สึกว่าจะยากไปสำหรับผมแล้วครับ คงต้องพึ่งอาจารย์แล้วครับ

แต่แนะนำนิดนึงครับ ในการบันทึกข้อมูลมาจัดเก็บนั้น ผมเข้าใจว่าคุณจะทำการบันทึกผ่านฟอร์มที่สร้างขึ้นมา ทีนี้เมื่อมองรูปแบบการจัดเรียงแล้ว ยังสลับกันอยู่ เข้าใจว่าในขั้นตอนการบันทึกข้อมูลนั้นไม่มีระบบ RUN ตัวเลขให้เป็นไปตามลำดับ ดังนั้นเพื่อให้ทำงานง่ายและเราไม่ต้องเพิ่มเติมโค๊ดบ่อยๆ การจัดเก็บข้อมูลก็น่าจะเป็นสิ่งที่ควรจัดการให้ดีเป็นเบื้อนต้นก่อนครับ :D

ยังไงจะลองๆหาวิธีช่วยอีกแรงครับ :mrgreen:
รบกวนขอตัวอย่างการจัดเก็บที่เป็นระบบด้วยครับ ขอบคุณครับ

Re: เรียงลำดับในComboBox

Posted: Fri Nov 18, 2011 8:14 am
by yodpao.b
รบกวนอาจาร์ยช่วยดูกระทู้ที่เมื่อ: 17 พ.ย. 2011 07:51 หน่อยครับ ช่วยแสดงความคิดเห็นด้วยครับ
พอจะทำได้ไหมครับหรือว่าต้องแก้ปํญหาแบบที่คูณbank9597 กล่าวไว้

Re: เรียงลำดับในComboBox

Posted: Fri Nov 18, 2011 9:44 am
by bank9597
:D ตอบยากครับ ผมคิดว่ามันไม่มีรูปแบบตายตัว สำคัญตรงที่จะนำไปใช้อย่างไรและยืดหยุ่นมากน้อยแค่ไหนครับ หากเราเตรียมข้อมูลไว้ดี เวลานำไปใช้ก็จะง่ายไปตามลำดับครับ :D

Re: เรียงลำดับในComboBox

Posted: Fri Nov 18, 2011 10:06 am
by snasui
:D ลองดูตัวอย่างการ Sort ใน ComboBox ของ Tom ที่นี่แล้วปรับใช้ดูครับ http://www.mrexcel.com/forum/showthread.php?t=58261

Re: เรียงลำดับในComboBox

Posted: Fri Nov 18, 2011 10:42 am
by yodpao.b
อาจารย์ช่วยดูหน่อยครับ
ผมได้ลองทำดูแล้วแต่ข้อมูลมันไม่โชว์อะไรเลยครับผม
code
Private Sub UserForm_Initialize()
Application.ScreenUpdating = False
With ComboBox1
.Clear
.List = Sheets("Sheet1").Range("D4:D35").Value
Dim unsorted As Boolean, i As Integer, temp As Variant
unsorted = True
Do
unsorted = False
For i = 0 To UBound(.List) - 1
If .List(i) > .List(i + 1) Then
temp = .List(i)
.List(i) = .List(i + 1)
.List(i + 1) = temp
unsorted = True
Exit For
End If
Next i
Loop While unsorted = True
End With
Application.ScreenUpdating = True
End Sub

Re: เรียงลำดับในComboBox

Posted: Fri Nov 18, 2011 12:31 pm
by snasui
:D ลองปรับ Code เป็นตามด้านล่างครับ

Code: Select all

Private Sub UserForm_Initialize()
    Dim unsorted As Boolean, i As Integer
    Dim r As Range, temp As Variant
    Application.ScreenUpdating = False
    With Sheets("Sheet1")
        Set r = .Range("D4", .Range("D" & Rows.Count) _
            .End(xlUp))
    End With
    With ComboBox1
        .Clear
        .List = r.Value
        unsorted = True
        Do
            unsorted = False
            For i = 0 To UBound(.List) - 1
                If .List(i) > .List(i + 1) Then
                    temp = .List(i)
                    .List(i) = .List(i + 1)
                    .List(i + 1) = temp
                    unsorted = True
                    Exit For
                End If
            Next i
        Loop While unsorted = True
    End With
    Application.ScreenUpdating = True
End Sub

Re: เรียงลำดับในComboBox

Posted: Fri Nov 18, 2011 12:55 pm
by yodpao.b
ขอคุณมากมากครับผมจะเริ่มแก้ไข หมดคำถามแล้วครับจะนำข้อมูลที่ได้จากอาจาร์ยและจากคุณbank9597 ในอาทิตย์นี้ ไปปรับใช้กับโปรแกรมที่เขียนขึ้นใหม่

Re: เรียงลำดับในComboBox

Posted: Fri Nov 18, 2011 3:40 pm
by bank9597
:D สู้ๆครับ