Tôi thấy bài của bạn làm pivot table thì hợp lý hơn. Vừa nhanh vừa gọn.Chào các Anh/chị!
Em nhờ các Anh/chị chỉ giúp em công thức gom: một người nộp tiền cùng một ngày thành một số phiếu thu ạ. Em có gửi kèm file
Nhờ các Anh/chị chỉ giúp, Em cám ơn ạ!
VBA dùng không bạn.Chào các Anh/chị!
Em nhờ các Anh/chị chỉ giúp em công thức gom: một người nộp tiền cùng một ngày thành một số phiếu thu ạ. Em có gửi kèm file
Nhờ các Anh/chị chỉ giúp, Em cám ơn ạ!
Sub ketqua()
Dim arr, arr1
Dim dic As Object
Dim a As Long, i As Long, j As Long, lr As Long, b As Long, c As Long
Dim dk As String
Set dic = CreateObject("scripting.dictionary")
With Sheet1
lr = .Range("B" & Rows.Count).End(xlUp).Row
If lr < 10 Then MsgBox "khong co du lieu": Exit Sub
arr = .Range("A10:e" & lr).Value
ReDim arr1(1 To UBound(arr, 1), 1 To 6)
For i = 1 To UBound(arr, 1)
dk = arr(i, 1) & " # " & arr(i, 3) & " & " & arr(i, 5)
If dic.exists(dk) = 0 Then
a = a + 1
arr1(a, 1) = a
For j = 2 To 6
arr1(a, j) = arr(i, j - 1)
Next j
dic.Item(dk) = Array(a)
Else
b = dic.Item(dk)(0)
arr1(b, 3) = arr1(b, 3) + arr(i, 2)
End If
Next i
c = .Range("G" & Rows.Count).End(xlUp).Row
If c > 9 Then .Range("G10:L" & c).ClearContents
.Range("G10").Resize(a, 6).Value = arr1
End With
End Sub
Theo mình hiểu: cột C chưa có, cần kết quả giống y chang cột CVBA dùng không bạn.
Mã:Sub ketqua() Dim arr, arr1 Dim dic As Object Dim a As Long, i As Long, j As Long, lr As Long, b As Long, c As Long Dim dk As String Set dic = CreateObject("scripting.dictionary") With Sheet1 lr = .Range("B" & Rows.Count).End(xlUp).Row If lr < 10 Then MsgBox "khong co du lieu": Exit Sub arr = .Range("A10:e" & lr).Value ReDim arr1(1 To UBound(arr, 1), 1 To 6) For i = 1 To UBound(arr, 1) dk = arr(i, 1) & " # " & arr(i, 3) & " & " & arr(i, 5) If dic.exists(dk) = 0 Then a = a + 1 arr1(a, 1) = a For j = 2 To 6 arr1(a, j) = arr(i, j - 1) Next j dic.Item(dk) = Array(a) Else b = dic.Item(dk)(0) arr1(b, 3) = arr1(b, 3) + arr(i, 2) End If Next i c = .Range("G" & Rows.Count).End(xlUp).Row If c > 9 Then .Range("G10:L" & c).ClearContents .Range("G10").Resize(a, 6).Value = arr1 End With End Sub
Bạn gửi cái file không được lên mình xem nào.Dạ, sao em nhập tiếp thử sao không được ạ?
Dạ, đúng rồi ạ. Nhờ anh HieuCD chỉ giúp em ạTheo mình hiểu: cột C chưa có, cần kết quả giống y chang cột C
Dạ, cột C là cột chưa có gì. Đó là cột cho kết quả ạBạn gửi cái file không được lên mình xem nào.
Cần làm rỏ 2 vấn đề:Dạ, đúng rồi ạ. Nhờ anh HieuCD chỉ giúp em ạ
Bài đã được tự động gộp:
Dạ, cột C là cột chưa có gì. Đó là cột cho kết quả ạ
Dạ, em xin làm rõ 2 vấn đề ạ:Cần làm rỏ 2 vấn đề:
1/ số thứ tự mỗi tháng đánh lại từ 0001 ?
2/ 2 ký tự đầu: khi nào là BC khi nào là BN ?
Dữ liệu ít thì dùng công thức ExcelDạ, em xin làm rõ 2 vấn đề ạ:
1/ số thứ tự mỗi tháng sẽ đánh lại từ số 0001
2/ 2 ký tự đầu: khi thu tiền sẽ là BC, khi chi tiền sẽ là BN theo từng ngân hàng, em có 4 ngân hàng: BIDV, VCB, TPB, DAB. Cụ thể như kết quả ở cột D tiền vào BIDV sẽ cho kết quả: BCBIDV18120001
- BC: thu tiền
- BN: chi tiền
- BIDV, VCB, TPB, DAB: là ngân hàng
- 1812: năm tháng
- 0001: số chạy
Nhờ anh HieuCD chỉ giúp em với ạ. (Em gửi kèm lại file). Em cám ơn ạ!
Dạ,Dữ liệu ít thì dùng công thức Excel
Dạ,Gữ liệu nhiều thì nhờ bạn @snow25 viết code VBA![]()
Nhầm lẫn tai hạiDạ,
Tổng 1 ngày của người nộp tiền/nhận tiền là: cùng 1 số phiếu thu/chi trong ngày đó, nhưng qua ngày tiếp là số nhảy tiếp, chứ không phải gom chung vào phiếu BCBIDV1812001 ạ.
Nhờ anh HieuCD chỉ lại giúp em ạ.
Em cám ơn !
=IFERROR(LOOKUP(2,1/(MID($E$2:E2,6,3)=MID($E$2:E2,6,3))/($B$2:B2=B3)/($F$2:F2=F3),$D$2:D3),IF(MID(E3,6,3)="Thu","BC","BN")&O3&TEXT(B3,"yymm")&TEXT(MAX(INDEX(RIGHT($D$2:D2,4)*(MID($E$2:E2,6,3)=MID(E3,6,3))*(TEXT($B$2:B2,"yymm")=TEXT(B3,"yymm")),))+1,"0000"))
Dạ, được rồi ạ, Cám ơn anh HieuCD nhiều ạNhầm lẫn tai hại
Chỉnh lại công thức ô D3Mã:=IFERROR(LOOKUP(2,1/(MID($E$2:E2,6,3)=MID($E$2:E2,6,3))/($B$2:B2=B3)/($F$2:F2=F3),$D$2:D3),IF(MID(E3,6,3)="Thu","BC","BN")&O3&TEXT(B3,"yymm")&TEXT(MAX(INDEX(RIGHT($D$2:D2,4)*(MID($E$2:E2,6,3)=MID(E3,6,3))*(TEXT($B$2:B2,"yymm")=TEXT(B3,"yymm")),))+1,"0000"))