Liệt kê sự xuất hiện từng mã hàng theo 3 tiêu chí: Số phiếu; Số lượng; Số thứ tự vào 3 cột (1 người xem)

Liên hệ QC

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

Nguyễn Hồng Quang

Thành viên GPE Hà Nội
Tham gia
8/6/07
Bài viết
1,203
Được thích
877
Giới tính
Nam
Nghề nghiệp
Kế toán
Em có 1 bảng dữ liệu chi tiết phát sinh các mã hàng theo từng phiếu.
Em Đã xử lý để rút gọn thành danh sách các mã hàng .
Tuy nhiên em cần bổ sung thêm 3 cột ghi chú để liệt kê sự xuất hiện của từng mã hàng theo 3 tiêu chí trong bảng dữ liệu chi tiết. 3 tiêu chí Gồm: Số phiếu; Số lượng; Số thứ tự
Mọi chi tiết em đã trình bày trong file excel gửi kèm
Mong các anh, chị và thầy cô GPE giúp em
Em xin cảm ơn %#^#$
 

File đính kèm

Em có 1 bảng dữ liệu chi tiết phát sinh các mã hàng theo từng phiếu.
Em Đã xử lý để rút gọn thành danh sách các mã hàng .
Tuy nhiên em cần bổ sung thêm 3 cột ghi chú để liệt kê sự xuất hiện của từng mã hàng theo 3 tiêu chí trong bảng dữ liệu chi tiết. 3 tiêu chí Gồm: Số phiếu; Số lượng; Số thứ tự
Mọi chi tiết em đã trình bày trong file excel gửi kèm
Mong các anh, chị và thầy cô GPE giúp em
Em xin cảm ơn %#^#$
Bạn chạy thử cái này xem sao
Mã:
Public Sub TongHop()
    Dim Dic As Object, I As Long, K As Long, Tem As String, sArr(), dArr()
    Set Dic = CreateObject("Scripting.Dictionary")
    With Sheets("1594-1595-1596")
        sArr = .Range(.Range("A4"), .Range("A65535").End(3)).Resize(, 6).Value
        ReDim dArr(1 To UBound(sArr, 1), 1 To 8)
        For I = 1 To UBound(sArr, 1)
            Tem = sArr(I, 2)
            If Not Dic.Exists(Tem) Then
                K = K + 1
                Dic.Add Tem, K
                dArr(K, 1) = Tem
                dArr(K, 2) = sArr(I, 3): dArr(K, 3) = sArr(I, 4)
                dArr(K, 4) = sArr(I, 5): dArr(K, 5) = "=COUNTIF(R4C2:R407C2,RC[-4])"
                dArr(K, 6) = sArr(I, 6): dArr(K, 7) = sArr(I, 5): dArr(K, 8) = sArr(I, 1)
            Else
                dArr(Dic.Item(Tem), 4) = dArr(Dic.Item(Tem), 4) + sArr(I, 5)
                dArr(Dic.Item(Tem), 6) = dArr(Dic.Item(Tem), 6) & ";" & sArr(I, 6)
                dArr(Dic.Item(Tem), 7) = dArr(Dic.Item(Tem), 7) & ";" & sArr(I, 5)
                dArr(Dic.Item(Tem), 8) = dArr(Dic.Item(Tem), 8) & ";" & sArr(I, 1)
            End If
        Next I
        .Range("H4:O" & .Range("A65535").End(3).Row).ClearContents
        .Range("H4").Resize(K, 8) = dArr
        .Range("H4:O" & .Range("A65535").End(3).Row).Sort Key1:=.[H3]
    End With
    Set Dic = Nothing
End Sub
 
Cảm ơn PacificPR đã giúp đỡ
Code chạy ra kết quả đúng như ý rồi
Chỉ mỗi nhược điểm là sau khi chạy code thì tất cả các giá trị của cột mã hàng của bảng 2: (bảng danh sách) bị chuyển hóa thành dạng 8.93525E+12 trong khi ban đầu nó có dạng là 8935246900017 v..v
PacificPR có cách nào khắc phục điểm này không giúp bạn với
 

File đính kèm

Cảm ơn PacificPR đã giúp đỡ
Code chạy ra kết quả đúng như ý rồi
Chỉ mỗi nhược điểm là sau khi chạy code thì tất cả các giá trị của cột mã hàng của bảng 2: (bảng danh sách) bị chuyển hóa thành dạng 8.93525E+12 trong khi ban đầu nó có dạng là 8935246900017 v..v
PacificPR có cách nào khắc phục điểm này không giúp bạn với
Thêm dòng này vào đoạn cuối Code của bạn ấy
PHP:
  Range("H4").Resize(K, 1).NumberFormat = "00000"
 
Bạn định dạng cái cột đó kiểu Text là được
Đồng ý với bạn là sau khi chạy code xong, chọn định dạng Text cho cột đấy
Nhưng mình lại phải mất 1 công ấn F2 và Enter liên tục tục.... thì nó mới hiện nguyên hình tất cả các mã về định dạng cũ
Hoặc làm theo cách là đứng ở cột ngoài cùng rồi dùng hàm excel =trim(H1).... Fill xuống
Rồi copy paste ngược trở về cột H
Hì! trong code có cách nào không bạn???
 
Đồng ý với bạn là sau khi chạy code xong, chọn định dạng Text cho cột đấy
Nhưng mình lại phải mất 1 công ấn F2 và Enter liên tục tục.... thì nó mới hiện nguyên hình tất cả các mã về định dạng cũ
Bạn làm theo hướng dẫn của thầy phulien1902 ở bài 6 đó. Chú ý cái hàm COUNTIF . Mình đang Copy nguyên của bạn đưa vào. Bạn nên đặt Er(hàng cuối của cột A) đưa vào công thức đó
 

File đính kèm

Cảm ơn anh Phulien1902
Nhưng mà nó chỉ được hình thức thôi còn bản chất định dạng thì chưa được anh à
Vì 2 cột B & H tuy là số nhưng không cùng định dạng, nên như vây.
Bây giờ bạn thử làm như sau: Bạn nhân cả cột B với số 1 nhé xem thế nào?
 
Vì 2 cột B & H tuy là số nhưng không cùng định dạng, nên như vây.
Bây giờ bạn thử làm như sau: Bạn nhân cả cột B với số 1 nhé xem thế nào?
Vâng em hiểu ý anh rồi biến cột B về dạng Number
Nhưng mà anh có cách nào biến Cột H về dạng cột B được không ạ
NGuyên nhân sâu xa là vì hệ thống danh mục hàng của phần mềm quản lý mã hàng được cài đặt theo định dạng cột B ành à
Cảm ơn anh đã quan tâm giúp đỡ
 
Bạn Đưa cái này Columns("H:H").NumberFormat = "@" vào dưới cho Next I xem sao
Được rồi bạn à
Cảm ơn bạn nhiều nhé
Với lại cho mình hỏi thêm
lúc nãy PacificPR có ý là bổ sung vào code thêm Biến Er và sao cho Er là hàng cuối cột A
vậy đoạn code
dArr(K, 4) = sArr(I, 5): dArr(K, 5) = "=COUNTIF(R4C2:R407C2,RC[-4])"
mình sửa lại thành
dArr(K, 4) = sArr(I, 5): dArr(K, 5) = "=COUNTIF(R4C2:ERC2,RC[-4])" thì bị nó báo lỗi bạn à
Giúp mình với
 

File đính kèm

Được rồi bạn à
Cảm ơn bạn nhiều nhé
Với lại cho mình hỏi thêm
lúc nãy PacificPR có ý là bổ sung vào code thêm Biến Er và sao cho Er là hàng cuối cột A
vậy đoạn code
dArr(K, 4) = sArr(I, 5): dArr(K, 5) = "=COUNTIF(R4C2:R407C2,RC[-4])"
mình sửa lại thành
dArr(K, 4) = sArr(I, 5): dArr(K, 5) = "=COUNTIF(R4C2:ERC2,RC[-4])" thì bị nó báo lỗi bạn à
Giúp mình với
Như vậy nó lỗi là đúng rồi:
Mã:
Public Sub TongHop()
    Dim sArr(), dArr()
    Dim I As Long, K As Long, Er As Long
    Dim Dic As Object, Tem As String
Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("1594-1595-1596")
    Er = .Range("A65535").End(3).Row
    sArr = .Range(.Range("A4"), .Range("A65535").End(3)).Resize(, 6).Value
    ReDim dArr(1 To UBound(sArr, 1), 1 To 8)
    For I = 1 To UBound(sArr, 1)
        Tem = sArr(I, 2)
        If Not Dic.Exists(Tem) Then
            K = K + 1
            Dic.Add Tem, K
            dArr(K, 1) = Tem
            dArr(K, 2) = sArr(I, 3): dArr(K, 3) = sArr(I, 4)
            dArr(K, 4) = sArr(I, 5): dArr(K, 5) = "=COUNTIF(R4C2:R" & Er & "C2,RC[-4])"
            dArr(K, 6) = sArr(I, 6): dArr(K, 7) = sArr(I, 5): dArr(K, 8) = sArr(I, 1)
        Else
            dArr(Dic.Item(Tem), 4) = dArr(Dic.Item(Tem), 4) + sArr(I, 5)
            dArr(Dic.Item(Tem), 6) = dArr(Dic.Item(Tem), 6) & ";" & sArr(I, 6)
            dArr(Dic.Item(Tem), 7) = dArr(Dic.Item(Tem), 7) & ";" & sArr(I, 5)
            dArr(Dic.Item(Tem), 8) = dArr(Dic.Item(Tem), 8) & ";" & sArr(I, 1)
        End If
    Next I
    .Range("H4").Resize(K, 1).NumberFormat = "@"
    .Range("H4:O" & .Range("A65535").End(3).Row).ClearContents
    .Range("H4").Resize(K, 8) = dArr
    .Range("H4:O" & .Range("A65535").End(3).Row).Sort Key1:=.[H3]
End With
Set Dic = Nothing
End Sub
 
Cảm ơn PacificPR rất nhiều
Hy vọng hôm tới sẽ được gặp bạn ở chương trình kỷ niệm 11 năm GPE tại Hà Nội
Mình sẽ chúc riêng bạn 1 ly nhé :drinks:
 
Được rồi bạn à
Cảm ơn bạn nhiều nhé
Với lại cho mình hỏi thêm
lúc nãy PacificPR có ý là bổ sung vào code thêm Biến Er và sao cho Er là hàng cuối cột A
vậy đoạn code
dArr(K, 4) = sArr(I, 5): dArr(K, 5) = "=COUNTIF(R4C2:R407C2,RC[-4])"
mình sửa lại thành
dArr(K, 4) = sArr(I, 5): dArr(K, 5) = "=COUNTIF(R4C2:ERC2,RC[-4])" thì bị nó báo lỗi bạn à
Giúp mình với
Bạn thêm ký tự " E" vào là sai rồi, công thức chỉ có R, C và số thôi.
PacificPR giải quyết giúp bạn ấy đi.
 
Cảm ơn PacificPR rất nhiều
Hy vọng hôm tới sẽ được gặp bạn ở chương trình kỷ niệm 11 năm GPE tại Hà Nội
Mình sẽ chúc riêng bạn 1 ly nhé :drinks:
Em không đi được. Em ở xa trung tâm quá anh ạ (Phan Rang Tháp Chàm cơ). Mà thời gian đó mấy anh em cũng phải về quê nữa :confused:
 
Web KT

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

Back
Top Bottom