T
Tớ có vấn đề này muốn tham khảo cách làm của mọi người. Đó là thủ tục sắp xếp dữ liệu.
Level 1
Sub Sapxep1(Byref MangMotchieu, Optional Byval Tangdan as Boolean=True)
....Bạn làm thế nào?
End Sub
Áp dụng: Thủ tục Sapxep1 cho phép bạn sắp xếp dữ liệu được đặt trong một mảng một chiều, kết quả thực hiện MangMotchieu được sắp xếp theo chiều tăng dần hoặc giảm dần.
Cách test, mình viết thủ tục để các bạn test kết quả của Sapxep1
==============Test For Sapxep1==============
Sub TestForSapxep1()
Const strSheet="Tên sheet để ghi kết quả"
Dim WS as Worksheet
Dim MangMotchieu(5)
MangMotchieu(1)=2
MangMotchieu(2)=1
MangMotchieu((3)=6
MangMotchieu(4)=0
MangMotchieu(5)=6
Set WS = Worksheets(strSheet)
'Sắp xếp tăng dần bằng thủ tục Sapxep1
Sapxep1 MangMotchieu
WS.Cells.Clear
For I=1 to 5
WS.Cells(I,1).Value=MangMotchieu(I)
End For
Set WS = Nothing
End Sub
========================================
Level 2
Sub Sapxep2(Byref MangHaichieu, Byaval CotSapxep as Integer, Optional Byval Tangdan as Boolean=True)
....Bạn làm thế nào?
End Sub
Áp dụng: Một bảng dữ liệu mà các bạn nhìn trên Sheet có thể hiểu nó là khối dữ liệu được đặt trong bảng 2 chiều (Dòng, Cột). Thủ tục Sapxep2 cho phép bạn sắp xếp dữ liệu được đặt trong một mảng hai chiều, kết quả thực hiện MangHaichieu được sắp xếp theo chiều tăng dần hoặc giảm dần theo một cột nào đó.
Giả sử mình có một bảng Danh mục hàng
| Mã hàng | Tên hàng | ĐV |
Cần sắp xếp bảng dữ liệu trên
Cách test, mình viết thủ tục để các bạn test kết quả của Sapxep2
==============Test For Sapxep2==============
Sub TestForSapxep2()
Const nCotSapxep=2
Const strSheet="Tên sheet để ghi kết quả"
Dim WS as Worksheet
Dim MangHaichieu(5,3) '5 dòng và 3 cột
MangHaichieu(1,1)="HH001" : MangHaichieu(1,2)="Chỉ khâu" : MangHaichieu(1,3)="Cuộn"
MangHaichieu(2,1)="HH002" : MangHaichieu(2,2)="Kim băng" : MangHaichieu(1,3)="Hộp"
MangHaichieu(3,1)="HH003" : MangHaichieu(3,2)="Vải Coton L3" : MangHaichieu(1,3)="m2"
MangHaichieu(4,1)="HH004" : MangHaichieu(4,2)="Vải Coton L1" : MangHaichieu(1,3)="m2"
MangHaichieu(5,1)="HH005" : MangHaichieu(5,2)="Vải Coton L2" : MangHaichieu(5,3)="m2"
Set WS = Worksheets(strSheet)
'Sắp xếp tăng dần mảng MangHaichieu bằng thủ tục Sapxep2 theo cột "Tên hàng"
Sapxep2 MangHaichieu, CotSapxep
WS.Cells.Clear
For I=1 To 5
For J=1 To 3
WS.Cells(I,J).Value=MangHaichieu(I,J)
End For
End For
Set WS = Nothing
End Sub
========================================
Trong lập trình VBA, việc sắp xếp mà dùng theo Sort của Excel không phải cách tốt (nó thuộc phạm vi ứng dụng người dùng) nên cần làm trong VBA.
Mình đã làm việc này rồi và có kết quả. Tuy nhiên rất muốn tham khảo các cách làm của các bạn để chọn ra một cách làm tối ưu nhất. Mình sẽ gửi cách của mình lên sau.
Level 1
Sub Sapxep1(Byref MangMotchieu, Optional Byval Tangdan as Boolean=True)
....Bạn làm thế nào?
End Sub
Áp dụng: Thủ tục Sapxep1 cho phép bạn sắp xếp dữ liệu được đặt trong một mảng một chiều, kết quả thực hiện MangMotchieu được sắp xếp theo chiều tăng dần hoặc giảm dần.
Cách test, mình viết thủ tục để các bạn test kết quả của Sapxep1
==============Test For Sapxep1==============
Sub TestForSapxep1()
Const strSheet="Tên sheet để ghi kết quả"
Dim WS as Worksheet
Dim MangMotchieu(5)
MangMotchieu(1)=2
MangMotchieu(2)=1
MangMotchieu((3)=6
MangMotchieu(4)=0
MangMotchieu(5)=6
Set WS = Worksheets(strSheet)
'Sắp xếp tăng dần bằng thủ tục Sapxep1
Sapxep1 MangMotchieu
WS.Cells.Clear
For I=1 to 5
WS.Cells(I,1).Value=MangMotchieu(I)
End For
Set WS = Nothing
End Sub
========================================
Level 2
Sub Sapxep2(Byref MangHaichieu, Byaval CotSapxep as Integer, Optional Byval Tangdan as Boolean=True)
....Bạn làm thế nào?
End Sub
Áp dụng: Một bảng dữ liệu mà các bạn nhìn trên Sheet có thể hiểu nó là khối dữ liệu được đặt trong bảng 2 chiều (Dòng, Cột). Thủ tục Sapxep2 cho phép bạn sắp xếp dữ liệu được đặt trong một mảng hai chiều, kết quả thực hiện MangHaichieu được sắp xếp theo chiều tăng dần hoặc giảm dần theo một cột nào đó.
Giả sử mình có một bảng Danh mục hàng
| Mã hàng | Tên hàng | ĐV |
Cần sắp xếp bảng dữ liệu trên
Cách test, mình viết thủ tục để các bạn test kết quả của Sapxep2
==============Test For Sapxep2==============
Sub TestForSapxep2()
Const nCotSapxep=2
Const strSheet="Tên sheet để ghi kết quả"
Dim WS as Worksheet
Dim MangHaichieu(5,3) '5 dòng và 3 cột
MangHaichieu(1,1)="HH001" : MangHaichieu(1,2)="Chỉ khâu" : MangHaichieu(1,3)="Cuộn"
MangHaichieu(2,1)="HH002" : MangHaichieu(2,2)="Kim băng" : MangHaichieu(1,3)="Hộp"
MangHaichieu(3,1)="HH003" : MangHaichieu(3,2)="Vải Coton L3" : MangHaichieu(1,3)="m2"
MangHaichieu(4,1)="HH004" : MangHaichieu(4,2)="Vải Coton L1" : MangHaichieu(1,3)="m2"
MangHaichieu(5,1)="HH005" : MangHaichieu(5,2)="Vải Coton L2" : MangHaichieu(5,3)="m2"
Set WS = Worksheets(strSheet)
'Sắp xếp tăng dần mảng MangHaichieu bằng thủ tục Sapxep2 theo cột "Tên hàng"
Sapxep2 MangHaichieu, CotSapxep
WS.Cells.Clear
For I=1 To 5
For J=1 To 3
WS.Cells(I,J).Value=MangHaichieu(I,J)
End For
End For
Set WS = Nothing
End Sub
========================================
Trong lập trình VBA, việc sắp xếp mà dùng theo Sort của Excel không phải cách tốt (nó thuộc phạm vi ứng dụng người dùng) nên cần làm trong VBA.
Mình đã làm việc này rồi và có kết quả. Tuy nhiên rất muốn tham khảo các cách làm của các bạn để chọn ra một cách làm tối ưu nhất. Mình sẽ gửi cách của mình lên sau.