Lấy dữ liệu dòng tiếp theo của sheet trước nếu ô phía trên rỗng
Chào cả nhà,
Nhờ các cao nhân xử lý giúp em công thức trong file đính kèm, cụ thể:
Em đang thiết lập form chứng từ kế toán (sheet "Fast) để lấy dữ liệu từ phần mềm bán hàng (sheet "Data") lên và đang vướng cột O sheet "Fast", dữ liệu tại cột này sẽ được lấy từ cột D sheet "data" và nhóm các code giống nhau của cột AQ sheet "Data" lại và tính tổng cho dòng tiếp theo cho mỗi code, nếu khác code thì cột O sheet "Fast" sẽ lấy dữ liệu ô tiếp theo cột D sheet "Data". Hiện tại file chỉ lấy tổng được 1 code, tới code tiếp theo tại ô O19 không tính được tổng cho code đó. Nhờ mọi người xử lý giúp em với ạ, em cảm ơn.
Nếu bạn đang dùng phần mềm FAST thì trong FAST có phần tự thiết kế, nếu bạn dùng được nó là tốt nhất.
Với sheet FAST, mình đoán bạn đang cố gắng lập các bút toán Nợ-Có, nhóm chi phí theo từng khách hàng.
Bảng này mà dùng công thức thì rất phức tạp. Chưa kể cột số chứng từ (cột C) bạn đang để 1 số chứng từ duy nhất cho nhiều bút toán Nợ-Có.
Vì data có thể rất lớn do nó là data phát sinh cho nhiều tháng, khuyên bạn nên dùng VBA với nút bấm để kết xuất ra kết quả.
Bây giờ bạn bỏ hết công thức đi, điền tay kết quả mong muốn, còn lại mọi ngườii ở đây sẽ giúp bạn viết code.
Đúng rồi, mình đang tạo các bút toán nợ có theo từng khách hàng, các nội dung diễn giải cũng như hạch toán các tài khoản hay mã khách cũng đều dựa trên dữ liệu cột O, như vậy mình không có cách nào dùng excel được sao ạ?
Nhấn nút RUN bên sheet Data, sẽ cập nhật kết quả bên sheet FAST
Code:
Option Explicit
Sub FAST()
Dim lr&, i&, j&, k&, count&, sum As Double, n As Boolean
Dim data, res(1 To 100000, 1 To 30), ngay As String, quyen As String, soCT As String
count = 1
ngay = "28/02/2023": quyen = "PKT001/2023": soCT = "PK02643/2023"""
With Sheets("Data")
lr = .Cells(Rows.count, "A").End(xlUp).Row
data = .Range("A1:AS" & lr).Value
For i = 2 To UBound(data)
k = k + 1
If i = 2 Or data(i – 1, 43) = data(i, 43) Or n Then
sum = sum + data(i, 11): n = False
res(k, 5) = .Range("AZ2").Value & data(i, 4)
res(k, 6) = data(i, 45): res(k, 7) = data(i, 11): res(k, 13) = count
res(k, 14) = "0314350975": res(k, 15) = data(i, 4)
Else
res(k, 5) = .Range("AZ3").Value
res(k, 6) = "338811": res(k, 8) = sum: res(k, 13) = count
res(k, 14) = data(i, 43)
sum = 0: count = count + 1: n = True
If n Then i = i – 1
End If
Next
k = k + 1
res(k, 5) = .Range("AZ3").Value
res(k, 6) = "338811": res(k, 8) = sum: res(k, 13) = count
res(k, 14) = data(i – 1, 43)
End With
With Sheets("FAST")
.Range("A2:AD100000").ClearContents
.Range("A2").Resize(k, 30).Value = res
.Range("A2").Resize(k, 1).Value = ngay
.Range("B2").Resize(k, 1).Value = quyen
.Range("C2").Resize(k, 1).Value = soCT
.Range("D2").Resize(k, 1).Value = Sheets("Data").Range("AZ4") & Mid(ngay, 4, 2)
End With
End Sub
Em chạy file được rồi tuy nhiên code bên Fast lấy chưa đúng như trong cmt file đính kèm, nhờ anh xem lại giúp em nhé. Cảm ơn anh.
Sửa lại 1 chút chỗ này:
res(k, 14) = data(i, 43)
thành
res(k, 14) = data(i-1, 43)
Else
res(k, 5) = .Range("AZ3").Value
res(k, 6) = "338811": res(k, 8) = sum: res(k, 13) = count
res(k, 14) = data(i, 43)
Thành
Else
res(k, 5) = .Range("AZ3").Value
res(k, 6) = "338811": res(k, 8) = sum: res(k, 13) = count
res(k, 14) = data(i – 1, 43)
www.giaiphapexcel.com/diendan/threads/l%E1%BA%A5y-d%E1%BB%AF-li%E1%BB%87u-d%C3%B2ng-ti%E1%BA%BFp-theo-c%E1%BB%A7a-sheet-tr%C6%B0%E1%BB%9Bc-n%E1%BA%BFu-%C3%B4-ph%C3%ADa-tr%C3%AAn-r%E1%BB%97ng.164289/
Ứng dụng AI và Chat GPT trong Quản trị nhân sự
Học xong khóa này, học viên có thể: Hiểu đúng bản chất AI, các nhóm AI phổ biến và cách AI “hoạt động” ở...
Xem khóa học
Bình luận