Sắp xếp dồn dữ liệu (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

chickenexcel

Thành viên hoạt động
Tham gia
24/8/12
Bài viết
152
Được thích
28
Giới tính
Nam
Dear các anh/chị!
Hiện em có 1 file nhờ các bác giúp code:
- tự động sắp xếp dồn dữ liệu từ dưới lên trên nếu dữ liệu tại cột A trùng nhau
VD: nếu cùng 1 mặt hàng thì các mặt hàng phía dưới sẽ sắp xếp sau mặt hàng xuất hiện đầu tiên
- thêm 1 vấn đề e muốn hỏi ngoài ạ:
Em định dạng Conditional Formatting tại B3:B500 để làm cảnh báo, nhưng khi copy dữ liệu mới đè vào, vùng giới hạn sẽ bị thay đổi (VD: B3:B23)
có cách nào cố định được vùng format không ạ?
Cảm ơn cả nhà ạ!
 

File đính kèm

Dear các anh/chị!
Hiện em có 1 file nhờ các bác giúp code:
- tự động sắp xếp dồn dữ liệu từ dưới lên trên nếu dữ liệu tại cột A trùng nhau
VD: nếu cùng 1 mặt hàng thì các mặt hàng phía dưới sẽ sắp xếp sau mặt hàng xuất hiện đầu tiên
- thêm 1 vấn đề e muốn hỏi ngoài ạ:
Em định dạng Conditional Formatting tại B3:B500 để làm cảnh báo, nhưng khi copy dữ liệu mới đè vào, vùng giới hạn sẽ bị thay đổi (VD: B3:B23)
có cách nào cố định được vùng format không ạ?
Cảm ơn cả nhà ạ!
Bạn thử:
PHP:
Option Explicit
Sub Test()
    Dim i As Long
    Worksheets.Add(before:=Worksheets(1)).Name = "KQ"
    Sheet1.Range("A2:D15").SpecialCells(xlCellTypeConstants, 23).Copy Sheets("KQ").Range("A1")
    Application.CutCopyMode = False
    Sheets("KQ").Columns("A:D").EntireColumn.AutoFit
    With Sheets("KQ")
        .Range("A:D").Sort Key1:=.Range("A2"), Order1:=xlDescending, Orientation:=xlTopToBottom, Header:=xlYes
        For i = .Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1
            If .Cells(i, 1) <> .Cells(i - 1, 1) Then
                .Cells(i, 1).EntireRow.Insert
            End If
        Next
    End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
cám ơn bác phulien1902
- Bác có thể chỉnh sửa giúp em, dữ liệu được sắp xếp ngay trong vùng chọn (từ A3 đến D15) không ạ? không cần copy đến file khác
- dữ liệu sau sắp xếp chưa được như kết quả mong muốn: theo thứ tự là cam, quýt, bưởi
còn dữ liệu sau chạy code là quýt, cam, bưởi ạ
Nhờ bác xem giúp
 
Upvote 0
cám ơn bác phulien1902
- Bác có thể chỉnh sửa giúp em, dữ liệu được sắp xếp ngay trong vùng chọn (từ A3 đến D15) không ạ? không cần copy đến file khác
- dữ liệu sau sắp xếp chưa được như kết quả mong muốn: theo thứ tự là cam, quýt, bưởi
còn dữ liệu sau chạy code là quýt, cam, bưởi ạ
Nhờ bác xem giúp
Sắp xếp Cam, Quýt, Bưởi dựa trên quy tắc nào vậy bạn?
 
Upvote 0
cám ơn bác phulien1902
- Bác có thể chỉnh sửa giúp em, dữ liệu được sắp xếp ngay trong vùng chọn (từ A3 đến D15) không ạ? không cần copy đến file khác
- dữ liệu sau sắp xếp chưa được như kết quả mong muốn: theo thứ tự là cam, quýt, bưởi
còn dữ liệu sau chạy code là quýt, cam, bưởi ạ
Nhờ bác xem giúp
Bạn thay bởi:
PHP:
Sub Test2()
    Dim i As Long
    With Sheet1
        .Range("A3:D15").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
        .Range("A:D").Sort Key1:=.Range("A2"), Order1:=xlDescending, Orientation:=xlTopToBottom, Header:=xlYes
        For i = .Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1
            If .Cells(i, 1) <> .Cells(i - 1, 1) Then
                .Cells(i, 1).EntireRow.Insert
            End If
        Next
    End With
End Sub
Riêng phần sắp xếp theo trình tự Cam, quýt, bưởi thì tôi chưa biết cách làm.
 
Upvote 0
Riêng phần sắp xếp theo trình tự Cam, quýt, bưởi thì tôi chưa biết cách làm.
Cảm ơn bác, vậy cũng tốt rồi ạ, em tính cách khác vậy
- Còn vấn đề 2:
Em định dạng Conditional Formatting tại B3:B500 để làm cảnh báo, nhưng khi copy dữ liệu mới đè vào, vùng giới hạn sẽ bị thay đổi (VD: B3:B23)
có cách nào cố định được vùng format không ạ?
bác giúp em được không? với điều kiện CF là: AND($C3<>"",LEN($C3)<>16)
Cảm ơn ạ!
 
Upvote 0
Cảm ơn bác, vậy cũng tốt rồi ạ, em tính cách khác vậy
- Còn vấn đề 2:

bác giúp em được không? với điều kiện CF là: AND($C3<>"",LEN($C3)<>16)
Cảm ơn ạ!
Bạn làm như sau:
1. Quét chọn vùng dữ liệu cần tô màu
2. vào Data --> Conditional Formatting ---> Mnage Rules.. ----> New Rules ---> Use a formula to determine which cells to formula
3. Nhập công thức như hình dưới
223853
 
Upvote 0
A @phulien1902 ơi, định dạng CF thì e biết làm ạ, nhưng vấn đề là khi copy dữ liệu từ file khác đè vào dữ liệu cũ, thì vùng CF bị thay đổi (ko cố định ở B3:B500) bác có thể hướng dẫn hoặc tạo cho e 1 code định dạng vùng đó được ko? (E thử dùng Macro ghi lại nhưng trong code ko ghi được CF)
 
Upvote 0
A @phulien1902 ơi, định dạng CF thì e biết làm ạ, nhưng vấn đề là khi copy dữ liệu từ file khác đè vào dữ liệu cũ, thì vùng CF bị thay đổi (ko cố định ở B3:B500) bác có thể hướng dẫn hoặc tạo cho e 1 code định dạng vùng đó được ko? (E thử dùng Macro ghi lại nhưng trong code ko ghi được CF)
Bạn thử:
PHP:
Sub ToMau()
    Dim LR As Long, i As Long
    Application.ScreenUpdating = False
    LR = Cells(Cells.Rows.Count, "B").End(xlUp).Row
    For i = 3 To LR
        If Cells(i, "C") <> Empty And Len(Cells(i, "C")) <> 16 Then
            Cells(i, "C").Interior.ColorIndex = 6
        Else
            Cells(i, "C").Interior.ColorIndex = 2
        End If
    Next
    Application.ScreenUpdating = True
End Sub
 
Upvote 0
Dear các anh/chị!
Hiện em có 1 file nhờ các bác giúp code:
- tự động sắp xếp dồn dữ liệu từ dưới lên trên nếu dữ liệu tại cột A trùng nhau
VD: nếu cùng 1 mặt hàng thì các mặt hàng phía dưới sẽ sắp xếp sau mặt hàng xuất hiện đầu tiên
- thêm 1 vấn đề e muốn hỏi ngoài ạ:
Em định dạng Conditional Formatting tại B3:B500 để làm cảnh báo, nhưng khi copy dữ liệu mới đè vào, vùng giới hạn sẽ bị thay đổi (VD: B3:B23)
có cách nào cố định được vùng format không ạ?
Cảm ơn cả nhà ạ!
code cho yêu cầu 1
Mã:
Sub SapXep_Don()
Dim Nguon, Dong, Cot
Dim Mang
Dim Kq
Dim i, j, k, x, z, t
Nguon = Sheet1.Range("A3:D15")
Dong = UBound(Nguon)
Cot = UBound(Nguon, 2)
ReDim Mang(1 To Dong, 1 To 2)
With CreateObject("Scripting.Dictionary")
    For i = 1 To Dong
        If Nguon(i, 1) <> "" Then
            If .exists(Nguon(i, 1)) = 0 Then
                .Add Nguon(i, 1), .Count + 1
                Mang(.Count, 1) = Nguon(i, 1)
                Mang(.Count, 2) = i
            Else
                k = .Item(Nguon(i, 1))
                Mang(k, 2) = Mang(k, 2) & " " & i
            End If
        End If
    Next i
    ReDim Kq(1 To Dong, 1 To Cot)
    k = 0
    For i = 1 To .Count
        k = k + 1
        For Each j In Split(Mang(i, 2))
            z = CLng(j)
            k = k + 1
            For x = 1 To Cot
                Kq(k, x) = Nguon(z, x)
            Next x
        Next j
    Next i
End With
Sheet1.Range("G3").Resize(Dong, Cot) = Kq
End Sub
 
Upvote 0
PHP:Sao chép.
Sub ToMau()
Dim LR As Long, i As Long
Application.ScreenUpdating = False
LR = Cells(Cells.Rows.Count, "B").End(xlUp).Row
For i = 3 To LR
If Cells(i, "C") <> Empty And Len(Cells(i, "C")) <> 16 Then
Cells(i, "C").Interior.ColorIndex = 6
Else
Cells(i, "C").Interior.ColorIndex = 2
End If
Next
Application.ScreenUpdating = True
End Sub
Anh ơi code chạy chưa đúng ạ, nó tô toàn bộ các cell chứa ký tự chứ không theo điều kiện
(nếu sau khi chạy code, mình sửa lại chỗ sai thỏa mãn điều kiện len =16 thì nó có bỏ tô màu không ạ?hay phải chạy lại code?)
Anh xem giúp
code chạy ngon quá ạ, thank bác, em chỉ sửa lại đoạn cuối cho nó sắp xếp trong bảng A:D thôi, còn bảng G chỉ là hình minh họa kết quả :wiggle:
Bác giúp em nốt code cho bài 2 được không :{{
 
Upvote 0
Anh ơi code chạy chưa đúng ạ, nó tô toàn bộ các cell chứa ký tự chứ không theo điều kiện
(nếu sau khi chạy code, mình sửa lại chỗ sai thỏa mãn điều kiện len =16 thì nó có bỏ tô màu không ạ?hay phải chạy lại code?)
Anh xem giúp

code chạy ngon quá ạ, thank bác, em chỉ sửa lại đoạn cuối cho nó sắp xếp trong bảng A:D thôi, còn bảng G chỉ là hình minh họa kết quả :wiggle:
Bác giúp em nốt code cho bài 2 được không :{{
Bạn muốn lập CF cho cột nào & điều kiện như thế nào
 
Upvote 0
Upvote 0
đây ạ, trăm sự nhờ bác :D
Thử cách dưới đây
- Chèn thêm 1 module, dán đoạn code dưới đây vào
Mã:
Sub Condition_F()
Dim i
i = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
Sheet1.Range("A3", "D" & i).FormatConditions.Delete
With Sheet1.Range("B3", "B" & i).FormatConditions.Add(Type:=xlExpression, Formula1:="=and(C3<>"""",len(C3)<>16)")
    .Interior.ColorIndex = 6
End With
End Sub
- Di chuột vào sheets tab "Sheet1", chon view code, dán đoạn code dưới đây vào
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
    If Not Intersect(Target, Range("A3:D500")) Is Nothing Then
        Call Condition_F
    End If
Application.EnableEvents = True
End Sub
Thử thay đổi ô nào đó trong A3 : D500 xem sao
 
Lần chỉnh sửa cuối:
Upvote 0
Thử thay đổi ô nào đó trong A3 : D500 xem sao
Thank bác CHAOQUAY bận rộn mấy hôm chưa kịp xem bài
Qua test cost của bác chạy tốt, nhưng bị 1 nhược điểm là không undo được do chạy VBA
Em đã dùng cách khác nên cũng tạm ổn rồi ạ!
Cảm ơn tất cả các bác đã quan tâm giúp đỡ
 
Upvote 0
Web KT

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

Back
Top Bottom