Sắp xếp dữ liệu.

  • Thread starter Thread starter sealand
  • Ngày gửi Ngày gửi
Liên hệ QC

sealand

Thành viên gạo cội
Tham gia
16/5/08
Bài viết
4,883
Được thích
7,688
Giới tính
Nam
Nghề nghiệp
Kế Toán
Giả sử có cột số bất kỳ A2:A20.Sử dung VBA và không áp dụng chức năng Sort của Excel
làm sao có thể sắp xếp theo thứ tự tăng dần
Nhờ anh em chỉ giúp, xin cảm ơn
 
Lần chỉnh sửa cuối:
đây cậu có thể dùng cái này nhé.
Dim cot As Range
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''
Set cot = Application.InputBox(" thu tu giam dan cua Cột ", Type:=8)
cot.Sort cot.Columns(1).Cells, xlDescending
 
Upvote 0
Bạn lưu ý giùm: Không dùng chức năng Sort của Excel nhé.
(Ý mình là muốn tìm giải thuật sắp xếp -lâu không dùng quên mất giờ mò lại mãi không ra)
 
Lần chỉnh sửa cuối:
Upvote 0
Upvote 0
Giả sử có cột số bất kỳ A2:A20.Sử dung VBA và không áp dụng chức năng Sort của Excel
làm sao có thể sắp xếp theo thứ tự tăng dần
Nhờ anh em chỉ giúp, xin cảm ơn
Giải pháp:
1. tạo 1 mảng chứa các phần tử của A2:A20
2. Dùng 2 vòng lặp so sách các phần tử i của mảng với phần tử i+1, nếu a(i) > a(i+1) thì dời vị trí.
Để áp dụng thực tế, tôi viết sub cho phép bạn chọn 1 vùng bất kỳ (trong 1 cột) và sắp xếp trong vùng đó.
Sub Sub SortMatritABC sort tăng dần
Sub Sub SortMatritBCA sort giảm dần

Mã:
Sub SortMatritABC()
Dim arRng, temp, iJ As Integer, iZ As Integer
If Selection.Columns.Count > 1 Then
  MsgBox "Ban chon " & Selection.Columns.Count & " cot !"
  Exit Sub
End If
rd = Selection.Row
rc = rd + Selection.Rows.Count - 1
c = Selection.Column
arRng = Selection
For iZ = 1 To UBound(arRng)
  For iJ = 1 To UBound(arRng) - 1
    temp = arRng(iJ, 1)
    If temp > arRng(iJ + 1, 1) Then
      arRng(iJ, 1) = arRng(iJ + 1, 1)
      arRng(iJ + 1, 1) = temp
    End If
  Next
Next
iZ = 1
For iJ = rd To rc
  Cells(iJ, c) = arRng(iZ, 1)
  iZ = iZ + 1
Next iJ
End Sub

Mã:
Sub SortMatritCBA()
Dim arRng, temp, iJ As Integer, iZ As Integer
If Selection.Columns.Count > 1 Then
  MsgBox "Ban chon " & Selection.Columns.Count & " cot !"
  Exit Sub
End If
rd = Selection.Row
rc = rd + Selection.Rows.Count - 1
c = Selection.Column
arRng = Selection
For iZ = 1 To UBound(arRng)
  For iJ = 1 To UBound(arRng) - 1
    temp = arRng(iJ, 1)
    If temp < arRng(iJ + 1, 1) Then
      arRng(iJ, 1) = arRng(iJ + 1, 1)
      arRng(iJ + 1, 1) = temp
    End If
  Next
Next
iZ = 1
For iJ = rd To rc
  Cells(iJ, c) = arRng(iZ, 1)
  iZ = iZ + 1
Next iJ
End Sub


Thuật toán của 2 sub này tôi lấy từ Sub Sort Matric của bác SA_DQ (bài 3) trong topic Sort Mảng!!
 
Upvote 0
Đúng rồi, code của Ndu và phamduylong đúng là cái mình đang loay hoay.
Xin cám ơn cả nhà nhé.
 
Upvote 0
Sort nhiều cột dùng mảng

Giả sử có cột số bất kỳ A2:A20.Sử dung VBA và không áp dụng chức năng Sort của Excel
làm sao có thể sắp xếp theo thứ tự tăng dần
Nhờ anh em chỉ giúp, xin cảm ơn
Sort bằng mảng không dùng chức năng sort của Excel 1 cột đã giải quyết xong.
Từ bài này, có thể mở rộng bài toán sort mảng như sau :
- Vùng chọn có n cột.
- Cột sort là cột m (1 <= m <= n)
Giải được bài toán này, sort mảng sẽ được ứng dụng rộng hơn vì khi sort, thường sort nhiều cột.
Mời các bạn cùng giải bài toán này.
 
Upvote 0
Sort bằng mảng không dùng chức năng sort của Excel 1 cột đã giải quyết xong.
Từ bài này, có thể mở rộng bài toán sort mảng như sau :
- Vùng chọn có n cột.
- Cột sort là cột m (1 <= m <= n)
Giải được bài toán này, sort mảng sẽ được ứng dụng rộng hơn vì khi sort, thường sort nhiều cột.
Mời các bạn cùng giải bài toán này.
Em nghĩ anh lên Google, search từ khóa VBA Sort multiDimensional Array cũng là 1 cách tham khảo
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom