PIVOT dữ liệu hay phải viết code?

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

Benbin

Thành viên mới
Tham gia
6/8/08
Bài viết
6
Được thích
0
Mình có 1 file báo giá excel nhiều cột trong đó có cột mã báo(DQ) giá và phiên bản báo giá(Rev No). Có cái yêu cầu là phải sắp xếp lại thứ tự báo giá theo DQ và kiểm tra trong cùng 1 DQ thì nếu RevNo chỉ bằng 0 và không lên được 1 hay lớn hơn thì liệt kê ra 1 bảng khác (cùng hay khác sheet đều được).

Mục đích là xem cái báo giá nào chưa có phiên bản 1, 2 ... gì đã bị thất bại từ số 0.

Mình đính kèm file có 2 sheet Table là dữ liệu, result là kết quả để mọi người rõ nghĩa hơn và giúp mình.

Cảm ơn !
 

File đính kèm

Mình có 1 file báo giá excel nhiều cột trong đó có cột mã báo(DQ) giá và phiên bản báo giá(Rev No). Có cái yêu cầu là phải sắp xếp lại thứ tự báo giá theo DQ và kiểm tra trong cùng 1 DQ thì nếu RevNo chỉ bằng 0 và không lên được 1 hay lớn hơn thì liệt kê ra 1 bảng khác (cùng hay khác sheet đều được).
Mục đích là xem cái báo giá nào chưa có phiên bản 1, 2 ... gì đã bị thất bại từ số 0.
Mình đính kèm file có 2 sheet Table là dữ liệu, result là kết quả để mọi người rõ nghĩa hơn và giúp mình.
Cảm ơn !
Dùng PivotTable xem sao, đưa cả 2 cột vào Row Labels, Filter RevNo = 0.
 

File đính kèm

Cám ơn Leonguyenz,

File của bạn dòng đầu tiên dữ liệu không liệt kê thành 3 dòng tương tự như sheet result của mình. Có cách nào liệt kê luôn không vì các cột phía sau của nó thì số liệu sẽ khác nhau(do mình lược bớt các cột phía sau nó nên thấy giống.
 
Cám ơn Leonguyenz,

File của bạn dòng đầu tiên dữ liệu không liệt kê thành 3 dòng tương tự như sheet result của mình. Có cách nào liệt kê luôn không vì các cột phía sau của nó thì số liệu sẽ khác nhau(do mình lược bớt các cột phía sau nó nên thấy giống.
Thử code này xem file nhen vì Pivot sẽ không lấy được yêu cầu của bạn

[GPECODE=vb]
Sub GPEDQ()
Dim i As Long, k As Long, sArr
sArr = Range("A2:B49").Value 'Gan vung du lieu vao mang
With CreateObject("Scripting.Dictionary")
For i = 1 To UBound(sArr)
If Not .Exists(sArr(i, 1)) Then
k = k + 1
.Add (sArr(i, 1)), k
End If
If sArr(i, 2) > 0 Then
.Remove (sArr(i, 1))
End If
Next
k = 0
For i = 1 To UBound(sArr)
If VBA.InStr(VBA.Join(.Keys, ","), sArr(i, 1)) Then
k = k + 1
sArr(k, 1) = sArr(i, 1)
sArr(k, 2) = sArr(i, 2)
End If
Next
With Range("G2").Resize(k, 2) 'Tra ket qua ra sheet hien hanh
.Value = sArr
.Sort [G1], xlAscending 'Sort lai theo cot G1
End With
End With
End Sub
[/GPECODE]
 

File đính kèm

Cám ơn mnhung49,

Code của bạn gần đúng yêu cầu mình rồi nhưng sao còn sót 1 cái DQ 20-312 có REV là 1 mà nó vẫn đưa ra kết quả mà không bỏ đi. Mình có thêm 1 vấn đề nữa là nếu dữ liệu của mình còn nhiều cột phía sau nữa thì như thế nào mình gửi file mới có thêm 1 cột nữa, sắp xếp và lọc chỉ dựa trên 2 cột đầu thôi.
 

File đính kèm

Cám ơn mnhung49,

Code của bạn gần đúng yêu cầu mình rồi nhưng sao còn sót 1 cái DQ 20-312 có REV là 1 mà nó vẫn đưa ra kết quả mà không bỏ đi. Mình có thêm 1 vấn đề nữa là nếu dữ liệu của mình còn nhiều cột phía sau nữa thì như thế nào mình gửi file mới có thêm 1 cột nữa, sắp xếp và lọc chỉ dựa trên 2 cột đầu thôi.
Vậy thì thử file này xem sao.
 
Lần chỉnh sửa cuối:
Cám ơn bác Ba Tê,

Code của bác có vẻ cho phép dữ liệu chạy đến cuối sheet luôn nhưng khi em cho thêm vài dòng dữ liệu vào bảng thì kết quả phải như cũ vì nó không thỏa mãn điều kiện nhưng hàm của bác lại cho nó ra kết quả luôn.


Em muốn cột kết quả có thêm cột khác nứa phía sau (như cột DIS) thì cần chỉnh ở đâu?
 

File đính kèm

Lần chỉnh sửa cuối:
Cám ơn bác Ba Tê,

Code của bác có vẻ cho phép dữ liệu chạy đến cuối sheet luôn nhưng khi em cho thêm vài dòng dữ liệu vào bảng thì kết quả phải như cũ vì nó không thỏa mãn điều kiện nhưng hàm của bác lại cho nó ra kết quả luôn.


Em muốn cột kết quả có thêm cột khác nứa phía sau (như cột DIS) thì cần chỉnh ở đâu?
Vậy thì khác, chạy code này thử xem sao.
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, Dic As Object
Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("TABLE")
    sArr = .Range(.[A2], .[A65536].End(xlUp)).Resize(, 100).Value
End With
ReDim dArr(1 To UBound(sArr, 1), 1 To 100)
For I = 1 To UBound(sArr, 1)
    If sArr(I, 2) > 0 Then
        If Not Dic.Exists(sArr(I, 1)) Then
            Dic.Add sArr(I, 1), ""
        End If
    End If
Next I
For I = 1 To UBound(sArr, 1)
    If Not Dic.Exists(sArr(I, 1)) Then
        K = K + 1
        For J = 1 To 100
            dArr(K, J) = sArr(I, J)
        Next J
    End If
Next I
With Sheets("RESULT")
    .[E3:E10000].Resize(,100).ClearContents
    If K Then
        .[E3].Resize(K, 100).Value = dArr
        .[E3].Resize(K, 100).Sort Key1:=.[E3]
    End If
End With
Set Dic = Nothing
End Sub
Trong Sub các số 100 là tôi cho dữ liệu có 100 cột, bạn muốn mấy cột thì sửa số 100 lại
 
Lần chỉnh sửa cuối:
Cám ơn bác Batê nhiệt tình giúp đỡ,

Code bác cho có vẻ ổn rồi chỉ còn mấy cái cột dữ liệu phía sau giống như cột Dis khi em thêm cột thì bên kết quả nó không ra cái gì hết.
Nếu cột REV NO không nằm cột B mà nằm ở cột C (cột B chứa dữ liệu khác, có thể bỏ qua) thì cần đổi gì trong code vậy bác.
Cám ơn nhìu nhìu !
 
Cám ơn bác Batê nhiệt tình giúp đỡ,

Code bác cho có vẻ ổn rồi chỉ còn mấy cái cột dữ liệu phía sau giống như cột Dis khi em thêm cột thì bên kết quả nó không ra cái gì hết.
Nếu cột REV NO không nằm cột B mà nằm ở cột C (cột B chứa dữ liệu khác, có thể bỏ qua) thì cần đổi gì trong code vậy bác.
Cám ơn nhìu nhìu !
Tôi đã chỉnh lại Sub trên bài #8.
Điều kiện cột nào phải ghi rõ trong code.
Nếu bạn muốn tùy ý bạn thì bạn tự viết code cho bạn xài thôi. Hỏi chung chung sao biết mà trả lời.
 
Lần chỉnh sửa cuối:
Cám ơn bác Batê nhiệt tình giúp đỡ,

Code bác cho có vẻ ổn rồi chỉ còn mấy cái cột dữ liệu phía sau giống như cột Dis khi em thêm cột thì bên kết quả nó không ra cái gì hết.
Nếu cột REV NO không nằm cột B mà nằm ở cột C (cột B chứa dữ liệu khác, có thể bỏ qua) thì cần đổi gì trong code vậy bác.
Cám ơn nhìu nhìu !

Bạn đưa dữ liệu thật lên đi vì trong code hơi phức tạp trong đó sArr(I, 2) tương đương cột B Rev No, (sArr, 1) tương đương cột A DQ
 
Cảm ơn các bác, em đã mò mẩm và hiểu được chút chút code của bác Batê nên chỉnh lại được rồi, GPE muôn năm.
 
Web KT

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

Back
Top Bottom