[Help] Lọc và sắp xếp dữ liệu theo hàng ngang (2 người xem)

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

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

oppla

Thành viên mới
Tham gia
28/6/10
Bài viết
4
Được thích
0
Xin Chào,

Mình có yêu cầu như file đính kèm: Lọc và sắp xếp dữ liệu theo chiều ngang. Trong đó mình đã theo các hướng dẫn của GPE làm được việc lọc và loại bỏ các dữ liệu trùng lặp. Giờ phần việc là dựa trên các thông tin của các dữ liệu chính đã được lọc, điền các thông tin của các dữ liệu phụ (bao gồm cả các dữ liệu trùng) theo hàng ngang.

Yêu cầu có vẻ khó hiểu, Các Bạn xem file đính kèm thì sẽ hiểu ngay thôi.

Cám ơn nhiều và chúc cuối tuần vui vẻ :)

PS: xin đừng sử dụng Macro.
 

File đính kèm

Mã:
Sub Tim()
Dim Sarr, darr, i, j, k
Dim Dic As Object
With Sheet1
    Sarr = .Range([B3], [B65536].End(3)).Resize(, 2).Value
End With
Set Dic = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(Sarr, 1)
    If Not Dic.exists(Sarr(i, 2)) Then
        Dic.Add Sarr(i, 2), ""
    End If
Next i
ReDim darr(1 To UBound(Sarr, 1), 1 To 4)
For i = 1 To UBound(Sarr, 1)
    If Not Dic.exists(Sarr(i, 1)) Then
        k = k + 1
        Dic.Add Sarr(i, 1), k
        darr(k, 1) = Sarr(i, 1)
        For j = 2 To 4
            darr(k, j) = Sarr(i, 2)
        Next j
    End If
Next i
[D3:G65536].ClearContents
[D3].Resize(, 4).Value = darr
Set Dic = Nothing
End Sub
Đoạn code trên em biết là chưa đúng yêu cầu bài, nhưng với đề tài của bạn ý, em muốn bài này dùng Dictionary thì ko biết nên sửa thế nào cho phù hợp ah
Nhờ anh chị giúp đỡ (Xin lỗi bạn Oppla vì đã chen ngang một chút, vì mình đang có băn khoăn giống bạn )
 
Xin Chào,

Mình có yêu cầu như file đính kèm: Lọc và sắp xếp dữ liệu theo chiều ngang. Trong đó mình đã theo các hướng dẫn của GPE làm được việc lọc và loại bỏ các dữ liệu trùng lặp. Giờ phần việc là dựa trên các thông tin của các dữ liệu chính đã được lọc, điền các thông tin của các dữ liệu phụ (bao gồm cả các dữ liệu trùng) theo hàng ngang.

Yêu cầu có vẻ khó hiểu, Các Bạn xem file đính kèm thì sẽ hiểu ngay thôi.

Cám ơn nhiều và chúc cuối tuần vui vẻ :)

PS: xin đừng sử dụng Macro.

Mã:
E3=IFERROR(INDEX(OFFSET(Doc,,1),SMALL(IF(Doc=$D3,ROW(Doc)-2),COLUMN(A1))),"-")

nhớ nhấn Ctrl Shift Enter để kết thúc
 
Mã:
Sub Tim()
Dim Sarr, darr, i, j, k
Dim Dic As Object
With Sheet1
    Sarr = .Range([B3], [B65536].End(3)).Resize(, 2).Value
End With
Set Dic = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(Sarr, 1)
    If Not Dic.exists(Sarr(i, 2)) Then
        Dic.Add Sarr(i, 2), ""
    End If
Next i
ReDim darr(1 To UBound(Sarr, 1), 1 To 4)
For i = 1 To UBound(Sarr, 1)
    If Not Dic.exists(Sarr(i, 1)) Then
        k = k + 1
        Dic.Add Sarr(i, 1), k
        darr(k, 1) = Sarr(i, 1)
        For j = 2 To 4
            darr(k, j) = Sarr(i, 2)
        Next j
    End If
Next i
[D3:G65536].ClearContents
[D3].Resize(, 4).Value = darr
Set Dic = Nothing
End Sub
Đoạn code trên em biết là chưa đúng yêu cầu bài, nhưng với đề tài của bạn ý, em muốn bài này dùng Dictionary thì ko biết nên sửa thế nào cho phù hợp ah
Nhờ anh chị giúp đỡ (Xin lỗi bạn Oppla vì đã chen ngang một chút, vì mình đang có băn khoăn giống bạn )

thử vậy xem
Mã:
Sub Tim()
Dim Sarr, darr, i, j, k
Dim Dic As Object
With Sheet1
    Sarr = .Range([B3], [B65536].End(3)).Resize(, 2).Value
End With

Set Dic = CreateObject("Scripting.Dictionary")

ReDim darr(1 To UBound(Sarr, 1), 1 To UBound(Sarr, 2))
For i = 1 To UBound(Sarr, 1)
    If Not Dic.exists(Sarr(i, 1)) Then
        k = k + 1
        Dic.Add Sarr(i, 1), k
        darr(k, 1) = Sarr(i, 1)
        darr(k, 2) = Sarr(i, 2)
     
    Else
        For j = 3 To 10000
        If j > UBound(darr, 2) Then ReDim Preserve darr(1 To UBound(Sarr, 1), 1 To j)
            If IsEmpty(darr(Dic.Item(Sarr(i, 1)), j)) Then
                darr(Dic.Item(Sarr(i, 1)), j) = Sarr(i, 2)
                Exit For
            End If
        Next j
    End If
Next i
[D3:G65536].ClearContents
[D3].Resize(k, UBound(darr, 2)).Value = darr
Set Dic = Nothing
End Sub
 
Hi Bác,

Cám ơn Bác đã hướng dẫn.

Áp dụng không thành vấn đề. Nếu Bác có chút thời gian, nhờ Bác giải thích cặn kẽ giúp công thức của bác. Tôi tách nhỏ công công của Bác ra từng phần đề tìm hiểu nhưng nhiều thứ vẫn chưa rõ ràng.

Cám ơn Bác Nhiều.

OppLa!
 
Hi Bác,

Cám ơn Bác đã hướng dẫn.

Áp dụng không thành vấn đề. Nếu Bác có chút thời gian, nhờ Bác giải thích cặn kẽ giúp công thức của bác. Tôi tách nhỏ công công của Bác ra từng phần đề tìm hiểu nhưng nhiều thứ vẫn chưa rõ ràng.

Cám ơn Bác Nhiều.

OppLa!

Mã:
E3=IFERROR(INDEX(OFFSET(Doc,,1),SMALL(IF(Doc=$D3,ROW(Doc)-2),COLUMN(A1))),"-")

hàm này thì giống y chang cái hàm bạn có trong file
mấu chốt là ở chổ hàm small



SMALL(IF(Doc=$D3,ROW(Doc)-2),COLUMN(A1))

===> nó sẻ tạo ra một mảng như vậy {0,0,0,1,0,1....} tức là cell nào - D3 thì trả về true, sai thì trả về false (0 và 1)
nếu đúng thì lấy số hàng đó ví dụ {"","","",5,"",7}
column(a1)=1, tức là nó lấy giá trị nhỏ nhất trong mảng trên (vd trên nó lấy 5)
kéo tiếp qua thì nó thành column(b1)=2, nó lấy giá trị nhỏ thứ 2 tức là số 7 trong ví dụ trên
 
Cám ơn Bác nhiều.

Xin giúp thêm một việc nữa. Khi tôi sử dụng công thứ để loại bỏ giá trị trùng, với số lượng dòng mới chỉ lên đến 300 thì bảng excel chạy cực kỳ chậm.

Xin hỏi có cách nào cũng làm việc này mày tốc độ xử lý vẫn tốt không.

PS: vẫn đề nghị không dùng Macro.

Cám ơn và chúc ngày làm việc vui vẻ :)!
 
Cám ơn Bác nhiều.

Xin giúp thêm một việc nữa. Khi tôi sử dụng công thứ để loại bỏ giá trị trùng, với số lượng dòng mới chỉ lên đến 300 thì bảng excel chạy cực kỳ chậm.

Xin hỏi có cách nào cũng làm việc này mày tốc độ xử lý vẫn tốt không.

PS: vẫn đề nghị không dùng Macro.

Cám ơn và chúc ngày làm việc vui vẻ :)!

bạn hãy đưa phần mảng vào trong name, có thể cải thiện tốc độ cũng đáng kể.
ngoài ra bạn có thể sử dụng advanced filter
hoặc remove duplicate
 
Cám ơn Bác,

Có điều là thế này, bảng này tôi lập ra để cho nhiều người sử dụng, các mẫu nhập được lập sẵn và sẽ có các bảng lựa chọn để trích các thông tin cần thiết khi báo cáo.
Vì có thể sẽ có những bạn không rành về excel để làm các việc khác, họ chỉ cần nhập liệu và có các thông tin liên quan để gởi đi khi cần thiết. Và cũng bởi vì công ty nhiều lúc hạn chế macro nên không dùng được.

Chính thế mà cần tốc độ nhanh và cố gắng tự động hoá càng nhiều càng tốt, các bạn không rành về excel lắm cũng làm việc được.

Cám ơn Bác đã hỗ trợ.

OppLa
 
Cám ơn Bác,

Có điều là thế này, bảng này tôi lập ra để cho nhiều người sử dụng, các mẫu nhập được lập sẵn và sẽ có các bảng lựa chọn để trích các thông tin cần thiết khi báo cáo.
Vì có thể sẽ có những bạn không rành về excel để làm các việc khác, họ chỉ cần nhập liệu và có các thông tin liên quan để gởi đi khi cần thiết. Và cũng bởi vì công ty nhiều lúc hạn chế macro nên không dùng được.

Chính thế mà cần tốc độ nhanh và cố gắng tự động hoá càng nhiều càng tốt, các bạn không rành về excel lắm cũng làm việc được.

Cám ơn Bác đã hỗ trợ.

OppLa

nếu dùng hàm thì chỉ còn cách đưa phần mảng vào trong name thôi
 
Web KT

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

Back
Top Bottom