bebo021999
Thành viên gạo cội




- Tham gia
- 26/1/11
- Bài viết
- 5,957
- Được thích
- 8,746
- Giới tính
- Nam
- Nghề nghiệp
- GPE
Mình đang lọ mọ viết code để sort ngày tháng từ 2 cột
VD:
Cột C | Cột D
1-Feb-17 | 6-Mar-2017
5-Dec-16 | 7-May-17
<Ô trống> | 11-Feb-16
1-Sep-17 | 2-Oct-17
Yêu cầu:
1) Sort Cột C và D theo cột C. Cột C có thể có ô trống. Ô trống này sẽ được lấy ngày tương ứng bên cột D. VD: C3=D3
2) Sort tại chỗ, không chuyển dữ liệu qua chỗ khác.
Code viết xong bị lỗi: Cột C trả về giá trị text nên sort bị sai.
Mình đi theo hướng copy sang sheet mới, sort xong copy ngược lại. không biết có hợp lý không?
Hình thù em nó thế này:
Xin cảm ơn.
VD:
Cột C | Cột D
1-Feb-17 | 6-Mar-2017
5-Dec-16 | 7-May-17
<Ô trống> | 11-Feb-16
1-Sep-17 | 2-Oct-17
Yêu cầu:
1) Sort Cột C và D theo cột C. Cột C có thể có ô trống. Ô trống này sẽ được lấy ngày tương ứng bên cột D. VD: C3=D3
2) Sort tại chỗ, không chuyển dữ liệu qua chỗ khác.
Code viết xong bị lỗi: Cột C trả về giá trị text nên sort bị sai.
Mình đi theo hướng copy sang sheet mới, sort xong copy ngược lại. không biết có hợp lý không?
Hình thù em nó thế này:
PHP:
Sub sort()
Dim Date1(), Date2() As Long
Dim R As Range
Dim WS As Worksheet
Dim i, lR As Long
Application.ScreenUpdating = False
lR = Cells(Rows.Count, "D").End(xlUp).Row
'read date into Arr
ReDim Date1(1 To lR)
ReDim Date2(1 To lR)
For i = 1 To lR
Date1(i) = Cells(i, "C").Value
Date2(i) = Cells(i, "D").Value
If Cells(i, "C") = "" Then
Date1(i) = Cells(i, "D").Value
End If
Next i
'Copy Arr to tem sheet
Set WS = ThisWorkbook.Worksheets.Add
Set R = WS.Range("A1").Resize(lR, 1)
R = Application.Transpose(Date1)
R.Offset(0, 1) = Application.Transpose(Date2)
'Sort
Union(R, R.Offset(0, 1)).sort key1:=R, order1:=xlAscending
For i = 1 To lR
'Copy sort date back to array
Date1(i) = R(i, 1)
Date2(i) = R(i, 1).Offset(0, 1)
Next i
Application.DisplayAlerts = False
WS.Delete
Application.DisplayAlerts = True
'Read array to range
Range("C1", Cells(lR, "C")) = Application.Transpose(Date1)
Range("D1", Cells(lR, "D")) = Application.Transpose(Date2)
Application.ScreenUpdating = True
End Sub
Xin cảm ơn.