Tính tổng có điều kiện của 2 sheet (2 người xem)

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

vanlinh_2904

Thành viên hoạt động
Tham gia
20/10/12
Bài viết
117
Được thích
3
Chào các bạn!
Mình có 2 sheet "HN" & Sheet "SG", có các vật tư mua và bán, mình muốn tạo VBA để tổng hợp số lượng, thành tiền, và cước vận chuyển cho các mặt hàng ở 2 sheet. Nhờ các bạn giúp mình.cảm ơn các bạn nhiều
 

File đính kèm

Chào các bạn!
Mình có 2 sheet "HN" & Sheet "SG", có các vật tư mua và bán, mình muốn tạo VBA để tổng hợp số lượng, thành tiền, và cước vận chuyển cho các mặt hàng ở 2 sheet. Nhờ các bạn giúp mình.cảm ơn các bạn nhiều
có ai giúp được mình không vậy?
 
Upvote 0
có ai giúp được mình không vậy?
Có nhiều người xem rồi mà.
Chỉ có 2 sheet HN và SG mà 2 bảng cũng không giống nhau, 100 địa điểm thì 100 mẫu khác nhau sao?
Cột B sheet HN là Mã Vật tư, cột B sheet SG là Ngày, .....
Làm khó nhau quá nên không ai chịu làm thôi.
Bạn sửa lại cấu trúc 2 bảng nay cho giống hệt nhau, rồi nói rõ chỉ có 2 sheet HN,SG hay còn nhiều nhiều sheet nữa cũng cần tổng hợp chung về sheet "Tong hop"?
Biểu mẫu trong sheet TongHop như vây là cố định chưa? hay là còn chèn thêm cột.... tùy thích nữa?
Kết quả mẫu muốn có cũng phải nhập thủ công ít nhất cũng đầy đủ 1 hàng ngang để người không phải cũng "nghề" với bạn "có thể" hiểu được bạn muốn gì.
Giải quyết xong các chuyện trên thì sẽ có người giúp bạn trong vòng "Một nốt nhạc"
 
Lần chỉnh sửa cuối:
Upvote 0
Có nhiều người xem rồi mà.
Chỉ có 2 sheet HN và SG mà 2 bảng cũng không giống nhau, 100 địa điểm thì 100 mẫu khác nhau sao?
Cột B sheet HN là Mã Vật tư, cột B sheet SG là Ngày, .....
Làm khó nhau quá nên không ai chịu làm thôi.
Bạn sửa lại cấu trúc 2 bảng nay cho giống hệt nhau, rồi nói rõ chỉ có 2 sheet HN,SG hay còn nhiều nhiều sheet nữa cũng cần tổng hợp chung về sheet "Tong hop"?
Biểu mẫu trong sheet TongHop như vây là cố định chưa? hay là còn chèn thêm cột.... tùy thích nữa?
Kết quả mẫu muốn có cũng phải nhập thủ công ít nhất cũng đầy đủ 1 hàng ngang để người không phải cũng "nghề" với bạn "có thể" hiểu được bạn muốn gì.
Giải quyết xong các chuyện trên thì sẽ có người giúp trong vòng "Một nốt nhạc"
Trong 2 sheet HN, SG là mẫu cố định như vậy và chỉ có 2 sheet như vậy thôi, còn sheet TongHop như vậy cũng cố định rồi không chèn thêm cột, mục đích của mình là lọc mã duy nhất của 2 sheet HN,SG để tính tổng sang sheet TongHop theo điều kiện là mua và bán như file, cảm ơn bạn nhé.
 

File đính kèm

Upvote 0
Trong 2 sheet HN, SG là mẫu cố định như vậy và chỉ có 2 sheet như vậy thôi, còn sheet TongHop như vậy cũng cố định rồi không chèn thêm cột, mục đích của mình là lọc mã duy nhất của 2 sheet HN,SG để tính tổng sang sheet TongHop theo điều kiện là mua và bán như file, cảm ơn bạn nhé.
Chỉ có 2 sheet mà lộn xộn cột, oải thiệt. Xem tạm code Quá Sợ nay coi sao:
[GPECODE=vb]Public Sub QuaSo()
Dim Dic As Object, sArr(), dArr(1 To 65000, 1 To 19), I As Long, K As Long, Tem As String
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Sheets("HN").Range(Sheets("HN").[B2], Sheets("HN").[B2].End(xlDown)).Resize(, 8).Value
For I = 1 To UBound(sArr, 1)
Tem = sArr(I, 1)
If Not Dic.Exists(Tem) Then
K = K + 1
Dic.Add Tem, K
dArr(K, 1) = sArr(I, 1)
dArr(K, 2) = sArr(I, 2)
If UCase(sArr(I, 3)) = "MUA" Then
dArr(K, 3) = sArr(I, 5)
dArr(K, 8) = sArr(I, 7)
dArr(K, 9) = sArr(K, 8)
Else
dArr(K, 11) = sArr(I, 5)
dArr(K, 18) = sArr(I, 7)
dArr(K, 19) = sArr(I, 8)
End If
Else
If UCase(sArr(I, 3)) = "MUA" Then
dArr(Dic.Item(Tem), 3) = dArr(Dic.Item(Tem), 3) + sArr(I, 5)
dArr(Dic.Item(Tem), 8) = dArr(Dic.Item(Tem), 8) + sArr(I, 7)
dArr(Dic.Item(Tem), 9) = dArr(Dic.Item(Tem), 9) + sArr(I, 8)
Else
dArr(Dic.Item(Tem), 11) = dArr(Dic.Item(Tem), 11) + sArr(I, 5)
dArr(Dic.Item(Tem), 18) = dArr(Dic.Item(Tem), 18) + sArr(I, 7)
dArr(Dic.Item(Tem), 19) = dArr(Dic.Item(Tem), 19) + sArr(I, 8)
End If
End If
Next I
'-------------------------------------
sArr = Sheets("SG").Range(Sheets("SG").[C3], Sheets("SG").[C3].End(xlDown)).Resize(, 7).Value
For I = 1 To UBound(sArr, 1)
Tem = sArr(I, 1)
If Not Dic.Exists(Tem) Then
K = K + 1
Dic.Add Tem, K
dArr(K, 1) = sArr(I, 1)
dArr(K, 2) = sArr(I, 2)
If UCase(sArr(I, 3)) = "MUA" Then
dArr(K, 3) = sArr(I, 4)
dArr(K, 8) = sArr(I, 6)
dArr(K, 9) = sArr(K, 7)
Else
dArr(K, 11) = sArr(I, 4)
dArr(K, 18) = sArr(I, 6)
dArr(K, 19) = sArr(I, 7)
End If
Else
If UCase(sArr(I, 3)) = "MUA" Then
dArr(Dic.Item(Tem), 3) = dArr(Dic.Item(Tem), 3) + sArr(I, 4)
dArr(Dic.Item(Tem), 8) = dArr(Dic.Item(Tem), 8) + sArr(I, 6)
dArr(Dic.Item(Tem), 9) = dArr(Dic.Item(Tem), 9) + sArr(I, 7)
Else
dArr(Dic.Item(Tem), 11) = dArr(Dic.Item(Tem), 11) + sArr(I, 4)
dArr(Dic.Item(Tem), 18) = dArr(Dic.Item(Tem), 18) + sArr(I, 6)
dArr(Dic.Item(Tem), 19) = dArr(Dic.Item(Tem), 19) + sArr(I, 7)
End If
End If
Next I
With Sheets("TongHop")
.[B3:T1000].ClearContents
.[B3].Resize(K, 19) = dArr
End With
Set Dic = Nothing
End Sub[/GPECODE]
Thấy sao viết vậy làm biếng suy nghĩ "túm gọn" nó lại.
Hy vọng có người khác "nhòm" qua sẽ viết gọn hơn cho bạn.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Thấy sao viết vậy làm biếng suy nghĩ "túm gọn" nó lại.
Hy vọng có người khác "nhòm" qua sẽ viết gọn hơn cho bạn.

Lười quá 3T ah, sao không rút gọn vậy

Nếu chủ topic thich rút gọn cho quá sợ hơn nữa thì ngắn gọn thế này

(các bước tính code, giống như 3T, nếu sai đúng cần hỏi cứ gõ cửa 3T nhé, ở đây chỉ rút gọn mà thui)

PHP:
Public Sub QuaSo()
    Dim Dic As Object, sArr(), dArr(1 To 65000, 1 To 19), i As Long, K As Long, iK As Long
    Dim jD_MuaBan, jS_HnSg, jD, jS, dP As Long, j As Long, Tem As String
    
    jD_MuaBan = Array(Array(3, 8, 9), Array(11, 18, 19))
    jS_HnSg = Array(Array(5, 7, 8), Array(4, 6, 7))
    Set Dic = CreateObject("Scripting.Dictionary")
    
    For dP = 1 To 2 ''1 Hanoi    2 Saigon''
        Select Case dP
            Case 1:  sArr = Sheets("HN").Range(Sheets("HN").[B2], Sheets("HN").[B2].End(xlDown)).Resize(, 8).Value
            Case 2:  sArr = Sheets("SG").Range(Sheets("SG").[C3], Sheets("SG").[C3].End(xlDown)).Resize(, 7).Value
        End Select
        jS = jS_HnSg(dP - 1)
        
        For i = 1 To UBound(sArr, 1)
            Tem = sArr(i, 1)
            If Not Dic.Exists(Tem) Then
                K = K + 1
                Dic.Add Tem, K
                iK = K
                dArr(iK, 1) = sArr(i, 1)
                dArr(iK, 2) = sArr(i, 2)
            Else
                iK = Dic.Item(Tem)
            End If
            
            If UCase(sArr(i, 3)) = "MUA" Then
                        jD = jD_MuaBan(0)
            Else:       jD = jD_MuaBan(1):  End If
            
            For j = 0 To UBound(jD)
                dArr(iK, jD(j)) = dArr(iK, jD(j)) + sArr(i, jS(j))
            Next
        Next i
    Next dP
    
    With Sheets("TongHop")
        .[B3:T65000].ClearContents
        .[B3].Resize(K, 19) = dArr
    End With
    Set Dic = Nothing
End Sub
 
Upvote 0
Xin nhắn chủ topic vài điều cơ bản, có thể coi là Spam

có ai giúp được mình không vậy?

(*) Đã muốn xài VBA thì thiết kế các trang 'HN' & 'SG' cần giống nhau í xì;
& ở trường hợp này nên lấy thiết chế tại trang 'HN' là chuẩn rồi; (Chỉ có điều nên để trường [Ngày] lên trước các trường khác.)

& Vì khi xài với VBA, ta không nên trộn ô trong các trang chứa dữ liệu thô như 2 trang vừa nêu;

(Ta chỉ nên trộn ô ở trang như trang 'TongHop'; Nơi cần thêm sự diêm dúa cho bắt mắt)

(*) Ở những trang chứa dữ liệu thô ta không nhất thiết fải 'màu mè lòe loẹt'; Hạn chế bôi màu cho 1 số trường đán quan tâm hơn mà thôi.

Vài lời nho nhỏ góp í, mong sẽ hữu ích xíu nào đó với bạn chủ topic. :-=
 
Upvote 0
Lười quá 3T ah, sao không rút gọn vậy

Nếu chủ topic thich rút gọn cho quá sợ hơn nữa thì ngắn gọn thế này

(các bước tính code, giống như 3T, nếu sai đúng cần hỏi cứ gõ cửa 3T nhé, ở đây chỉ rút gọn mà thui)

PHP:
Public Sub QuaSo()
    Dim Dic As Object, sArr(), dArr(1 To 65000, 1 To 19), i As Long, K As Long, iK As Long
    Dim jD_MuaBan, jS_HnSg, jD, jS, dP As Long, j As Long, Tem As String
    
    jD_MuaBan = Array(Array(3, 8, 9), Array(11, 18, 19))
    jS_HnSg = Array(Array(5, 7, 8), Array(4, 6, 7))
    Set Dic = CreateObject("Scripting.Dictionary")
    
    For dP = 1 To 2 ''1 Hanoi    2 Saigon''
        Select Case dP
            Case 1:  sArr = Sheets("HN").Range(Sheets("HN").[B2], Sheets("HN").[B2].End(xlDown)).Resize(, 8).Value
            Case 2:  sArr = Sheets("SG").Range(Sheets("SG").[C3], Sheets("SG").[C3].End(xlDown)).Resize(, 7).Value
        End Select
        jS = jS_HnSg(dP - 1)
        
        For i = 1 To UBound(sArr, 1)
            Tem = sArr(i, 1)
            If Not Dic.Exists(Tem) Then
                K = K + 1
                Dic.Add Tem, K
                iK = K
                dArr(iK, 1) = sArr(i, 1)
                dArr(iK, 2) = sArr(i, 2)
            Else
                iK = Dic.Item(Tem)
            End If
            
            If UCase(sArr(i, 3)) = "MUA" Then
                        jD = jD_MuaBan(0)
            Else:       jD = jD_MuaBan(1):  End If
            
            For j = 0 To UBound(jD)
                dArr(iK, jD(j)) = dArr(iK, jD(j)) + sArr(i, jS(j))
            Next
        Next i
    Next dP
    
    With Sheets("TongHop")
        .[B3:T65000].ClearContents
        .[B3].Resize(K, 19) = dArr
    End With
    Set Dic = Nothing
End Sub
Cảm ơn bạn nhiều, nhưng có cách nào để mỗi lần cập nhập lại dữ liệu thì chỉ xóa và ghi vào những cột cần điền, còn những cột khác không xóa ( mục đích của mình những cột còn lại mình còn đặt công thức nữa).
 
Upvote 0
Lười quá 3T ah, sao không rút gọn vậy

Nếu chủ topic thich rút gọn cho quá sợ hơn nữa thì ngắn gọn thế này

(các bước tính code, giống như 3T, nếu sai đúng cần hỏi cứ gõ cửa 3T nhé, ở đây chỉ rút gọn mà thui)
Từ bài #3 tôi đã thấy tác giả "mập mờ" rồi. Dấu cột tùm lum mà bảo mẫu mã nó chỉ có bi nhiêu thôi, không chèn thêm cột... hóa ra là đã chèn sẵn, lại không nói trước là có các cột bị dấu là công thức.
Xem bài #8 và ai rút gọn thì tiếp tục nhé. Tui mà làm tiếp thì code sẽ dài thêm gấp 3 lần cái cũ.
Ẹc..
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn bạn nhiều, nhưng có cách nào để mỗi lần cập nhập lại dữ liệu thì chỉ xóa và ghi vào những cột cần điền, còn những cột khác không xóa ( mục đích của mình những cột còn lại mình còn đặt công thức nữa).

bạn tham khảo ở đây thì copy cột thoả mãi, thêm bao nhiêu cột cũng được và theo cột nhé

http://www.giaiphapexcel.com/forum/...-khác-theo-thứ-tự-các-cột&p=603165#post603165

hoặc ở đây
http://www.giaiphapexcel.com/forum/...u-sheet-về-sheet-Tổng-hợp&p=602628#post602628

Lao động 1 tí cho nó rõ hơn nhỉ, bạn nghiên cứu trước đi nhé và tự sửa theo hướng đó, chắc không khó với bạn (vừa tìm hiểu, bác 3T tuổi kha khá rui mà vẫn chăm chỉ luyện công, mình trẻ luyện tí có sao)

Từ bài #3 tôi đã thấy tác giả "mập mờ" rồi. Dấu cột tùm lum mà bảo mẫu mã nó chỉ có bi nhiêu thôi, không chèn thêm cột... hóa ra là đã chèn sẵn, lại không nói trước là có các cột bị dấu là công thức.
Xem bài #8 và ai rút gọn thì tiếp tục nhé. Tui mà làm tiếp thì code sẽ dài thêm gấp 3 lần cái cũ.
Ẹc..

Đã trả lời ở trên, dài nhưng kết quả ngon là được, các bước đi trong code của bác làm rất sáng, hướng rõ ràng (chắc chủ topic sửa được tiếp)

Mỗi người chung tay 1 tí vậy (kể cả chủ topic), em luyện công thì vô tư đi nhưng sơ công vung ra vào hư vô (cứ luyện thế này chẳng bit bao giờ theo kịp bác 3T)
 
Lần chỉnh sửa cuối:
Upvote 0
Không thấy chủ topic phản hồi gì,
Chắc tự xử được rui
Đã có giải pháp, nhưng không rõ bạn có cần nữa không?
 
Upvote 0
Không thấy chủ topic phản hồi gì,
Chắc tự xử được rui
Đã có giải pháp, nhưng không rõ bạn có cần nữa không?
Mình vẫn chưa làm được, mình làm theo code của anh 3T nhưng mỗi lần chạy lại cập nhập dữ liệu thì xóa luôn những cột khác không liên quan, đồng thời dữ liệu 2 sheet HN,SG nếu có dòng trống thì không thực hiện được dòng tiếp theo
 
Upvote 0
Mình vẫn chưa làm được, mình làm theo code của anh 3T nhưng mỗi lần chạy lại cập nhập dữ liệu thì xóa luôn những cột khác không liên quan, đồng thời dữ liệu 2 sheet HN,SG nếu có dòng trống thì không thực hiện được dòng tiếp theo
Đúng thế bạn ah,
Vậy thì bạn gõ cửa bác 3T nhé để sửa lại cho chuẩn theo code cũ đang áp dụng
 
Upvote 0
Mình vẫn chưa làm được, mình làm theo code của anh 3T nhưng mỗi lần chạy lại cập nhập dữ liệu thì xóa luôn những cột khác không liên quan, đồng thời dữ liệu 2 sheet HN,SG nếu có dòng trống thì không thực hiện được dòng tiếp theo
Yên tâm nhé, cứ réo tên anh Ba Tê là mọi chuyện đâu vào đó thôi. Mấy vụ này mình biết mà.
 
Upvote 0
Yên tâm nhé, cứ réo tên anh Ba Tê là mọi chuyện đâu vào đó thôi. Mấy vụ này mình biết mà.
Bánh trái luôn chọn chỗ ngon, còn mấy chỗ gần "thiu" thì "xúi" người ta réo.
2 sheet HN,SG thêm 1 dòng phụ trên đầu nghe. Không xoá dòng này.
Hic!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom