Gộp số lượng trong cột khi cột Order có số liệu trùng

Liên hệ QC

nhatchinhvuong

Thành viên mới
Tham gia
18/6/19
Bài viết
5
Được thích
0
Nên viết tiêu đề cho rõ ràng nhé bạn.
e đang tạo 1 file xuất dữ liệu từ sheet( "11") sang sheet("a") giống như trong file đính kèm. nhưng có 1 điều kiện nữa em k thể nào làm được là nếu order (cột 13) giống nhau thì sẽ gộp số lượng (cột 8) 1 order chỉ cho ra 1 lần. bác nào biết làm giúp em hoặc hướng dẫn e với. e xin cảm ơn ạ!
 

File đính kèm

  • kiểm tra.xls
    592 KB · Đọc: 25
e đang tạo 1 file xuất dữ liệu từ sheet( "11") sang sheet("a") giống như trong file đính kèm. nhưng có 1 điều kiện nữa em k thể nào làm được là nếu order (cột 13) giống nhau thì sẽ gộp số lượng (cột 8) 1 order chỉ cho ra 1 lần. bác nào biết làm giúp em hoặc hướng dẫn e với. e xin cảm ơn ạ!
Hi vọng là bạn sẽ sửa tiêu đề đi. Chứ để như vậy sẽ tính là vi phạm nội dung ấy.
Bài đã được tự động gộp:

e đang tạo 1 file xuất dữ liệu từ sheet( "11") sang sheet("a") giống như trong file đính kèm. nhưng có 1 điều kiện nữa em k thể nào làm được là nếu order (cột 13) giống nhau thì sẽ gộp số lượng (cột 8) 1 order chỉ cho ra 1 lần. bác nào biết làm giúp em hoặc hướng dẫn e với. e xin cảm ơn ạ!
Bạn thử dùng PivotTable coi có đúng ý bạn không nhé
Bài đã được tự động gộp:

Thầy @SA_DQ cười. Làm em thấy nhột nhột ạ
 

File đính kèm

  • kiểm tra.xls
    956.5 KB · Đọc: 16
Lần chỉnh sửa cuối:
Upvote 0
Mình biết có 2 cách như sau thường được cộng đồng này hay xài:

(1) Xài Dictionary; Cách này bạn cần có kiến thức VBA tương đối thâm hậu (nên mình gọi là cách của những hàn lâm viện sỹ)

(2) Lập danh sách duy nhất cột mà bạn gọi là 'Oder' tại 1 trang tính trống nào đó & . . .
Tiếp theo là tạo vòng lặp duyệt theo DS duy nhất mới lập & tiến hành tính theo Hàm DSUM() của CSDL trên trang '11'
Iêu cầu là nên xài E2007 trở lên & biết xài DSUM() trong VBA

(3) . . . . .
 
Upvote 0
Hi vọng là bạn sẽ sửa tiêu đề đi. Chứ để như vậy sẽ tính là vi phạm nội dung ấy.
Bài đã được tự động gộp:


Bạn thử dùng PivotTable coi có đúng ý bạn không nhé
Bài đã được tự động gộp:

Thầy @SA_DQ cười. Làm em thấy nhột nhột ạ
e cảm ơn ạ. nhưng e muốn làm code để xuất ra cho tiện hơn ạ. vì lượng mã hàng rất là lớn. mà e phải xuất ra từng mãi 1 để kiểm tra
Bài đã được tự động gộp:

Mình biết có 2 cách như sau thường được cộng đồng này hay xài:

(1) Xài Dictionary; Cách này bạn cần có kiến thức VBA tương đối thâm hậu (nên mình gọi là cách của những hàn lâm viện sỹ)

(2) Lập danh sách duy nhất cột mà bạn gọi là 'Oder' tại 1 trang tính trống nào đó & . . .
Tiếp theo là tạo vòng lặp duyệt theo DS duy nhất mới lập & tiến hành tính theo Hàm DSUM() của CSDL trên trang '11'
Iêu cầu là nên xài E2007 trở lên & biết xài DSUM() trong VBA

(3) . . . . .
bác làm giúp em với được k ạ. e chưa học đến hàm dsum() :wounded1:
 
Upvote 0
Mình biết có 2 cách như sau thường được cộng đồng này hay xài:

(1) Xài Dictionary; Cách này bạn cần có kiến thức VBA tương đối thâm hậu (nên mình gọi là cách của những hàn lâm viện sỹ)

(2) Lập danh sách duy nhất cột mà bạn gọi là 'Oder' tại 1 trang tính trống nào đó & . . .
Tiếp theo là tạo vòng lặp duyệt theo DS duy nhất mới lập & tiến hành tính theo Hàm DSUM() của CSDL trên trang '11'
Iêu cầu là nên xài E2007 trở lên & biết xài DSUM() trong VBA

(3) . . . . .
Kính thưa thầy. Có lẽ nhờ thầy giải luôn cho lẹ. Chứ kiến thức uyên thâm thế kia. Chắc không vật được. Cho em hóng code với. Để ứng dụng những lúc cần, Môn VBA này khó quá. Học mãi mà cảm giác không ngấm vào đâu.
 
Upvote 0
. . . Có lẽ nhờ . . . giải luôn cho lẹ. Chứ kiến thức uyên thâm thế kia. Chắc không vật được. Cho em hóng code với. Để ứng dụng những lúc cần, Môn VBA này khó quá. Học mãi mà cảm giác không ngấm vào đâu.
Nói DSUM() cho to tác, chứ xài hàm SUMIF() cũng đạt kết quả
Bạn thử 2 bước sau đây cho nhuyễn & sau đó tiến hành với bộ thu macro:
(1) Lập DS duy nhất của trường/cột 'Oder'
(2) Tiến hành tính tổng với hàm SUMIF() theo từng 'Oder' riêng rẽ trong DS duy nhất đó

Chúc thành công.
 
Upvote 0
Kính thưa thầy. Có lẽ nhờ thầy giải luôn cho lẹ. Chứ kiến thức uyên thâm thế kia. Chắc không vật được. Cho em hóng code với. Để ứng dụng những lúc cần, Môn VBA này khó quá. Học mãi mà cảm giác không ngấm vào đâu.
Muốn học ứng dụng thì phải nhìn về tương lai. Học chi với loại file xls cổ điển này.
Với Excel 2016 thì dùng Power Query sẽ giải quyết được.
(dùng consolidate cũng được nhưng hơi khó hơn một chút)

Nếu dùng VBA thì nên dùng ADODB. Tìm trong mấy thớt nói về cái này sẽ thấy đề tài tương tự.
 
Lần chỉnh sửa cuối:
Upvote 0
Muốn học ứng dụng thì phải nhìn về tương lai. Học chi với loại file xls cổ điển này.
Với Excel 2016 thì dùng Power Query sẽ giải quyết được.
(dùng consolidate cũng được nhưng hơi khó hơn một chút)

Nếu dùng VBA thì nên dùng ADODB. Tìm trong mấy thớt nói về cái này sẽ thấy đề tài tương tự.
Thầy ạ. Em cũng đang cố gắng nhìn về tương lai. Nhưng có vẻ độ thông minh không được cao lắm. Sách cũng đã mua. Nhưng chưa thấm được mấy. Phải chăng em còn đang thiếu người vẽ đường
 
Upvote 0
Cần cù bù thông minh bạn ơi. Không phải ai thông minh thì code được cả. Trong lĩnh vực IT đa số là dân tự học đó thì sao.
Cố gắng đọc sách, mày mò, tự tìm hiểu, đừng nôn nóng, học cho chắc cái gốc, cái cơ bản, thì từ từ mọi cái sẽ sáng ra dần dần.
Mình hồi xưa cũng mua sách, photo sách tiếng Anh về tự tra từ điển, tự học đó. Thời mà VN chưa có Internet.
 
Upvote 0
Cần cù bù thông minh bạn ơi. Không phải ai thông minh thì code được cả. Trong lĩnh vực IT đa số là dân tự học đó thì sao.
Cố gắng đọc sách, mày mò, tự tìm hiểu, đừng nôn nóng, học cho chắc cái gốc, cái cơ bản, thì từ từ mọi cái sẽ sáng ra dần dần.
Mình hồi xưa cũng mua sách, photo sách tiếng Anh về tự tra từ điển, tự học đó. Thời mà VN chưa có Internet.
Em cũng đang cố gắng theo kiểu đó đây ạ. Mỗi ngày tích lũy 1 tý. Có hôm chẳng được gì ( vì công ty nhiều việc quá). Còn vụ đọc sách tiếng anh thì chưa ạ. Chắc đó cũng là 1 cách để mình tiếp cận dần dần với môn này.
 
Upvote 0
... Mỗi ngày tích lũy 1 tý. Có hôm chẳng được gì ( vì công ty nhiều việc quá). ...
Có lần tôi nói rằng quyển sách dạy đúng đắn thì phải có phần cho ngừoi học biết rằng học đến chương nào thì đật được tầm hiểu biết về cái gì.

Tôi học cũng chật vật lắm chứ không như người khác thông minh đâu. Nhưng tôi là dân học có bài bản. Khi bắt đầu học tôi vẽ trước cho mình một hạn trình, có chỉ tiêu cho mỗi thời điểm. Sau một thời gian thì xem lại, cứ thấy mình bị bê trễ thì:
1. nếu do biếng nhác thì tự trách mình và học cố lên
2. nếu do hạn trình vượt trên khả năng cá nhân thì vẽ lại hạn trình khác, dễ hơn.
Nếu vẫn thất bại thì quên đi. Tự biết rằng mình không đủ chí.
 
Upvote 0
e đang tạo 1 file xuất dữ liệu từ sheet( "11") sang sheet("a") giống như trong file đính kèm. nhưng có 1 điều kiện nữa em k thể nào làm được là nếu order (cột 13) giống nhau thì sẽ gộp số lượng (cột 8) 1 order chỉ cho ra 1 lần. bác nào biết làm giúp em hoặc hướng dẫn e với. e xin cảm ơn ạ!
Bạn thử cái này xem đúng không nhé.Mình mới làm thử cái này.Chưa test.Chỉnh lại 1 chút code của bạn.:D.
Mã:
Private Sub laygiatri()
Dim i, aa, ad As Worksheet, arr(), kq(), m, darr, s As String, b As Long, k As Long, j As Long, c As Long
m = Sheets("a").Range("B2").Value
Set ad = Sheets("11")
    arr = ad.Range("K2:W" & ad.Range("K10000").End(xlUp).Row).Value
    ReDim kq(1 To UBound(arr, 1), 1 To 13)
    For i = 1 To UBound(arr, 1)
        If UCase(m) = UCase(arr(i, 1)) And Len(arr(i, 13)) > 0 Then
             b = InStr(1, s, arr(i, 13))
             c = b / 10 + 1
           If b = 0 Then
                s = s & arr(i, 13)
                k = k + 1
                For j = 1 To 13
                kq(k, j) = arr(i, j)
                Next j
           Else
               kq(c, 8) = kq(c, 8) + arr(i, 8)
           End If
     End If
    Next i
            Range("b1000").End(xlUp).Offset(1, 0).Resize(k, 13) = kq
 End Sub
 
Upvote 0
e đang tạo 1 file xuất dữ liệu từ sheet( "11") sang sheet("a") giống như trong file đính kèm. nhưng có 1 điều kiện nữa em k thể nào làm được là nếu order (cột 13) giống nhau thì sẽ gộp số lượng (cột 8) 1 order chỉ cho ra 1 lần. bác nào biết làm giúp em hoặc hướng dẫn e với. e xin cảm ơn ạ!
Làm đại thử xem sao

Mã:
Sub test()
    With CreateObject("ADODB.Connection")
        .Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended properties=""Excel 12.0;HDR=No""")
        Sheet2.Range("P5").CopyFromRecordset .Execute("Select F1,F2,F3,F4,F5,F6,F7,SUM(F8),F9,F10,F11,F12,F13 from [K2:W2162] WHERE F1='" & Sheet2.Range("b2") & "' GROUP BY F1,F2,F3,F4,F5,F6,F7,F9,F10,F11,F12,F13")
        
    End With
End Sub
 
Upvote 0
Làm đại thử xem sao

Mã:
Sub test()
    With CreateObject("ADODB.Connection")
        .Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended properties=""Excel 12.0;HDR=No""")
        Sheet2.Range("P5").CopyFromRecordset .Execute("Select F1,F2,F3,F4,F5,F6,F7,SUM(F8),F9,F10,F11,F12,F13 from [K2:W2162] WHERE F1='" & Sheet2.Range("b2") & "' GROUP BY F1,F2,F3,F4,F5,F6,F7,F9,F10,F11,F12,F13")
       
    End With
End Sub
Anh ơi anh có tài liệu về ADO này không.Em học code này nhưng có lúc chạy được lúc không.Em muốn tìm hiểu thêm ấy.:D.
 
Upvote 0
Anh ơi anh có tài liệu về ADO này không.Em học code này nhưng có lúc chạy được lúc không.Em muốn tìm hiểu thêm ấy.:D.
Bạn có thể tìm đọc trong phần ADO căn bản và đố vui về ADO, DAO là có thể dùng được nhé.
 
Upvote 0
Bạn thử cái này xem đúng không nhé.Mình mới làm thử cái này.Chưa test.Chỉnh lại 1 chút code của bạn.:D.
Mã:
Private Sub laygiatri()
Dim i, aa, ad As Worksheet, arr(), kq(), m, darr, s As String, b As Long, k As Long, j As Long, c As Long
m = Sheets("a").Range("B2").Value
Set ad = Sheets("11")
    arr = ad.Range("K2:W" & ad.Range("K10000").End(xlUp).Row).Value
    ReDim kq(1 To UBound(arr, 1), 1 To 13)
    For i = 1 To UBound(arr, 1)
        If UCase(m) = UCase(arr(i, 1)) And Len(arr(i, 13)) > 0 Then
             b = InStr(1, s, arr(i, 13))
             c = b / 10 + 1
           If b = 0 Then
                s = s & arr(i, 13)
                k = k + 1
                For j = 1 To 13
                kq(k, j) = arr(i, j)
                Next j
           Else
               kq(c, 8) = kq(c, 8) + arr(i, 8)
           End If
     End If
    Next i
            Range("b1000").End(xlUp).Offset(1, 0).Resize(k, 13) = kq
End Sub
cảm ơn bác nhé. bậy giờ e thử
Bài đã được tự động gộp:

Làm đại thử xem sao

Mã:
Sub test()
    With CreateObject("ADODB.Connection")
        .Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended properties=""Excel 12.0;HDR=No""")
        Sheet2.Range("P5").CopyFromRecordset .Execute("Select F1,F2,F3,F4,F5,F6,F7,SUM(F8),F9,F10,F11,F12,F13 from [K2:W2162] WHERE F1='" & Sheet2.Range("b2") & "' GROUP BY F1,F2,F3,F4,F5,F6,F7,F9,F10,F11,F12,F13")
       
    End With
End Sub
cảm ơn bác nhé. nhìn code có vẻ thâm hậu quá làm sao để học được kiểu này vậy bác.
Bài đã được tự động gộp:

Bạn thử cái này xem đúng không nhé.Mình mới làm thử cái này.Chưa test.Chỉnh lại 1 chút code của bạn.:D.
Mã:
Private Sub laygiatri()
Dim i, aa, ad As Worksheet, arr(), kq(), m, darr, s As String, b As Long, k As Long, j As Long, c As Long
m = Sheets("a").Range("B2").Value
Set ad = Sheets("11")
    arr = ad.Range("K2:W" & ad.Range("K10000").End(xlUp).Row).Value
    ReDim kq(1 To UBound(arr, 1), 1 To 13)
    For i = 1 To UBound(arr, 1)
        If UCase(m) = UCase(arr(i, 1)) And Len(arr(i, 13)) > 0 Then
             b = InStr(1, s, arr(i, 13))
             c = b / 10 + 1
           If b = 0 Then
                s = s & arr(i, 13)
                k = k + 1
                For j = 1 To 13
                kq(k, j) = arr(i, j)
                Next j
           Else
               kq(c, 8) = kq(c, 8) + arr(i, 8)
           End If
     End If
    Next i
            Range("b1000").End(xlUp).Offset(1, 0).Resize(k, 13) = kq
End Sub
e test rồi chuẩn bài rồi a ạ. thanks a nhiều nha
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom