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

ปรัีบโค๊ดค่อนข้างยากอยู่ครับ
ลองเรียงข้อมูลใน "Data_Seminar" น่าจะง่ายกว่าน่ะครับ
หรือยังไง ลองส่งไฟล์แนบมาดูครับ
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

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

Re: เรียงลำดับในComboBox
Posted: Thu Nov 17, 2011 6:26 pm
by bank9597

ผมได้ลองปรับโค๊ดมาให้ครับ
เป็นการแก้ไขด้วยวิธีที่ค่อนข้างจะลักไก่ไปนิด เข้าใจว่าคุณต้องการเรียงลำดับของชื่อ โดยยึดตัวเลขท้ายประโยคเป็นหลัก เวลาเราทำการ Filter จึงทำได้ยาก (สำหรับผม)
ผมเลยเปลี่ยนมาทำ Filter ในช่อง ID แทน สามารถใช้งานได้ ยังไงลองนำไปปรับแต่งเองอีกหน่อย ก็น่าจะใช้ได้แล้วครับ
อาจารย์จะเน้นมากครับ หากเราต้องการทำงานกับ VBA เราจึงพยายามบันทึกมาโครครับ
สำเนาของ เรียงลำดับในComboBox.xls
Re: เรียงลำดับในComboBox
Posted: Fri Nov 18, 2011 7:59 am
by yodpao.b
bank9597 wrote:
รู้สึกว่าจะยากไปสำหรับผมแล้วครับ คงต้องพึ่งอาจารย์แล้วครับ
แต่แนะนำนิดนึงครับ ในการบันทึกข้อมูลมาจัดเก็บนั้น ผมเข้าใจว่าคุณจะทำการบันทึกผ่านฟอร์มที่สร้างขึ้นมา ทีนี้เมื่อมองรูปแบบการจัดเรียงแล้ว ยังสลับกันอยู่ เข้าใจว่าในขั้นตอนการบันทึกข้อมูลนั้นไม่มีระบบ RUN ตัวเลขให้เป็นไปตามลำดับ ดังนั้นเพื่อให้ทำงานง่ายและเราไม่ต้องเพิ่มเติมโค๊ดบ่อยๆ การจัดเก็บข้อมูลก็น่าจะเป็นสิ่งที่ควรจัดการให้ดีเป็นเบื้อนต้นก่อนครับ
ยังไงจะลองๆหาวิธีช่วยอีกแรงครับ

รบกวนขอตัวอย่างการจัดเก็บที่เป็นระบบด้วยครับ ขอบคุณครับ
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

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

Re: เรียงลำดับในComboBox
Posted: Fri Nov 18, 2011 10:06 am
by snasui

ลองดูตัวอย่างการ 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

ลองปรับ 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

สู้ๆครับ