Tính tồn đầu , tồn cuối , nhập trong kỳ , xuất trong kỳ (4 người xem)

Liên hệ QC

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

Tôi tuân thủ nội quy khi đăng bài

thierry henry

Thành viên mới
Tham gia
11/6/18
Bài viết
49
Được thích
4
Kính thưa các thầy , em đang tập tành viết code . tính Tính tồn đầu , tồn cuối , nhập trong kỳ , xuất trong kỳ theo mã hàng , the kho , theo thời gian .
Riêng tồn đầu = thực nhập - thực xuất - trả hàng với mốc thời gian nhỏ hơn thời gian cho trước ( từ ngày ) trong báo cáo
nhập trong kỳ = thực nhập với thời gian từ ngày <= mốc thời gian tính <= đến ngày
xuất trong kỳ = thực xuất + trả hàng với thời gian từ ngày <= mốc thời gian tính <= đến ngày
tồn cuối = tồn đầu + nhập trong kỳ - xuất trong kỳ
Nhưng em viết bị lỗi , mấy thấy chữa giúp em
 

File đính kèm

Kính thưa các thầy , em đang tập tành viết code . tính Tính tồn đầu , tồn cuối , nhập trong kỳ , xuất trong kỳ theo mã hàng , the kho , theo thời gian .
Riêng tồn đầu = thực nhập - thực xuất - trả hàng với mốc thời gian nhỏ hơn thời gian cho trước ( từ ngày ) trong báo cáo
nhập trong kỳ = thực nhập với thời gian từ ngày <= mốc thời gian tính <= đến ngày
xuất trong kỳ = thực xuất + trả hàng với thời gian từ ngày <= mốc thời gian tính <= đến ngày
tồn cuối = tồn đầu + nhập trong kỳ - xuất trong kỳ
Nhưng em viết bị lỗi , mấy thấy chữa giúp em
Bạn này dùng dấu cách vô tội vạ, ở bài "Hàm Sumifs nhiều điều kiện bị lỗi value hoặc trả về 0" của bạn có cả lỗi thừa dấu cách khi viết hàm.
Nên lưu ý điều này cho các trường hợp về sau.
 
Lần chỉnh sửa cuối:
Upvote 0
lỗi thừa dấu cách khi viết hàm.
Khi viết công thức chỉ trừ địa chỉ tham chiếu không được xen dấu cách giữa địa chỉ chẳng hạn B1 không được viết thành B 1. Còn các chỗ khác như trước/ sau dấu phân cách, trước/ sau dấu &, trước/ sau dấu ( hay dấu ) đề không bị lỗi. Thậm chí xuống dòng cũng không sao. Chẳng qua là không nên thôi.
Đặc biệt dấu & tôi cũng hay thêm dấu cách do quen tay gõ trong VBA.
 
Upvote 0
Kính thưa các thầy , em đang tập tành viết code . tính Tính tồn đầu , tồn cuối , nhập trong kỳ , xuất trong kỳ theo mã hàng , the kho , theo thời gian .
Riêng tồn đầu = thực nhập - thực xuất - trả hàng với mốc thời gian nhỏ hơn thời gian cho trước ( từ ngày ) trong báo cáo
nhập trong kỳ = thực nhập với thời gian từ ngày <= mốc thời gian tính <= đến ngày
xuất trong kỳ = thực xuất + trả hàng với thời gian từ ngày <= mốc thời gian tính <= đến ngày
tồn cuối = tồn đầu + nhập trong kỳ - xuất trong kỳ
Nhưng em viết bị lỗi , mấy thấy chữa giúp em
Tham khảo code sau (vẫn là code của bạn -tôi có sửa lại tý chút Theo ý hiểu của tôi)
Mã:
Option Explicit

Sub tonkhoSua()

Application.ScreenUpdating = False
Dim TuNgay, DenNgay, MaKho, MaHang, Ngay As String
Dim i As Long
Dim tondau, nhaptrongky, xuattrongky, toncuoi As Double
Dim Ws As Worksheet
Dim Lr&, Arr()
    With Sheet2

If IsDate(Sheet2.Range("B1")) = False Or IsDate(Sheet2.Range("B2")) = False Or Sheet2.Range("B3") = "" Or Sheet2.Range("B4") = "" Then
Exit Sub
End If
    
    MaKho = UCase(.Range("B3").Value)
    TuNgay = CLng(CDate(.Range("B1").Value))
    DenNgay = CLng(CDate(.Range("B2").Value))
    MaHang = UCase(.Range("B4").Value)

Set Ws = ThisWorkbook.Sheets("XUAT-NHAP")
Lr = Ws.Range("C" & Rows.Count).End(xlUp).Row
Arr = Ws.Range("A5:O" & Lr).Value
For i = 5 To UBound(Arr)
'tondau = 0
'nhaptrongky = 0
'xuattrongky = 0
'toncuoi = 0
If Arr(i, 7) = MaKho Then
    If Arr(i, 2) < TuNgay Then
        tondau = tondau + Arr(i, 12) - Arr(i, 14) - Arr(i, 15)
        ElseIf Arr(i, 2) >= TuNgay Then
        nhaptrongky = nhaptrongky + Arr(i, 12)
        xuattrongky = xuattrongky + Arr(i, 14) + Arr(i, 15)
    End If
End If
 
Next
toncuoi = tondau + nhaptrongky - xuattrongky
    .Range("K1").Value = tondau
    .Range("K2").Value = nhaptrongky
    .Range("K3").Value = xuattrongky
    .Range("K4").Value = toncuoi
End With
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Tham khảo code sau (vẫn là code của bạn -tôi có sửa lại tý chút Theo ý hiểu của tôi)
Mã:
Option Explicit

Sub tonkhoSua()

Application.ScreenUpdating = False
Dim TuNgay, DenNgay, MaKho, MaHang, Ngay As String
Dim i As Long
Dim tondau, nhaptrongky, xuattrongky, toncuoi As Double
Dim Ws As Worksheet
Dim Lr&, Arr()
    With Sheet2

If IsDate(Sheet2.Range("B1")) = False Or IsDate(Sheet2.Range("B2")) = False Or Sheet2.Range("B3") = "" Or Sheet2.Range("B4") = "" Then
Exit Sub
End If
  
    MaKho = UCase(.Range("B3").Value)
    TuNgay = CLng(CDate(.Range("B1").Value))
    DenNgay = CLng(CDate(.Range("B2").Value))
    MaHang = UCase(.Range("B4").Value)

Set Ws = ThisWorkbook.Sheets("XUAT-NHAP")
Lr = Ws.Range("C" & Rows.Count).End(xlUp).Row
Arr = Ws.Range("A5:O" & Lr).Value
For i = 5 To UBound(Arr)
'tondau = 0
'nhaptrongky = 0
'xuattrongky = 0
'toncuoi = 0
If Arr(i, 7) = MaKho Then
    If Arr(i, 2) < TuNgay Then
        tondau = tondau + Arr(i, 12) - Arr(i, 14) - Arr(i, 15)
        ElseIf Arr(i, 2) >= TuNgay Then
        nhaptrongky = nhaptrongky + Arr(i, 12)
        xuattrongky = xuattrongky + Arr(i, 14) + Arr(i, 15)
    End If
End If
 
Next
toncuoi = tondau + nhaptrongky - xuattrongky
    .Range("K1").Value = tondau
    .Range("K2").Value = nhaptrongky
    .Range("K3").Value = xuattrongky
    .Range("K4").Value = toncuoi
End With
Application.ScreenUpdating = True
End Sub
Trước tiên mình xin cảm ơn mấy thầy và mấy bác . Mình đã xem và đã thử . code của bạn thiếu 1 điều kiện . thay vì If Arr(i, 7) = MaKho And Arr(i, 2) = MaHang Then thì bạn chỉ có If Arr(i, 7) = MaKho Then . nhưng khi thêm Arr(i, 2) = MaHang và ở dưới dòng If Arr(i, 2) < TuNgay Then thêm On Error Resume Next thì lại không ra kết quả . nó phải ra kết quả dù là số âm mới đúng . mọi người chữa giúp mình . xin cảm ơn
 
Upvote 0
Trước tiên mình xin cảm ơn mấy thầy và mấy bác . Mình đã xem và đã thử . code của bạn thiếu 1 điều kiện . thay vì If Arr(i, 7) = MaKho And Arr(i, 2) = MaHang Then thì bạn chỉ có If Arr(i, 7) = MaKho Then . nhưng khi thêm Arr(i, 2) = MaHang và ở dưới dòng If Arr(i, 2) < TuNgay Then thêm On Error Resume Next thì lại không ra kết quả . nó phải ra kết quả dù là số âm mới đúng . mọi người chữa giúp mình . xin cảm ơn
Nếu có thể bạn up đoạn code mà bạn đã sửa lại theo ý bạn cho là đúng lên được không?Hoặc diễn giải đoạn code mà bạn làm và cho là đúng để mọi cùng ngưỡng mộ có được không?
Khi trả bài tôi đã nói là làm theo ý hiểu của tôi mà, và nói bạn tham khảo mà.
Sơ bộ diễn giải code của tôi (sửa lại code của bạn) là
1- Đưa roàn bộ vùng dũ liệu vào mảng
2- Xét Nếu cột G=MaKho thỏa thì xét Cột B<Từ ngày nếu thỏa thì =TonDau+Nhập-Xuất- Hong nếu không thì xét tiếp nếu Cột B>= Từ ngày nếu theo thỏa thì ta thu được Nhập trong kỳ, và xuất trong kỳ nếu không thỏa thì bỏ qua.
3. sau khi hết vòng lặp ta thu được : tonDau, NhapTrongKy, XuatTrongKy và từ đó tính ra TonCuoi và gán các kết quả xuống sheet.
Tất nhiên là tôi không phải là làm công việc như bạn và có phần kém tinh anh nên không thể hiểu đúng ý bạn được.
Bạn chờ người khác hỗ trợ nhé, "....mọi người chữa giúp mình . xin cảm ơn...". tôi dừng tại đây.
 
Upvote 0
Nếu có thể bạn up đoạn code mà bạn đã sửa lại theo ý bạn cho là đúng lên được không?Hoặc diễn giải đoạn code mà bạn làm và cho là đúng để mọi cùng ngưỡng mộ có được không?
Khi trả bài tôi đã nói là làm theo ý hiểu của tôi mà, và nói bạn tham khảo mà.
Sơ bộ diễn giải code của tôi (sửa lại code của bạn) là
1- Đưa roàn bộ vùng dũ liệu vào mảng
2- Xét Nếu cột G=MaKho thỏa thì xét Cột B<Từ ngày nếu thỏa thì =TonDau+Nhập-Xuất- Hong nếu không thì xét tiếp nếu Cột B>= Từ ngày nếu theo thỏa thì ta thu được Nhập trong kỳ, và xuất trong kỳ nếu không thỏa thì bỏ qua.
3. sau khi hết vòng lặp ta thu được : tonDau, NhapTrongKy, XuatTrongKy và từ đó tính ra TonCuoi và gán các kết quả xuống sheet.
Tất nhiên là tôi không phải là làm công việc như bạn và có phần kém tinh anh nên không thể hiểu đúng ý bạn được.
Bạn chờ người khác hỗ trợ nhé, "....mọi người chữa giúp mình . xin cảm ơn...". tôi dừng tại đây.
dạ file đây ạ em cảm ơn
Và dể cho đơn giản hơn thì em dùng hàm sumifs với code sau :
Sub tondau1()
Application.ScreenUpdating = False
With Sheet2
Sheet2.Range("K1").Value = "=SUMIFS(Sheet1!L:L,Sheet1!B:B,""<""&Sheet2!$B$1,Sheet1!C:C,Sheet2!$B$4,Sheet1!G:G,Sheet2!$B$3) -SUMIFS(Sheet1!N:N,Sheet1!B:B,""<""&Sheet2!$B$1,Sheet1!C:C,Sheet2!$B$4,Sheet1!G:G,Sheet2!$B$3)-SUMIFS(Sheet1!O:O,Sheet1!B:B,""<""&Sheet2!$B$1,Sheet1!C:C,Sheet2!$B$4,Sheet1!G:G,Sheet2!$B$3)"
Sheet2.Range("K1").Value = Sheet2.Range("K1").Value
Sheet2.Range("K2").Value = "=SUMIFS(Sheet1!L:L,Sheet1!B:B,"">=""&Sheet2!$B$1,Sheet1!C:C,Sheet2!$B$4,Sheet1!G:G,Sheet2!$B$3,Sheet1!B:B,""<=""&Sheet2!$B$2)"
Sheet2.Range("K2").Value = Sheet2.Range("K2").Value
Sheet2.Range("K3").Value = "=SUMIFS(Sheet1!N:N,Sheet1!B:B,"">=""&Sheet2!$B$1,Sheet1!C:C,Sheet2!$B$4,Sheet1!G:G,Sheet2!$B$3,Sheet1!B:B,""<=""&Sheet2!$B$2)+SUMIFS(Sheet1!O:O,Sheet1!B:B,"">=""&Sheet2!$B$1,Sheet1!C:C,Sheet2!$B$4,Sheet1!G:G,Sheet2!$B$3,Sheet1!B:B,""<=""&Sheet2!$B$2)"
Sheet2.Range("K3").Value = Sheet2.Range("K3").Value
Range("K4").Value = "=K1+K2-K3"
Range("K4").Value = Range("K4").Value
End With
Application.ScreenUpdating = True
end sub
Dù đúng cú pháp nhưng nó vẫn chỉ trả về 0
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
dạ file đây ạ em cảm ơn
Và dể cho đơn giản hơn thì em dùng hàm sumifs với code sau :
Sub tondau1()
Application.ScreenUpdating = False
With Sheet2
Sheet2.Range("K1").Value = "=SUMIFS(Sheet1!L:L,Sheet1!B:B,""<""&Sheet2!$B$1,Sheet1!C:C,Sheet2!$B$4,Sheet1!G:G,Sheet2!$B$3) -SUMIFS(Sheet1!N:N,Sheet1!B:B,""<""&Sheet2!$B$1,Sheet1!C:C,Sheet2!$B$4,Sheet1!G:G,Sheet2!$B$3)-SUMIFS(Sheet1!O:O,Sheet1!B:B,""<""&Sheet2!$B$1,Sheet1!C:C,Sheet2!$B$4,Sheet1!G:G,Sheet2!$B$3)"
Sheet2.Range("K1").Value = Sheet2.Range("K1").Value
Sheet2.Range("K2").Value = "=SUMIFS(Sheet1!L:L,Sheet1!B:B,"">=""&Sheet2!$B$1,Sheet1!C:C,Sheet2!$B$4,Sheet1!G:G,Sheet2!$B$3,Sheet1!B:B,""<=""&Sheet2!$B$2)"
Sheet2.Range("K2").Value = Sheet2.Range("K2").Value
Sheet2.Range("K3").Value = "=SUMIFS(Sheet1!N:N,Sheet1!B:B,"">=""&Sheet2!$B$1,Sheet1!C:C,Sheet2!$B$4,Sheet1!G:G,Sheet2!$B$3,Sheet1!B:B,""<=""&Sheet2!$B$2)+SUMIFS(Sheet1!O:O,Sheet1!B:B,"">=""&Sheet2!$B$1,Sheet1!C:C,Sheet2!$B$4,Sheet1!G:G,Sheet2!$B$3,Sheet1!B:B,""<=""&Sheet2!$B$2)"
Sheet2.Range("K3").Value = Sheet2.Range("K3").Value
Range("K4").Value = "=K1+K2-K3"
Range("K4").Value = Range("K4").Value
End With
Application.ScreenUpdating = True
end sub
Dù đúng cú pháp nhưng nó vẫn chỉ trả về 0
Code vầy mình nghĩ dùng công thức luôn cho nó lành, cho nó đỡ bí hiểm.
 
Upvote 0
@Chủ bài đăng: Theo mình tên trang tính nên là Nhap_Xuat, chứ không nên đảo ngược như bạn;
Nếu cẩn thận hơn, tên trang không chứa "-";
Nếu cần thì xài "_" sẽ tốt hơn cho lâu dài mai sau!

& chúc mọi người sức khỏe & nhiều niềm vui!
 
Upvote 0
Code vầy mình nghĩ dùng công thức luôn cho nó lành, cho nó đỡ bí hiểm.
Người ta có nói "đang tập tành viết code" mờ.
Vấn đề chung của những người tập tành ở GPE này là chọn toàn những cái rắc rối và khó. Chẳng hiểu tại sao họ ngại bắt đầu bằng "Hello world!".
 
Upvote 0
Web KT

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

Back
Top Bottom