Xin công thức cộng tổng các điều kiện trùng nhau (1 người xem)

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

Bill group

Thành viên mới
Tham gia
6/8/17
Bài viết
37
Được thích
0
FWl1NBF.jpg
[/IMG] Các bác giúp em!

Em có 1 file nguồn excel như sau:

STT Mã khách hàng Tên khách hàng Số tiền nợ Địa chỉ Và các cột tiếp theo
1 001 a 5,000 Tôn Quang Phiệt ………
2 002 b 70,000 Nguyễn Lương Bằng ………
3 003 c 8,000 Lương Đắc Bắc ………
4 004 d 90,000 Võ Nguyên Giáp ………
5 001 a 25,000 Tôn Quang Phiệt ………
6 002 b 50,000 Nguyễn Lương Bằng ………
7 004 d 6,000 Võ Nguyên Giáp ………
8 002 b 3,000 Nguyễn Lương Bằng ………
9 003 c 2,000 Lương Đắc Bắc ………
10 004 d 8,000 Võ Nguyên Giáp ………
Tổng Cộng 267,000

Em muốn tạo 1 file excel mới như sau (Tự động cộng tổng số tiền nợ của từng khách hàng a, b, c, d, theo mã khách hàng)
STT Mã khách hàng Tên khách hàng Số tiền nợ Địa chỉ Và các cột tiếp theo
1 001 a 30,000 Tôn Quang Phiệt ………
2 002 b 123,000 Nguyễn Lương Bằng ………
3 003 c 10,000 Lương Đắc Bắc ………
4 004 d 104,000 Võ Nguyên Giáp ………
Tổng Cộng 267,000
Các bác giúp em công thức và form với ạ!
 
Lần chỉnh sửa cuối:
Các bác giúp em!

Em có 1 file nguồn excel như sau:

STT Mã khách hàng Tên khách hàng Số tiền nợ Địa chỉ Và các cột tiếp theo
1 001 a 5,000 Tôn Quang Phiệt ………
2 002 b 70,000 Nguyễn Lương Bằng ………
3 003 c 8,000 Lương Đắc Bắc ………
4 004 d 90,000 Võ Nguyên Giáp ………
5 001 a 25,000 Tôn Quang Phiệt ………
6 002 b 50,000 Nguyễn Lương Bằng ………
7 004 d 6,000 Võ Nguyên Giáp ………
8 002 b 3,000 Nguyễn Lương Bằng ………
9 003 c 2,000 Lương Đắc Bắc ………
10 004 d 8,000 Võ Nguyên Giáp ………
Tổng Cộng 267,000

Em muốn tạo 1 file excel mới như sau (Tự động cộng tổng số tiền nợ của từng khách hàng a, b, c, d, theo mã khách hàng)
STT Mã khách hàng Tên khách hàng Số tiền nợ Địa chỉ Và các cột tiếp theo
1 001 a 30,000 Tôn Quang Phiệt ………
2 002 b 123,000 Nguyễn Lương Bằng ………
3 003 c 10,000 Lương Đắc Bắc ………
4 004 d 104,000 Võ Nguyên Giáp ………
Tổng Cộng 267,000
Các bác giúp em công thức và form với ạ!
Bạn nói vậy gửi cái file lên đi dễ hình dung hơn!
 
file đây ạ .........................................................................
 

File đính kèm

FWl1NBF.jpg
Các bác giúp em công thức và form với ạ!

form gì ?

Cách làm:
Đổi cột tiền nợ thành cột cuối cùng. Bôi den cả cột, và kéo nó về phía phải.
Dùng Consolidate để tổng số tiền nợ.
Kéo cột trở về vị trí cũ nếu cần.
 

File đính kèm

Ý của mình muốn bạn làm giúp một cái bảng biểu sang một file excel khác
Trong đó mình cứ có file nguồn là cái file kia nó tự đọng báo cáo cho mình nội dung trên
 
Bạn đang trích dẫn bài nào vậy? của ai???
 
Bạn đang trích dẫn bài nào vậy? của ai???

Gợi ý cho bạn: nếu muốn viết code thì vào các mục liên quan đến ADO mà tham khảo.

(thực sự chủ thớt có thể dùng PowerQuery hay dùng công cụ Query của bạn Nguyễn Duy Tuân, nó đại khái cũng như code VBA)
 
file đây ạ .........................................................................
Bài này mình nghĩ nên đơn giản 1 chút.
Cách 1:
- Copy tất cả các cột trừ cột số tiền nợ sang file mới
- Dùng Data/Remove Duplicate để xóa các dữ liệu trùng
- Dùng công thức Sumif() với điều kiện theo mã khách hàng để tính ra cột số tiền nợ vào file mới
Cách 2: Sử dụng Pivot Table
 
Anh @phulien1902 bài toán dạng này viết code sao Anh?
Mong học hỏi từ Anh!
Dùng ADO thử.

Mã:
Sub LayDL()
    Dim cn As Object
    Set cn = CreateObject("ADODB.Connection")
    cn.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\FileNguon.xlsx;Extended Properties=""Excel 12.0;HDR=No""")
    Sheet1.Range("A2").CopyFromRecordset cn.Execute("Select F2,F3,Sum(F4),F5 From [Sheet1$A5:E14] Group By F2,F3,F5")
End Sub
 

File đính kèm

Dùng ADO thử.

Mã:
Sub LayDL()
    Dim cn As Object
    Set cn = CreateObject("ADODB.Connection")
    cn.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\FileNguon.xlsx;Extended Properties=""Excel 12.0;HDR=No""")
    Sheet1.Range("A2").CopyFromRecordset cn.Execute("Select F2,F3,Sum(F4),F5 From [Sheet1$A5:E14] Group By F2,F3,F5")
End Sub
Cám ơn bác Hai Lúa!
Bác có cách nào đơn giản hơn không ví dụ như dùng công thức ?
Hoặc bác giúp em hướng dẫn, diễn giải code của bác với
vì em làm sang file của em cột và dòng nó thay đổi - file đưa lên là ví dụ thôi
Bác giúp em với em sẽ có hậu tạ
 
Dùng ADO thử.

Mã:
Sub LayDL()
    Dim cn As Object
    Set cn = CreateObject("ADODB.Connection")
    cn.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\FileNguon.xlsx;Extended Properties=""Excel 12.0;HDR=No""")
    Sheet1.Range("A2").CopyFromRecordset cn.Execute("Select F2,F3,Sum(F4),F5 From [Sheet1$A5:E14] Group By F2,F3,F5")
End Sub

Lưu ý cho bạn huonglien1901, ở bài #6
Mạn phép sửa lại như vầy cho dễ xài:
Mã:
Sub LayDL()
fileNguon = ThisWorkbook.Path & "\FileNguon.xlsx"
truyVan = "Select F2,F3,Sum(F4),F5 From [Sheet1$A5:E14] Group By F2,F3,F5"
' câu truy vấn có thể thay đổi
' file nguồn cũng có thể thay đổi, muón hoành tráng thì có thể thêm code chọn file
' nếu không muốn thay đổi thì khong cần phải dùng 2 biến fileNguon và truyVan, cứ đưa thẳng các string text vào làm tham số
ADO_LayDL Sheet1.Range("A2"), fileNguon, truyVan
End Sub

' hàm này có thể để giành trong thư viện
Private Sub ADO_LayDL(byVal rsRange As Range, byVal tgBook As String, byVal sqlStr As String)
    With CreateObject("ADODB.Connection")
    .Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & tgBook & ";Extended Properties=""Excel 12.0;HDR=No""")
    rsRange.CopyFromRecordset cn.Execute(sqlStr)
    End With
End Sub
 
Lưu ý cho bạn huonglien1901, ở bài #6
Mạn phép sửa lại như vầy cho dễ xài:

Sub LayDL()
fileNguon = ThisWorkbook.Path & "\FileNguon.xlsx"
truyVan = "Select F2,F3,Sum(F4),F5 From [Sheet1$A5:E14] Group By F2,F3,F5"
' câu truy vấn có thể thay đổi
' file nguồn cũng có thể thay đổi, muón hoành tráng thì có thể thêm code chọn file
' nếu không muốn thay đổi thì khong cần phải dùng 2 biến fileNguon và truyVan, cứ đưa thẳng các string text vào làm tham số
ADO_LayDL Sheet1.Range("A2"), fileNguon, truyVan
End Sub

' hàm này có thể để giành trong thư viện
Private Sub ADO_LayDL(byVal rsRange As Range, byVal tgBook As String, byVal sqlStr As String)
With CreateObject("ADODB.Connection")
.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & tgBook & ";Extended Properties=""Excel 12.0;HDR=No""")
rsRange.CopyFromRecordset cn.Execute(sqlStr)
End With
End Sub
Không có phần tô đỏ ở trên mới được anh à, và cần xét phiên bản + tiêu đề cột.
Em xin phép chỉnh lại như sau:

Mã:
Private Sub ADO_LayDL(ByVal rsRange As Range, ByVal tgBook As String, ByVal sqlStr As String, Hdr As Boolean)
    Dim v As Integer
    v = Val(Application.Version)
    With CreateObject("ADODB.Connection")
        .Open ("Provider=Microsoft." & IIf(v < 12, "JET.OLEDB.4.0", "ACE.OLEDB.12.0") & ";Data Source=" & tgBook & ";Extended Properties=""Excel " & IIf(v < 12, "8.0", "12.0") & ";HDR=" & IIf(Hdr = False, "No", "Yes") & """")
        rsRange.CopyFromRecordset .Execute(sqlStr)
    End With
End Sub
 
Bác yên tâm em lĩnh hội công nghệ của bác thành thạo em chắc sẽ hậu tạ bác
 

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

Back
Top Bottom