Page 1 of 1

มือใหม่ลองทำเรียงลำดับข้อมูลค่ะ..ขอคำแนะนำค่ะ

Posted: Sun Feb 27, 2011 5:35 am
by LeeNa
สวัสดีค่ะ...

รบกวนขอคำแนะนำผู้รู้ vba ค่ะ เพราะมือใหม่จริงๆ

ลองฝึกเขียนโค้ดง่ายๆ มาบ้างแล้ว ตอนนี้กำลังเรียนรู้เรื่อง array ค่ะ
คืออยากสร้าง input box ใส่ตัวเลขหลายๆ ตัว
แล้วแสดงผลตัวเลขเรียงลำดับจากมากไปน้อยค่ะ
ไม่ทราบว่าสามารถทำได้หรือไม่ค่ะ

ลอง search หาดูส่วนมากจะเจอให้ใส่ค่าใน Excel แล้วเขียนโค้ด
แต่เป็นไปได้หรือไม่ที่จะรับค่าจาก input box มาเก็บไว้ค่ะ

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

รบกวนด้วยนะคะ :)

Re: มือใหม่ลองทำเรียงลำดับข้อมูลค่ะ..ขอคำแนะนำค่ะ

Posted: Sun Feb 27, 2011 8:28 am
by snasui
:D ลองศึกษาตัวอย่างที่นี่ครับ http://www.mrexcel.com/forum/showthread.php?t=45901

http://www.cpearson.com/excel/SortingArrays.aspx

Code ของ Pearson http://www.cpearson.com/Zips/modQSortInPlace.zip

Re: มือใหม่ลองทำเรียงลำดับข้อมูลค่ะ..ขอคำแนะนำค่ะ

Posted: Sun Feb 27, 2011 5:38 pm
by snasui
:D ผมลองทำตัวอย่างการ Sort แบบ Bubble Sort ตามด้านล่าง ลองปรับใช้กับงานจริงดูครับ

Code: Select all

Sub BubbleSort(List() As Integer)
Dim First As Integer, Last As Integer
Dim i As Integer, j As Integer
Dim Temp
 First = LBound(List)
 Last = UBound(List)
 For i = First To Last - 1
     For j = i + 1 To Last
          If List(i) > List(j) Then
               Temp = List(j)
               List(j) = List(i)
               List(i) = Temp
          End If
     Next j
Next i
 End Sub

Sub SortArrayNums()
Dim a(5) As Integer
Dim i As Integer
a(0) = 8
a(1) = 3
a(2) = 2
a(3) = 10
a(4) = 1
BubbleSort a()
For i = 1 To UBound(a)
    MsgBox a(i)
Next i
End Sub

Re: มือใหม่ลองทำเรียงลำดับข้อมูลค่ะ..ขอคำแนะนำค่ะ

Posted: Thu Mar 03, 2011 8:05 pm
by LeeNa
ขอบคุณมากๆ ค่ะ คุณsnasui

ลองศึกษา และปรับใช้แล้วค่ะ

ขอบคุณที่ช่วยเหลือนะคะ...

Re: มือใหม่ลองทำเรียงลำดับข้อมูลค่ะ..ขอคำแนะนำค่ะ

Posted: Thu Mar 03, 2011 8:14 pm
by LeeNa
รบกวนถามเพิ่มเติมค่ะ

ตอนนี้ฝึกทำ userform ค่ะ
แต่งมอยู่หลายวัน ไม่เป็นผลค่ะ

คือ..สร้าง textbox 3 อัน ให้ใส่ชื่อ นามสกุล และ อายุค่ะ
พอกดปุ่ม Add แล้วอยากให้แสดงผลใน listbox ซึ่งเป็น multi-column listbox ค่ะ
มีปัญหาคือ ไม่สามารถแสดงค่าใน listbox ได้ค่ะ
แต่ถ้าใส่เพียง 1 column สามารถแสดงค่าได้ค่ะ แต่รู้สึกว่าอ่านยากแล้วดูไม่เป็นระบบ เลยอยากทราบว่ามีวิธีแสดงผลสำหรับหลายคอลัมน์หรือไม่คะ

:flw:

Re: มือใหม่ลองทำเรียงลำดับข้อมูลค่ะ..ขอคำแนะนำค่ะ

Posted: Thu Mar 03, 2011 9:20 pm
by snasui
:D ลองส่งตัวอย่างไฟล์มาดูครับ

Re: มือใหม่ลองทำเรียงลำดับข้อมูลค่ะ..ขอคำแนะนำค่ะ

Posted: Fri Mar 04, 2011 5:07 am
by LeeNa
แนบไฟล์ค่ะ
อาจจะดูงงๆนะคะ เพราะทำไป หาข้อมูลจากแต่ละฟอรัมไปปรับใช้ค่ะ :tt:

1. ประเด็นคือไม่ค่อยเข้าใจเรื่อง class แต่พยายามจะลองใช้ เลยไม่มั่นใจว่าควรเขียนโค้ดที่ไหนดีระหว่าง class กับ form ค่ะ
2. ลองแก้ไขโค้ด ปรากฎว่าแสดงใน listbox แล้ว แต่พอใส่ข้อมูลเข้าไปรายการที่ 2 กลับไปแทนที่เดิม ไม่ยอมขึ้นบรรทัดใหม่ค่ะ
(อยากให้ขึ้นผลแบบใน sheet excel ค่ะ)
3. คิดว่าสืบเนื่องจากข้อ 2 เลยยังไม่สามารถ sort data ได้ค่ะ
4. อยากทราบว่า sort data จำเป็นต้องเขียนเป็นฟังก์ชั่นหรือไม่คะ

รบกวนหลายคำถามเลยค่ะ...ตอนนี้เริ่มท้อแท้กับการศึกษา vb
เพราะใช้เวลามาสองสัปดาห์เต็มๆ กับโจทย์นี้ค่ะ
แต่ยังไงก็จะพยายามหาโจทย์ใหม่ทำเรื่อยๆค่ะ :cry:
ขอบคุณความรู้อันมากมายจากเวปนี้จริงๆ ค่ะ

Re: มือใหม่ลองทำเรียงลำดับข้อมูลค่ะ..ขอคำแนะนำค่ะ

Posted: Sat Mar 05, 2011 7:07 am
by snasui
:D ปกติการใช้ Class ก็เพื่อกำหนด Object , Properties, Method, Events ต่าง ๆ ขึ้นมาเองได้ เป็นประโยชน์ได้หากใช้ Window API Function แล้วมันดูซับซ้อนวุ่นวาย ก็สามารถเขียน Class ขึ้นมาใช้เองได้ครับ

ส่วน Form ก็เพื่อใช้ในลักษณะของ UI (User Interface) สามารถไปอ้างอิงเอา Object, Properties, Method , Events จาก Class ที่เราสร้างขึ้นเองมาใช้ได้

สำหรับการ Sort ใน VBA นั้นจะเขียนฟังก์ชั่นหรือไม่เขียนฟังก์ชั่นขึ้นมาก็ได้ครับ

ส่วนการ Add Item ใน Muti Column ListBox นั้นรู้สึกว่าจะทำไม่ได้ครับ

ที่ผมคิดว่าน่าจะทำได้ก็คือต้องเขียน Array ให้รับค่าจาก TextBox กรณีมีการ Add Item ก็เป็นการเพิ่มสมาชิกของ Array นั้น จากนั้นนำ Array มา Loop วางค่าต่าง ๆ ลงใน ListBox หากมีเวลาจะลองทดสอบดูครับ

Re: มือใหม่ลองทำเรียงลำดับข้อมูลค่ะ..ขอคำแนะนำค่ะ

Posted: Sun Mar 06, 2011 9:35 pm
by snasui
:D ผมใช้ ListCount มาช่วยในการ AddItem ตาม Code ด้านล่างครับ

Code: Select all

Private Sub cmdAddStock_Click()
           With frmStock.lstSelectStock
                .ColumnCount = 5
                .ColumnWidths = "90;60;40;60;40"
                .AddItem
                .Column(0, .ListCount - 1) = frmStock.cboStockName.Text
                .Column(1, .ListCount - 1) = frmStock.cboStockName.Text
                .Column(2, .ListCount - 1) = frmStock.txtStockID.Text
                .Column(3, .ListCount - 1) = frmStock.txtReturn.Text
                .Column(4, .ListCount - 1) = frmStock.txtSD.Text
            End With
End Sub
ดูไฟล์แนบประกอบครับ