Nhờ giúp đỡ sửa mã tìm kiếm và tính tổng theo điều kiện!

Liên hệ QC

theanhst92

Thành viên hoạt động
Tham gia
31/3/16
Bài viết
134
Được thích
15
Kính gửi anh chị trên diễn đàn.
em có tham khảo mã trên diễn đàn về các tính tổng và tìm kiếm dữ liệu theo điều kiện và sử dụng bằng DIC nhưng do em không năm được VBA nên không biết chỉnh sửa lại cho phù hợp theo mong muốn của mình. nên em nhờ mọi người có thể giúp em sửa lại mã này với ạ.
Đề bài đặt ra là có 1 sheet dữ liệu chứa dữ liệu ban đầu. sheet thứ 2 sẽ nhập mã hàng và cỡ số sẽ tìm ra được số lượng của mã hàng và cỡ số đấy. nhưng nếu như cỡ số không được nhập gì thì em muốn nó tính tổng số lượng cho mã hàng đấy. khi nào điền cỡ số thì nó điền số lượng cụ thể của cỡ số đấy sau. em gửi file lên để mọi người dễ hình dung ạ!
em xin cảm ơn!
 

File đính kèm

  • Book1.xlsm
    20 KB · Đọc: 12
Lần chỉnh sửa cuối:
Pivot table nó ra đẹp và dễ hiểu hơn cái bnagr KQ của bạn nhiều. Mà khỏi phải cốt kiếc gì cả.

1626171758593.png
 

File đính kèm

  • 1626171580913.png
    1626171580913.png
    71.4 KB · Đọc: 4
Upvote 0
Upvote 0
dạ dữ liệu em làm là bảng tính trung gian chứ không phải bảng báo cáo. nên mong muốn sử dụng VBA để phục vụ nhu cầu tính toán tiếp theo. mong bác giúp đỡ ạ!
Loại cốt này ở đây nhiều người viết giỏi hơn tôi.

Ở bài #2 trên tôi chỉ nói cho những bạn khác biết "những gì có thể làm được từ công cụ có sẵn của Excel thì đừng nên dùng VBA"
 
Upvote 0
Loại cốt này ở đây nhiều người viết giỏi hơn tôi.

Ở bài #2 trên tôi chỉ nói cho những bạn khác biết "những gì có thể làm được từ công cụ có sẵn của Excel thì đừng nên dùng VBA"
dạ vâng, điều ấy em cũng đã tìm hiểu nhưng nó hiện tại chưa phù hợp với bài này của em ạ. bình thường khi lên báo cáo em vẫn thưởng sử dụng pivot để làm việc nhanh mà hiệu quả. mong được mọi người sửa bài giúp em.
 
Upvote 0

File đính kèm

  • Book1-cua Mr TheAnhst92.xlsm
    28 KB · Đọc: 10
Upvote 0
mong được mọi người sửa bài giúp em.
Bạn chạy thử Sub này:
PHP:
Option Explicit

Sub TinhDL()
Dim sArr(), tArr(), KQ(), dArr(), MH As String, Txt As String
Dim i As Long, k As Long, R As Long, Rws As Long
Dim Dic As Object
    Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("DULIEU")
    sArr = .Range("A3", .Range("A" & Rows.Count).End(xlUp)).Resize(, 5).Value
    R = UBound(sArr)
    ReDim tArr(1 To R, 1 To 3)
    For i = 1 To R
        MH = sArr(i, 1)
        If Not Dic.Exists(MH) Then
            k = k + 1
            Dic.Item(MH) = k
            tArr(k, 1) = MH
            tArr(k, 2) = sArr(i, 4)
            tArr(k, 3) = sArr(i, 5)
        Else
            Rws = Dic.Item(MH)
            tArr(Rws, 2) = tArr(Rws, 2) + sArr(i, 4)
            tArr(Rws, 3) = tArr(Rws, 3) + sArr(i, 5)
        End If
        Dic.Item(sArr(i, 1) & "#" & sArr(i, 3)) = i
    Next i
End With
With Sheets("KQ")
    KQ = .Range("A3", .Range("A100000").End(xlUp)).Resize(, 3).Value
    R = UBound(KQ)
    ReDim dArr(1 To R, 1 To 2)
    For i = 1 To R
        If KQ(i, 3) <> Empty Then
            Txt = KQ(i, 1) & "#" & KQ(i, 3)
            If Dic.Exists(Txt) Then
                Rws = Dic.Item(Txt)
                dArr(i, 1) = sArr(Rws, 4)
                dArr(i, 2) = sArr(Rws, 5)
            End If
        Else
            MH = KQ(i, 1)
            If Dic.Exists(MH) Then
                Rws = Dic.Item(MH)
                dArr(i, 1) = tArr(Rws, 2)
                dArr(i, 2) = tArr(Rws, 3)
            End If
        End If
    Next i
    .Range("D3:E3").Resize(R) = dArr
End With
Set Dic = Nothing
End Sub
 
Upvote 0
Của bạn đây. Hy vọng là đúng ý. Hãy thử thay đổi dụ liệu cột C Sh KQ để thấy kết quả.

Toàn code chôm trên diễn đàn về chăp vá , xào xáo lại thôi mà.
Bạn chạy thử Sub này:
PHP:
Option Explicit

Sub TinhDL()
Dim sArr(), tArr(), KQ(), dArr(), MH As String, Txt As String
Dim i As Long, k As Long, R As Long, Rws As Long
Dim Dic As Object
    Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("DULIEU")
    sArr = .Range("A3", .Range("A" & Rows.Count).End(xlUp)).Resize(, 5).Value
    R = UBound(sArr)
    ReDim tArr(1 To R, 1 To 3)
    For i = 1 To R
        MH = sArr(i, 1)
        If Not Dic.Exists(MH) Then
            k = k + 1
            Dic.Item(MH) = k
            tArr(k, 1) = MH
            tArr(k, 2) = sArr(i, 4)
            tArr(k, 3) = sArr(i, 5)
        Else
            Rws = Dic.Item(MH)
            tArr(Rws, 2) = tArr(Rws, 2) + sArr(i, 4)
            tArr(Rws, 3) = tArr(Rws, 3) + sArr(i, 5)
        End If
        Dic.Item(sArr(i, 1) & "#" & sArr(i, 3)) = i
    Next i
End With
With Sheets("KQ")
    KQ = .Range("A3", .Range("A100000").End(xlUp)).Resize(, 3).Value
    R = UBound(KQ)
    ReDim dArr(1 To R, 1 To 2)
    For i = 1 To R
        If KQ(i, 3) <> Empty Then
            Txt = KQ(i, 1) & "#" & KQ(i, 3)
            If Dic.Exists(Txt) Then
                Rws = Dic.Item(Txt)
                dArr(i, 1) = sArr(Rws, 4)
                dArr(i, 2) = sArr(Rws, 5)
            End If
        Else
            MH = KQ(i, 1)
            If Dic.Exists(MH) Then
                Rws = Dic.Item(MH)
                dArr(i, 1) = tArr(Rws, 2)
                dArr(i, 2) = tArr(Rws, 3)
            End If
        End If
    Next i
    .Range("D3:E3").Resize(R) = dArr
End With
Set Dic = Nothing
End Sub
Dạ em xin cảm ơn tất cả mọi người đã giúp đỡ em ạ. tất cả đều phù hợp với điều em muốn rồi ạ. cảm ơn các anh chị rất nhiều!
 
Upvote 0
Bạn chạy thử Sub này:
PHP:
Option Explicit

Sub TinhDL()
Dim sArr(), tArr(), KQ(), dArr(), MH As String, Txt As String
Dim i As Long, k As Long, R As Long, Rws As Long
Dim Dic As Object
    Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("DULIEU")
    sArr = .Range("A3", .Range("A" & Rows.Count).End(xlUp)).Resize(, 5).Value
    R = UBound(sArr)
    ReDim tArr(1 To R, 1 To 3)
    For i = 1 To R
        MH = sArr(i, 1)
        If Not Dic.Exists(MH) Then
            k = k + 1
            Dic.Item(MH) = k
            tArr(k, 1) = MH
            tArr(k, 2) = sArr(i, 4)
            tArr(k, 3) = sArr(i, 5)
        Else
            Rws = Dic.Item(MH)
            tArr(Rws, 2) = tArr(Rws, 2) + sArr(i, 4)
            tArr(Rws, 3) = tArr(Rws, 3) + sArr(i, 5)
        End If
        Dic.Item(sArr(i, 1) & "#" & sArr(i, 3)) = i
    Next i
End With
With Sheets("KQ")
    KQ = .Range("A3", .Range("A100000").End(xlUp)).Resize(, 3).Value
    R = UBound(KQ)
    ReDim dArr(1 To R, 1 To 2)
    For i = 1 To R
        If KQ(i, 3) <> Empty Then
            Txt = KQ(i, 1) & "#" & KQ(i, 3)
            If Dic.Exists(Txt) Then
                Rws = Dic.Item(Txt)
                dArr(i, 1) = sArr(Rws, 4)
                dArr(i, 2) = sArr(Rws, 5)
            End If
        Else
            MH = KQ(i, 1)
            If Dic.Exists(MH) Then
                Rws = Dic.Item(MH)
                dArr(i, 1) = tArr(Rws, 2)
                dArr(i, 2) = tArr(Rws, 3)
            End If
        End If
    Next i
    .Range("D3:E3").Resize(R) = dArr
End With
Set Dic = Nothing
End Sub
em xin lỗi 1 chút ạ. em có gặp 1 chút vấn đề là khi dữ liệu đầu vào của em xuất hiện trùng cùng 1 mã và cùng 1 cỡ số thì nó lại không tính tổng số lượng của mã hàng và cỡ số đấy. mong bác sửa giúp ạ!
 
Upvote 0
em xin lỗi 1 chút ạ. em có gặp 1 chút vấn đề là khi dữ liệu đầu vào của em xuất hiện trùng cùng 1 mã và cùng 1 cỡ số thì nó lại không tính tổng số lượng của mã hàng và cỡ số đấy. mong bác sửa giúp ạ!
Thì bạn đưa cái file có dữ liệu "xin lỗi 1 chút" mọi người mới "tưởng tượng" ra được cách xử lý chứ.
Chẳng lẽ bạn buộc người khác phải giả lập dữ liệu "xin lỗi" theo ý tưởng của bạn luôn?
Mọi chuyện luôn dễ dàng khi mình tạo sự dễ dàng cho người khác.
 
Upvote 0
Thì bạn đưa cái file có dữ liệu "xin lỗi 1 chút" mọi người mới "tưởng tượng" ra được cách xử lý chứ.
Chẳng lẽ bạn buộc người khác phải giả lập dữ liệu "xin lỗi" theo ý tưởng của bạn luôn?
Mọi chuyện luôn dễ dàng khi mình tạo sự dễ dàng cho người khác.
Em xin gửi lại file! mong bác thông cảm giúp ạ!
 

File đính kèm

  • Book1.xlsm
    22.2 KB · Đọc: 6
Upvote 0
Web KT

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

Back
Top Bottom