Gộp Dữ Liệu (1 người xem)

Liên hệ QC

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

vuongtoituonglai

Thành viên thường trực
Tham gia
7/5/14
Bài viết
350
Được thích
47
Mình đang gặp vấn đề khó khan nhờ các bạn ở GPE giúp dùm.
Mình có một Ma trận có nhiều loại going nhau nằm ở nhiều dòng khác nhau, nhờ các bạn giúp dùm loại nào có mã going nhau thì gộp lại(gộp cả ma trận) số cột số dòng có nhiều dòng nhiều cột. Mời các bạn xem file đính kèm
 

File đính kèm

Bài này hoàn toàn có thề dùng hàm SUMIF()

Bạn tiếp đi!
 
Upvote 0
[Thongbao]File này dùng hàm SUMIF()

Bạn tiếp đi![/Thongbao]
 

File đính kèm

Upvote 0
Bạn hiểu nhầm ý mình rồi đầu tiên chỉ có 1 dữ kiện(phần có tô màu), dữ kiện 2 không có. sau khi dung code hay dung hàm gì đó thì sẽ cho ra dữ kiện 2.

Tạm gọi vùng dữ liệu có tô màu là CSDL, & vùng còn lại là vùng TH; Bạn ngó lại xem trong vùng TH có công thức không?

Hay là bạn ngồi nhằm lớp excel rồi cũng nên!
 
Upvote 0
Tạm gọi vùng dữ liệu có tô màu là CSDL, & vùng còn lại là vùng TH; Bạn ngó lại xem trong vùng TH có công thức không?

Hay là bạn ngồi nhằm lớp excel rồi cũng nên!

Trong vùng TH có sử dụng hàm SUMIF mà bạn. Theo mình nghỉ vùng TH phải dùng code mới có được.
 
Upvote 0
Nhìn cái hình trong file Matrix.xlsx thì thấy một chữ PIVOT tổ bố. Đã thử Pivot Table chưa?
Tại chủ thớt bị ám ảnh bởi code cho nên cái gì cũng nghĩ rằng code mới giải quyết được.
 
Upvote 0
Nhìn cái hình trong file Matrix.xlsx thì thấy một chữ PIVOT tổ bố. Đã thử Pivot Table chưa?
Tại chủ thớt bị ám ảnh bởi code cho nên cái gì cũng nghĩ rằng code mới giải quyết được.
Trong trường họp này mình chưa dung PIVOT nhưng mình nghĩ là dung không được. Bạn có cách thì chỉ mình đi.
Cảm ơn trước nhé.
 
Upvote 0
Trong trường họp này mình chưa dung PIVOT nhưng mình nghĩ là dung không được. Bạn có cách thì chỉ mình đi.
Cảm ơn trước nhé.
Muốn code thì có code
PHP:
Sub tonghop()
Dim nguon(), kq(1 To 65536, 1 To 11), i, j, k, n
nguon = Range([A2], [A65536].End(3)).Resize(, 11).Value
With CreateObject("scripting.dictionary")
    For i = 1 To UBound(nguon)
       If Not .exists(nguon(i, 1)) Then
            k = k + 1
            .Add nguon(i, 1), k
            For j = 1 To 11
                kq(k, j) = nguon(i, j)
            Next
        Else
            n = .Item(nguon(i, 1))
            For j = 2 To 11
                kq(n, j) = kq(n, j) + nguon(i, j)
                If kq(n, j) = 0 Then kq(n, j) = Empty
            Next
       End If
    Next
End With
[M2].Resize(k, 11) = kq
End Sub
 
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Muốn code thì có code
PHP:
Sub tonghop()
Dim nguon(), kq(1 To 65536, 1 To 11), i, j, k, n
nguon = Range([A2], [A65536].End(3)).Resize(, 11).Value
With CreateObject("scripting.dictionary")
    For i = 1 To UBound(nguon)
       If Not .exists(nguon(i, 1)) Then
            k = k + 1
            .Add nguon(i, 1), k
            For j = 1 To 11
                kq(k, j) = nguon(i, j)
            Next
        Else
            n = .Item(nguon(i, 1))
            For j = 2 To 11
                kq(n, j) = kq(n, j) + nguon(i, j)
                If kq(n, j) = 0 Then kq(n, j) = Empty
            Next
       End If
    Next
End With
[M2].Resize(k, 11) = kq
End Sub
Cảm ơn bạn, Code có vấn đề rồi bạn ơi.
1. tiêu đề bị ngược bên dưới
2. dữ lieu tang gấp đôi so với thực tế
3.Insert thêm cột code chạy không đúng
 
Upvote 0

File đính kèm

Upvote 0
Mình dùng PIVOT TABLE thử nhưng khi kéo các cột còn lại xuống SIGMA VALUES thì nó tự động biến thành "Count of..." và chỉ đếm thôi mà không tính SUM. Mình phải chỉnh lại từng cái.
Có cách nào nhanh hơn anh VietMini chỉ giúp mình với.
 
Upvote 0
Code chạy OK nhưng khi insert thêm cột vào thì có vẻ không ổn lắm, bạn xem lại dùm nhé, dùng code để chạy phần tiêu đề nhé. Cảm ơn bạn đã quan tâm vấn đề này.
Chạy code và xem kết quả ở sheet2
PHP:
Sub tonghop()
Dim tieude()
Dim nguon(), kq(1 To 65536, 1 To 11), i, j, k, n
Sheet1.Select
tieude = Range([A1], [A1].End(2)).Value
nguon = Range([A2], [A65536].End(3)).Resize(, UBound(tieude, 2)).Value
With CreateObject("scripting.dictionary")
    For i = 1 To UBound(nguon)
       If Not .exists(nguon(i, 1)) Then
            k = k + 1
            .Add nguon(i, 1), k
            For j = 1 To 11
                kq(k, j) = nguon(i, j)
            Next
        Else
            n = .Item(nguon(i, 1))
            For j = 2 To UBound(tieude, 2)
                kq(n, j) = kq(n, j) + nguon(i, j)
                If kq(n, j) = 0 Then kq(n, j) = Empty
            Next
       End If
    Next
End With
Sheet2.[A1].Resize(, UBound(tieude, 2)) = tieude
Sheet2.[A2].Resize(k, UBound(tieude, 2)) = kq
End Sub
 
Upvote 0
Mình dùng PIVOT TABLE thử nhưng khi kéo các cột còn lại xuống SIGMA VALUES thì nó tự động biến thành "Count of..." và chỉ đếm thôi mà không tính SUM. Mình phải chỉnh lại từng cái.
Có cách nào nhanh hơn anh VietMini chỉ giúp mình với.

Rất tiếc là ngay cả Excel 2013 cũng chưa có công cụ nào nhanh hơn giải pháp "upload file, download code" cả.

=== Bổ sung 11/05/2014 12:15am ===

Luật chung của Pivot Table là "nếu trong cột có ô trống hoặc có ô không phải là số thì mặc định là Count; nếu các ô đều có số thì mặc định là Sum"

Nếu muốn PT mặc định là Sum thì tìm cách để các ô trống có trị là 0. Một trong những mẹo để Excel "tưởng" ô có trị là dùng dynamic named range.
 
Lần chỉnh sửa cuối:
Upvote 0
Chạy code và xem kết quả ở sheet2
PHP:
Sub tonghop()
Dim tieude()
Dim nguon(), kq(1 To 65536, 1 To 11), i, j, k, n
Sheet1.Select
tieude = Range([A1], [A1].End(2)).Value
nguon = Range([A2], [A65536].End(3)).Resize(, UBound(tieude, 2)).Value
With CreateObject("scripting.dictionary")
    For i = 1 To UBound(nguon)
       If Not .exists(nguon(i, 1)) Then
            k = k + 1
            .Add nguon(i, 1), k
            For j = 1 To 11
                kq(k, j) = nguon(i, j)
            Next
        Else
            n = .Item(nguon(i, 1))
            For j = 2 To UBound(tieude, 2)
                kq(n, j) = kq(n, j) + nguon(i, j)
                If kq(n, j) = 0 Then kq(n, j) = Empty
            Next
       End If
    Next
End With
Sheet2.[A1].Resize(, UBound(tieude, 2)) = tieude
Sheet2.[A2].Resize(k, UBound(tieude, 2)) = kq
End Sub
Cảm ơn bạn, có cách nào khi insert them cột, bớt cột mà code không cần chỉnh sửa không bạn, code hiện tại từ cột 1 đến 11(For j=1 To 11) mình chỉnh code số cột là 100 thì báo lỗi.
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn bạn, có cách nào khi insert them cột, bớt cột mà code không cần chỉnh sửa không bạn, code hiện tại từ cột 1 đến 11(For j=1 To 11) mình chỉnh code số cột là 100 thì báo lỗi.
Code này chắc là ổn rồi đó. Muốn thêm hay bớt cột gì cũng được.
PHP:
Sub tonghop()
Dim nguon(), tieude(), kq(), i, j, k, n, cot
Sheet1.Select
tieude = Range([A1], [A1].End(2)).Value
cot = UBound(tieude, 2)
nguon = Range([A2], [A65536].End(3)).Resize(, cot).Value
ReDim kq(1 To 65536, 1 To cot)
With CreateObject("scripting.dictionary")
    For i = 1 To UBound(nguon)
       If Not .exists(nguon(i, 1)) Then
            k = k + 1
            .Add nguon(i, 1), k
            For j = 1 To 11
                kq(k, j) = nguon(i, j)
            Next
        Else
            n = .Item(nguon(i, 1))
            For j = 2 To cot
                kq(n, j) = kq(n, j) + nguon(i, j)
                If kq(n, j) = 0 Then kq(n, j) = Empty
            Next
       End If
    Next
End With
Sheet2.[A1].Resize(, cot) = tieude
Sheet2.[A2].Resize(k, cot) = kq
End Sub
 
Upvote 0
Code này chắc là ổn rồi đó. Muốn thêm hay bớt cột gì cũng được.
PHP:
Sub tonghop()
Dim nguon(), tieude(), kq(), i, j, k, n, cot
Sheet1.Select
tieude = Range([A1], [A1].End(2)).Value
cot = UBound(tieude, 2)
nguon = Range([A2], [A65536].End(3)).Resize(, cot).Value
ReDim kq(1 To 65536, 1 To cot)
With CreateObject("scripting.dictionary")
    For i = 1 To UBound(nguon)
       If Not .exists(nguon(i, 1)) Then
            k = k + 1
            .Add nguon(i, 1), k
            For j = 1 To 11
                kq(k, j) = nguon(i, j)
            Next
        Else
            n = .Item(nguon(i, 1))
            For j = 2 To cot
                kq(n, j) = kq(n, j) + nguon(i, j)
                If kq(n, j) = 0 Then kq(n, j) = Empty
            Next
       End If
    Next
End With
Sheet2.[A1].Resize(, cot) = tieude
Sheet2.[A2].Resize(k, cot) = kq
End Sub
Cảm ơn bạn đã nhiệt tình giúp đở, dữ lieu của mình không hiểu sao chạy code không được bạn xem lại dùm mình nhé.
Mình up file lên nhờ bạn kiểm tra dùm mình sao code không chạy được
, cảm ơn bạn nhiều
 

File đính kèm

  • 1.jpg
    1.jpg
    75.9 KB · Đọc: 8
  • Matrix.xlsm
    Matrix.xlsm
    17.8 KB · Đọc: 2
Lần chỉnh sửa cuối:
Upvote 0
Mình đang gặp vấn đề khó khan nhờ các bạn ở GPE giúp dùm.
Mình có một Ma trận có nhiều loại going nhau nằm ở nhiều dòng khác nhau, nhờ các bạn giúp dùm loại nào có mã going nhau thì gộp lại(gộp cả ma trận) số cột số dòng có nhiều dòng nhiều cột. Mời các bạn xem file đính kèm

Bạn tham khảo ở đây

http://www.giaiphapexcel.com/forum/showthread.php?90556-Cách-dồn-dòng-trong-excel
 
Upvote 0
Cảm ơn bạn đã nhiệt tình giúp đở, dữ lieu của mình không hiểu sao chạy code không được bạn xem lại dùm mình nhé.

Bạn up cái hình và nói là dữ liệu của bạn không chạy được thì ai biết đâu mà giúp tiếp. Đoạn code trên về nguyên lý là ổn rồi. Bạn nào có thời gian thì test hộ chủ topic nha.
 
Upvote 0
Chủ thớt xem thế này được không ?
 

File đính kèm

Upvote 0
Bạn up cái hình và nói là dữ liệu của bạn không chạy được thì ai biết đâu mà giúp tiếp. Đoạn code trên về nguyên lý là ổn rồi. Bạn nào có thời gian thì test hộ chủ topic nha.

Mình up file lên, bạn xem dùm mình sao code chạy không được. Cảm ơn
 

File đính kèm

Upvote 0
Mình up file lên, bạn xem dùm mình sao code chạy không được. Cảm ơn
Mình sót 1 chổ chưa điều chỉnh nên code bị lỗi
PHP:
Sub tonghop()
Dim nguon(), tieude(), kq(), i, j, k, n, cot
Sheet1.Select
tieude = Range([A1], [A1].End(2)).Value
cot = UBound(tieude, 2)
nguon = Range([A2], [A65536].End(3)).Resize(, cot).Value
ReDim kq(1 To 65536, 1 To cot)
With CreateObject("scripting.dictionary")
    For i = 1 To UBound(nguon)
       If Not .exists(nguon(i, 1)) Then
            k = k + 1
            .Add nguon(i, 1), k
            For j = 1 To cot
                kq(k, j) = nguon(i, j)
            Next
        Else
            n = .Item(nguon(i, 1))
            For j = 2 To cot
                kq(n, j) = kq(n, j) + nguon(i, j)
                If kq(n, j) = 0 Then kq(n, j) = Empty
            Next
       End If
    Next
End With
Sheet2.[A1].Resize(, cot) = tieude
Sheet2.[A2].Resize(k, cot) = kq
End Sub
 
Upvote 0
Mình sót 1 chổ chưa điều chỉnh nên code bị lỗi
PHP:
Sub tonghop()
Dim nguon(), tieude(), kq(), i, j, k, n, cot
Sheet1.Select
tieude = Range([A1], [A1].End(2)).Value
cot = UBound(tieude, 2)
nguon = Range([A2], [A65536].End(3)).Resize(, cot).Value
ReDim kq(1 To 65536, 1 To cot)
With CreateObject("scripting.dictionary")
    For i = 1 To UBound(nguon)
       If Not .exists(nguon(i, 1)) Then
            k = k + 1
            .Add nguon(i, 1), k
            For j = 1 To cot
                kq(k, j) = nguon(i, j)
            Next
        Else
            n = .Item(nguon(i, 1))
            For j = 2 To cot
                kq(n, j) = kq(n, j) + nguon(i, j)
                If kq(n, j) = 0 Then kq(n, j) = Empty
            Next
       End If
    Next
End With
Sheet2.[A1].Resize(, cot) = tieude
Sheet2.[A2].Resize(k, cot) = kq
End Sub
Code này thì quá đạt rồi, cảm ơn bạn nhiều.
 
Upvote 0

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

Back
Top Bottom