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

nhatchinhvuong

Thành viên mới
Tham gia ngày
18 Tháng sáu 2019
Bài viết
5
Được thích
0
Điểm
13
Tuổi
27
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

buiquangthuan

Quyết tâm học để biết đến VBA
Tham gia ngày
17 Tháng mười hai 2010
Bài viết
191
Được thích
43
Điểm
370
Nơi ở
Bắc Ninh
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

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

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
6,081
Được thích
10,071
Điểm
1,860
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) . . . . .
 

nhatchinhvuong

Thành viên mới
Tham gia ngày
18 Tháng sáu 2019
Bài viết
5
Được thích
0
Điểm
13
Tuổi
27
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:
 

buiquangthuan

Quyết tâm học để biết đến VBA
Tham gia ngày
17 Tháng mười hai 2010
Bài viết
191
Được thích
43
Điểm
370
Nơi ở
Bắc Ninh
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.
 

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
6,081
Được thích
10,071
Điểm
1,860
. . . 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.
 

VetMini

Gian hùng bàn phiếm (thành viên trôi nước)
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
7,086
Được thích
8,322
Điểm
560
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:

buiquangthuan

Quyết tâm học để biết đến VBA
Tham gia ngày
17 Tháng mười hai 2010
Bài viết
191
Được thích
43
Điểm
370
Nơi ở
Bắc Ninh
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
 

ThangCuAnh

Mới rờ Ét xeo
Tham gia ngày
1 Tháng mười hai 2017
Bài viết
825
Được thích
654
Điểm
360
Nơi ở
Phờ lây cu
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.
 

buiquangthuan

Quyết tâm học để biết đến VBA
Tham gia ngày
17 Tháng mười hai 2010
Bài viết
191
Được thích
43
Điểm
370
Nơi ở
Bắc Ninh
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.
 

VetMini

Gian hùng bàn phiếm (thành viên trôi nước)
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
7,086
Được thích
8,322
Điểm
560
... 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í.
 

snow25

Thành viên gắn bó
Tham gia ngày
24 Tháng bảy 2018
Bài viết
2,207
Được thích
1,982
Điểm
360
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
 

Hai Lúa Miền Tây

❆❆❆❆❆❆❆❆
Thành viên BQT
Administrator
Tham gia ngày
18 Tháng ba 2008
Bài viết
7,328
Được thích
14,180
Điểm
1,910
Nơi ở
Đồng ruộng Long An
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
 

snow25

Thành viên gắn bó
Tham gia ngày
24 Tháng bảy 2018
Bài viết
2,207
Được thích
1,982
Điểm
360
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.
 

Hai Lúa Miền Tây

❆❆❆❆❆❆❆❆
Thành viên BQT
Administrator
Tham gia ngày
18 Tháng ba 2008
Bài viết
7,328
Được thích
14,180
Điểm
1,910
Nơi ở
Đồng ruộng Long An
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é.
 

nhatchinhvuong

Thành viên mới
Tham gia ngày
18 Tháng sáu 2019
Bài viết
5
Được thích
0
Điểm
13
Tuổi
27
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 ạ. Cảm ơn a nhiều nha
 
Lần chỉnh sửa cuối:
Top Bottom