Lấy dữ liệu dòng tiếp theo của sheet trước nếu ô phía trên rỗng

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

thuyduong8511

Thành viên mới
Tham gia
9/4/08
Bài viết
6
Được thích
0
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.
 

File đính kèm

  • AP Over Sea 2023_02.xlsx
    255.7 KB · Đọc: 8
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.
 
Upvote 0
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 ạ?
 
Upvote 0
Đú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 ạ?
Được chứ bạn. Bạn bỏ công thức đi, nhập tay kết quả muốn có rồi post lại nhé.
 
Upvote 0
Nhấn nút RUN bên sheet Data, sẽ cập nhật kết quả bên sheet FAST
Code:
PHP:
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
 

File đính kèm

  • AP Over Sea 2023_02.xlsm
    260.5 KB · Đọc: 6
Upvote 0
Nhấn nút RUN bên sheet Data, sẽ cập nhật kết quả bên sheet FAST
Code:
PHP:
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
Sao em nhấn nút Run mà nó không chạy nhỉ? nó chỉ hiện biểu tượng thôi chứ không thấy kích hoạt
1678412541487.png
 
Upvote 0
sorry quên.Bạn click chuột phải, chọn assign macro, chọn FAST rồi nhấn OK nhé
 
Upvote 0
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)
PHP:
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
PHP:
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)
 
Upvote 0
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)
PHP:
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
PHP:
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)
Em chạy file được rồi, cảm ơn anh đã dành thời gian hỗ trợ. Chúc anh cuối tuần vui vẻ!
 
Upvote 0
Web KT

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

Back
Top Bottom