Sắp xếp trong mảng

Liên hệ QC

phihndhsp

Thành viên gạo cội
Tham gia
26/12/09
Bài viết
3,363
Được thích
2,488
Giới tính
Nam
Nghề nghiệp
Giáo Viên
tôi có 1 vấn đề xin được các cao thủ chỉ giúp, xin chân thành cảm ơn
trong sheet tính lại nếu tôi chọn tại ô J3 mã nào thì những ngày tháng của mã đó ra đồng thời có sắp xếp theo ngày
tôi đã đưa được dữ liệu ra và cũng dùng macro ghi để sắp xếp được dữ liệu

nhưng bây giờ tôi muốn thực hiện sắp xếp trong mảng luôn cho gọn không dùng macro ghi nữa
do tôi chưa quen cách viết trên ngôn ngữ VBA cho lắm nên nhờ các cao thủ xem dùm, xin cảm ơn
 

File đính kèm

tôi có 1 vấn đề xin được các cao thủ chỉ giúp, xin chân thành cảm ơn
trong sheet tính lại nếu tôi chọn tại ô J3 mã nào thì những ngày tháng của mã đó ra đồng thời có sắp xếp theo ngày
tôi đã đưa được dữ liệu ra và cũng dùng macro ghi để sắp xếp được dữ liệu

nhưng bây giờ tôi muốn thực hiện sắp xếp trong mảng luôn cho gọn không dùng macro ghi nữa
do tôi chưa quen cách viết trên ngôn ngữ VBA cho lắm nên nhờ các cao thủ xem dùm, xin cảm ơn
Sau khi đặt kết quả vào sheet, bạn Sort bằng công cụ sort của Excel cũng được vậy (đương nhiên là dùng VBA để ghi)
Chẳng hạn thế này:
PHP:
Sub LOC()
  Dim Rngs(), Arr(), i As Long, k As Long, tmp As String
  'On Error Resume Next
  With Sheet4
    Rngs = .Range("B5:B3001").Resize(, 6).Value
    tmp = .Range("J3").Value
    ReDim Arr(1 To UBound(Rngs, 1), 1 To 2)
    For i = 1 To UBound(Rngs, 1)
      If Rngs(i, 1) <> "" Then
        If Rngs(i, 1) = tmp Then
          k = k + 1
          Arr(k, 1) = Rngs(i, 2)
          Arr(k, 2) = Rngs(i, 4)
        End If
      End If
    Next i
   .Range("J5:K3000").ClearContents
   If k Then
     With .Range("J5").Resize(k, 2)
       .Value = Arr
       .Sort .Cells(1, 1), 1, Header:=xlYes
     End With
   End If
 End With
End Sub
 
em làm chạy tốt rồi nhưng em vẫn không hiểu 2 dòng này khác nhau chỗ nào một cái chạy được 1 cái không chạy được, xin được anh ndu giải thích dùm, xin chân thành cảm ơn

Sheets("Tinh Lai").Range("J4").Resize(k, 2).Sort .Cells(1, 1), 1, Header:=xlYes

With Sheets("Tinh Lai").Range("J4").Resize(k, 2)
.Sort .Cells(1, 1), 1, Header:=xlYes
End With


hình như code của anh chạy nếu mã làNG - 0042 thì không đúng lắm
 
Lần chỉnh sửa cuối:
em làm chạy tốt rồi nhưng em vẫn không hiểu 2 dòng này khác nhau chỗ nào một cái chạy được 1 cái không chạy được, xin được anh ndu giải thích dùm, xin chân thành cảm ơn

Sheets("Tinh Lai").Range("J4").Resize(k, 2).Sort .Cells(1, 1), 1, Header:=xlYes

With Sheets("Tinh Lai").Range("J4").Resize(k, 2)
.Sort .Cells(1, 1), 1, Header:=xlYes
End With

Cái .Cells(1, 1) của code dưới là ý muốn nói đến vị trí dòng 1 cột 1 của vùng Sheets("Tinh Lai").Range("J4").Resize(k, 2) ---> Cũng tức là cell J4
Còn cái .Cells(1, 1) của code trên chẳng có ý nghĩa gì cả (có chấm (.) mà không có With)
Vậy tai sao không ghi là Range("J4") luôn? Trước đây tôi đã giải thích vụ này rồi, giờ nhắc lại nhé:
- Nếu ghi thẳng là Range("J4"), mai này có chỉnh sửa lại vùng dữ liệu thì bạn phải chỉnh nhiều chổ
- Nếu dùng With... End With rồi dùng .Cells(1, 1) để thay Range("J4") thì mai này sửa lại vùng dữ liệu bạn chỉ sửa lại mỗi dòng đầu là xong ( chổ With).. ở dưới nó "tự theo"
 
em đã test cũng kỹ rồi, chạy rất ok, xin chân thành cảm ơn anh.
 
Web KT

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

Back
Top Bottom