Hỏi:Làm sao để tự động tổng hợp dữ liệu

  • Thread starter Thread starter khoa289
  • Ngày gửi Ngày gửi
Liên hệ QC

khoa289

Thành viên hoạt động
Tham gia
30/7/08
Bài viết
136
Được thích
7
Chào anh/chị
Tôi đang tổng hợp dữ liệu như file đính kèm. Nhưng nếu làm thủ công sẽ rất mất thời gian và không chính xác. Vì vậy nhờ anh/chị giúp code VBA.
[Hỏi].Làm sao để khi thay đổi giá trị tại ô C2 hoặc ô C3 thì các ô C7 đến C14 sẽ tự động thay đổi và tổng hợp kết quả từ sheet "Ban đầu".
Cám ơn.
 

File đính kèm

Muón C7-C14 thay đổi mõi khi C2-C3 thay đổi thì cho thêm giá trị của C2-C3 vào công thức.
Ví dụ công thức ở C7 là =abcdefgh
Thì sửa thành =abcdefgh + N("X"&C2&C3)
(hàm N sẽ luôn luôn ra kết quả 0 cho nên chả ảnh hưởng gì đến kết quả của C7 cả. Nếu kết quả của C7 là chuỗi thì dùng cách tương tự để lấy chuỗi "")
 
Upvote 0
Muón C7-C14 thay đổi mõi khi C2-C3 thay đổi thì cho thêm giá trị của C2-C3 vào công thức.
Ví dụ công thức ở C7 là =abcdefgh
Thì sửa thành =abcdefgh + N("X"&C2&C3)
(hàm N sẽ luôn luôn ra kết quả 0 cho nên chả ảnh hưởng gì đến kết quả của C7 cả. Nếu kết quả của C7 là chuỗi thì dùng cách tương tự để lấy chuỗi "")
Cám ơn anh đã góp ý.
Vì tên dự án và tên gói thầu(Dự kiến có 10 dự án và hơn trăm gói thầu) có rất nhiều nên tại Ô C2(Tên dự án) và ô C3(Tên gói thầu) sẽ thay đổi liên tục, vì vậy khi thêm công thức sẽ không đủ và sửa lại công thức rất thủ công. Đặc biệt phải sửa công thức ở ô C7,C8,C10,C11,C14..
Có công thức nào tổng quát không góp ý cho mình với (Ví dụ như C9,C12,C13 luôn đúng khi C2,C3 thay đổi) hoặc có code VBA nào để giải quyết không. Cám ơn.
 
Upvote 0
Chả phải làm gì thêm thì C9, C12, C13 cũng thay đổi khi C2 và/hoặc C3 thay đổi. Còn các C khác thì tại sao lại phải tính lại khi C2, C3 thay đổi? Vì chúng không phụ thuộc vào C2, C3 nên dù tính lại thì kết quả vẫn thế. Vậy tính lại để tiêu bớt điện nước thừa thãi?

Còn nếu ý khác thì giải thích rõ. Nếu cần thì sau khi giải thích hãy lấy ví dụ cụ thể để người khác hiểu được cái giải thích vòng vo kia.
 
Upvote 0
Chào anh/chị
Tôi đang tổng hợp dữ liệu như file đính kèm. Nhưng nếu làm thủ công sẽ rất mất thời gian và không chính xác. Vì vậy nhờ anh/chị giúp code VBA.
[Hỏi].Làm sao để khi thay đổi giá trị tại ô C2 hoặc ô C3 thì các ô C7 đến C14 sẽ tự động thay đổi và tổng hợp kết quả từ sheet "Ban đầu".
Cám ơn.
Trong file bạn chỉ dùng 2 hàm là SUMIFS và TEXT, vậy bạn có thể record macro để biết code VBA viết ra sao. Riêng với hàm TEXT thì trong VBA có hàm Format thay thế
Nếu dữ liệu bạn khác hơn, nhiều hơn, vui lòng đưa file đầy đủ lên đây mới tính được
(tại tôi thấy phần tổng hợp chỉ có mấy dòng nên dù làm bằng công thức hay code cũng đâu có khó khăn gì)
 
Upvote 0
Cám ơn anh/chị đã góp ý.
Mình nói rõ như sau:
Ví dụ tại sheet "Tong hop" khi C2 là "Nhà ở-Khu 1A2", C3 là "Thi công xây dựng phần móng và phần thân 1B" thì C7 sẽ là 90/QĐ-HĐQT;91/QĐ-HĐQT;92/QĐ-HĐQT;93/QĐ-HĐQT;94/QĐ-HĐQT;95/QĐ-HĐQT. Tương tự C8 đến C14 sẽ tự động tổng hợp được dữ liệu từ sheet "Ban dau"
Tóm lai: Khi C2, C3 tại sheet "Tong hop" thay đổi tên dự án, tên gói thầu thì tại C7 đến C14 sẽ tự động cập nhật tất cả dữ liệu từ sheet "Ban dau" sang sheet "tong hop".
Đính kèm file
Cám ơn.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Trong tập tin đính kèm ít ra phải điền bằng tay các kết quả mong muốn tại C7:C14. Đừng bắt người khác phải đoán mò khi mình có thể nói ra.

Muốn giúp thì phải hiểu rõ người kia muốn gì. Đoán mò không phải lúc nào cũng trúng. Mà tại sao phải đoán mò khi bạn có thể nói. Tốt nhất nên nói rõ cách tính. Đoại loại như: để tính Cx thì ta lấy C2 xào với giá trị tìm được ở "BAN DAU" theo qui trình ... rồi sau đó thêm mắm muối có được từ BAN DAU theo qui trình ..., sau cùng thì cho ít rượu lấy từ BAN DAU theo qui trình ... Kết quả nhập vào Cx.
 
Upvote 0
- Với bài này gọi là lọc và gộp dữ liệu giống nhau thì đúng hơn.
- File đưa lên chỉ có 1 loại gói thầu thì mắc chi phải lọc C3 chi cho mệt.
- Tại C2 Sheet KET QUA: Lọc duy nhất 1 loại dự án rồi gộp theo tiêu chí cột nhưng giải thích vòng vo nên chẳng thành viên nào hiểu cả.
 
Lần chỉnh sửa cuối:
Upvote 0
Thôi tôi đoán mò và tự mô tả, viết code.
Nếu yêu cầu khác thì hãy mô tả , bắt chước kiểu mô tả của tôi.

Vấn đề: "Trong sheet KET QUA cột B chứa các tiêu đề cột của bảng trong sheet BAN DAU. Em muốn khi chọn Dự án trong C2 và/hoặc Tên gói thầu trong C3 thì code sẽ lọc các dòng của bảng trong BAN DAU theo 2 điều kiên Dự án và Tên gói thầu. Kết quả từ các cột E:L sẽ được nhập vào các ô C7:C14. Từ các cột G, J, K sẽ được tính tổng các dòng thỏa đk, còn các cột khác thì là nối chuỗi với dấu phân cách là dấu chẫm phẩy."
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Long, c2 As String, c3 As String, data(), result(1 To 8, 1 To 1)
    If Intersect(Target, Range("C2:C3")) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    Me.Range("C7:C" & Me.Cells(Rows.Count, "A").End(xlUp).Row + 1).ClearContents
    c2 = LCase(Me.Range("C2").Value)
    c3 = LCase(Me.Range("C3").Value)
    With ThisWorkbook.Worksheets("BAN DAU")
        data = .Range("B7:L" & .Cells(Rows.Count, "B").End(xlUp).Row + 1).Value
    End With
    For r = 1 To UBound(data) - 1
        If LCase(data(r, 1)) = c2 And LCase(data(r, 3)) = c3 Then
            result(1, 1) = result(1, 1) & ";" & data(r, 4)
            result(2, 1) = result(2, 1) & ";" & data(r, 5)
            result(3, 1) = result(3, 1) + data(r, 6)
            result(4, 1) = result(4, 1) & ";" & data(r, 7)
            result(5, 1) = result(5, 1) & ";" & data(r, 8)
            result(6, 1) = result(6, 1) + data(r, 9)
            result(7, 1) = result(7, 1) + data(r, 10)
            result(8, 1) = result(8, 1) & ";" & data(r, 11)
        End If
    Next r
    If Len(result(1, 1)) Then
        result(1, 1) = Mid(result(1, 1), 2)
        result(2, 1) = Mid(result(2, 1), 2)
        result(4, 1) = Mid(result(4, 1), 2)
        result(5, 1) = Mid(result(5, 1), 2)
        result(8, 1) = Mid(result(8, 1), 2)
        Range("C7:C14").Value = result
    End If
    Application.EnableEvents = True
End Sub
 
Upvote 0
Thôi tôi đoán mò và tự mô tả, viết code.
Nếu yêu cầu khác thì hãy mô tả , bắt chước kiểu mô tả của tôi.

Vấn đề: "Trong sheet KET QUA cột B chứa các tiêu đề cột của bảng trong sheet BAN DAU. Em muốn khi chọn Dự án trong C2 và/hoặc Tên gói thầu trong C3 thì code sẽ lọc các dòng của bảng trong BAN DAU theo 2 điều kiên Dự án và Tên gói thầu. Kết quả từ các cột E:L sẽ được nhập vào các ô C7:C14. Từ các cột G, J, K sẽ được tính tổng các dòng thỏa đk, còn các cột khác thì là nối chuỗi với dấu phân cách là dấu chẫm phẩy."
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Long, c2 As String, c3 As String, data(), result(1 To 8, 1 To 1)
    If Intersect(Target, Range("C2:C3")) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    Me.Range("C7:C" & Me.Cells(Rows.Count, "A").End(xlUp).Row + 1).ClearContents
    c2 = LCase(Me.Range("C2").Value)
    c3 = LCase(Me.Range("C3").Value)
    With ThisWorkbook.Worksheets("BAN DAU")
        data = .Range("B7:L" & .Cells(Rows.Count, "B").End(xlUp).Row + 1).Value
    End With
    For r = 1 To UBound(data) - 1
        If LCase(data(r, 1)) = c2 And LCase(data(r, 3)) = c3 Then
            result(1, 1) = result(1, 1) & ";" & data(r, 4)
            result(2, 1) = result(2, 1) & ";" & data(r, 5)
            result(3, 1) = result(3, 1) + data(r, 6)
            result(4, 1) = result(4, 1) & ";" & data(r, 7)
            result(5, 1) = result(5, 1) & ";" & data(r, 8)
            result(6, 1) = result(6, 1) + data(r, 9)
            result(7, 1) = result(7, 1) + data(r, 10)
            result(8, 1) = result(8, 1) & ";" & data(r, 11)
        End If
    Next r
    If Len(result(1, 1)) Then
        result(1, 1) = Mid(result(1, 1), 2)
        result(2, 1) = Mid(result(2, 1), 2)
        result(4, 1) = Mid(result(4, 1), 2)
        result(5, 1) = Mid(result(5, 1), 2)
        result(8, 1) = Mid(result(8, 1), 2)
        Range("C7:C14").Value = result
    End If
    Application.EnableEvents = True
End Sub
Cám ơn bạn Batman1 rất rất nhiều.
Làm sao để thể hiện tháng là số chứ không phải là chữ (Tại cột C8, C11 của sheet Ket qua):
21-Oct-16 chuyển thành 21-10-16.
Cám ơn
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom