. File gốc mình mở vẫn còn yêu cầu mà sao vậy nhỉ, đổi tên file xem có lỗi nữa không, nhờ anh/chị xem giúp.Mình có doaw file của bạn về nhưng chẳng thấy yêu cầu giúp đỡ trong file của bạn là gì cả. Bạn xem lại
Private Sub CommandButton1_Click()
Dim Dic As Object, d1, Tmp, Arr(), Arr1()
Dim i, j, n, Id
Set Dic = CreateObject("Scripting.Dictionary")
Application.ScreenUpdating = 0
Rows("5:3000").ClearContents
ReDim Arr(1 To 3000, 1 To 18)
ReDim Arr1(1 To 3000, 1 To 18)
'TH nhap
Tmp = Sheet1.Range(Sheet1.[A4], Sheet1.[A65536].End(3)).Resize(, 11)
For i = 1 To UBound(Tmp, 1)
If Not Dic.Exists(Tmp(i, 4) & ";" & Tmp(i, 7) & ";" & Tmp(i, 8) & ";" & Tmp(i, 9)) Then
j = j + 1
Dic.Add Tmp(i, 4) & ";" & Tmp(i, 7) & ";" & Tmp(i, 8) & ";" & Tmp(i, 9), j
For n = 1 To 11
Arr(j, n) = Tmp(i, n)
Next
d1 = DateDiff("d", Tmp(i, 2), DateTime.Date)
Select Case d1
Case Is < 8: Arr(j, 12) = d1
Case Is < 15: Arr(j, 13) = d1
Case Is < 31: Arr(j, 14) = d1
Case Is < 61: Arr(j, 15) = d1
Case Is < 91: Arr(j, 16) = d1
Case Is < 181: Arr(j, 17) = d1
End Select
Else
Id = Dic.Item(Tmp(i, 4) & ";" & Tmp(i, 7) & ";" & Tmp(i, 8) & ";" & Tmp(i, 9))
Arr(Id, 11) = Arr(Id, 11) + Tmp(i, 11)
End If
Next
'TH xuat
Tmp = Sheet8.Range(Sheet8.[A5], Sheet8.[A65536].End(3)).Resize(, 11)
For i = 1 To UBound(Tmp, 1)
Tmp(i, 11) = Tmp(i, 11) * -1
If Not Dic.Exists(Tmp(i, 4) & ";" & Tmp(i, 7) & ";" & Tmp(i, 8) & ";" & Tmp(i, 9)) Then
j = j + 1
Dic.Add Tmp(i, 4) & ";" & Tmp(i, 7) & ";" & Tmp(i, 8) & ";" & Tmp(i, 9), j
For n = 1 To 11
Arr(j, n) = Tmp(i, n)
Next
Else
Id = Dic.Item(Tmp(i, 4) & ";" & Tmp(i, 7) & ";" & Tmp(i, 8) & ";" & Tmp(i, 9))
Arr(Id, 11) = Arr(Id, 11) + Tmp(i, 11)
End If
Next
Id = 0
For i = 1 To j
If Arr(i, 11) <> 0 Then
Id = Id + 1
Arr1(Id, 1) = Id
For n = 2 To 18
Arr1(Id, n) = Arr(i, n)
Next
End If
Next
Sheet3.[A5].Resize(UBound(Arr, 1), UBound(Arr, 2)) = Arr1
Application.ScreenUpdating = 1
Set Dic = Nothing
End Sub
Cảm ơn bạn sealand, file này nếu đầy đủ 4 điều kiện thì tồn kho = nhập kho - xuất kho, tuy nhiên nếu như mình xóa đi 1 hoặc 2 hoặc 3 hoặc 4 trong 4 điều kiện bên sheet xuất kho hoặc nhập kho thì bên tồn kho nó bị double lên, bạn xem lại giúp mình với. Cảm ơn bạn.Bạn chép làm sao ấy, xem file nha
(Mình tách theo cả cột I (Màu) nếu không cần thì xoá bớt đi. Đáng lý bạn phải nêu rõ lỗi gì chứ lỗi code thì Debug nhưng không biết lỗi gì)
Private Sub CommandButton1_Click()
Dim Dic As Object, d1, Tmp, Arr(), Arr1()
Dim i, j, n, Id
Set Dic = CreateObject("Scripting.Dictionary")
Application.ScreenUpdating = 0
Rows("5:3000").ClearContents
ReDim Arr(1 To 3000, 1 To 18)
ReDim Arr1(1 To 3000, 1 To 18)
'TH nhap
Tmp = Sheet1.Range(Sheet1.[A4], Sheet1.[A65536].End(3)).Resize(, 11)
For i = 1 To UBound(Tmp, 1)
If Not Dic.Exists([B][COLOR=#ff0000]Tmp(i, 4) & ";" & Tmp(i, 7) & ";" & Tmp(i, 8) & ";" & Tmp(i, 9)[/COLOR][/B]) Then
j = j + 1
Dic.Add [B][COLOR=#ff0000]Tmp(i, 4) & ";" & Tmp(i, 7) & ";" & Tmp(i, 8) & ";" & Tmp(i, 9)[/COLOR][/B], j
For n = 1 To 11
Arr(j, n) = Tmp(i, n)
Next
d1 = DateDiff("d", Tmp(i, 2), DateTime.Date)
Select Case d1
Case Is < 8: Arr(j, 12) = d1
Case Is < 15: Arr(j, 13) = d1
Case Is < 31: Arr(j, 14) = d1
Case Is < 61: Arr(j, 15) = d1
Case Is < 91: Arr(j, 16) = d1
Case Is < 181: Arr(j, 17) = d1
End Select
Else Id = Dic.Item([B][COLOR=#ff0000]Tmp(i, 4) & ";" & Tmp(i, 7) & ";" & Tmp(i, 8) & ";" & Tmp(i, 9)[/COLOR][/B])
Arr(Id, 11) = Arr(Id, 11) + Tmp(i, 11)
End If
Next
'TH xuat
Tmp = Sheet8.Range(Sheet8.[A5], Sheet8.[A65536].End(3)).Resize(, 11)
For i = 1 To UBound(Tmp, 1) Tmp(i, 11) = Tmp(i, 11) * -1
If Not Dic.Exists([B][COLOR=#ff0000]Tmp(i, 4) & ";" & Tmp(i, 7) & ";" & Tmp(i, 8) & ";" & Tmp(i, 9)[/COLOR][/B]) Then
j = j + 1
Dic.Add [B][COLOR=#ff0000]Tmp(i, 4) & ";" & Tmp(i, 7) & ";" & Tmp(i, 8) & ";" & Tmp(i, 9)[/COLOR][/B], j
For n = 1 To 11
Arr(j, n) = Tmp(i, n)
Next
Else Id = Dic.Item([B][COLOR=#ff0000]Tmp(i, 4) & ";" & Tmp(i, 7) & ";" & Tmp(i, 8) & ";" & Tmp(i, 9)[/COLOR][/B])
Arr(Id, 11) = Arr(Id, 11) + Tmp(i, 11)
End If
Next
Id = 0
For i = 1 To j
If Arr(i, 11) <> 0 Then
Id = Id + 1
Arr1(Id, 1) = Id
For n = 2 To 18
Arr1(Id, n) = Arr(i, n)
Next
End If
Next
Sheet3.[A5].Resize(UBound(Arr, 1), UBound(Arr, 2)) = Arr1
Application.ScreenUpdating = 1
Set Dic = Nothing
End Sub
Private Sub CommandButton1_Click()
Dim Dic As Object, d1, Tmp, Arr(), Arr1()
Dim i, j, n, Id
Set Dic = CreateObject("Scripting.Dictionary")
Application.ScreenUpdating = 0
Rows("5:3000").ClearContents
ReDim Arr(1 To 3000, 1 To 18)
ReDim Arr1(1 To 3000, 1 To 18)
'TH nhap
Tmp = Sheet1.Range(Sheet1.[A4], Sheet1.[A65536].End(3)).Resize(, 11)
For i = 1 To UBound(Tmp, 1)
If Not Dic.Exists(Tmp(i, 4) & ";" & Tmp(i, 7) & ";" & Tmp(i, 8)) Then
j = j + 1
Dic.Add Tmp(i, 4) & ";" & Tmp(i, 7) & ";" & Tmp(i, 8), j
For n = 1 To 11
Arr(j, n) = Tmp(i, n)
Next
d1 = DateDiff("d", Tmp(i, 2), DateTime.Date)
Select Case d1
Case Is < 8: Arr(j, 12) = d1
Case Is < 15: Arr(j, 13) = d1
Case Is < 31: Arr(j, 14) = d1
Case Is < 61: Arr(j, 15) = d1
Case Is < 91: Arr(j, 16) = d1
Case Is < 181: Arr(j, 17) = d1
End Select
Else
Id = Dic.Item(Tmp(i, 4) & ";" & Tmp(i, 7) & ";" & Tmp(i, 8))
Arr(Id, 11) = Arr(Id, 11) + Tmp(i, 11)
End If
Next
'TH xuat
Tmp = Sheet8.Range(Sheet8.[A5], Sheet8.[A65536].End(3)).Resize(, 11)
For i = 1 To UBound(Tmp, 1)
Tmp(i, 11) = Tmp(i, 11) * -1
If Not Dic.Exists(Tmp(i, 4) & ";" & Tmp(i, 7) & ";" & Tmp(i, 8)) Then
j = j + 1
Dic.Add Tmp(i, 4) & ";" & Tmp(i, 7) & ";" & Tmp(i, 8), j
For n = 1 To 11
Arr(j, n) = Tmp(i, n)
Next
Else
Id = Dic.Item(Tmp(i, 4) & ";" & Tmp(i, 7) & ";" & Tmp(i, 8))
Arr(Id, 11) = Arr(Id, 11) + Tmp(i, 11)
End If
Next
Id = 0
For i = 1 To j
If Arr(i, 11) <> 0 Then
Id = Id + 1
Arr1(Id, 1) = Id
For n = 2 To 18
Arr1(Id, n) = Arr(i, n)
Next
End If
Next
Sheet3.[A5].Resize(UBound(Arr, 1), UBound(Arr, 2)) = Arr1
Application.ScreenUpdating = 1
Set Dic = Nothing
End Sub
Private Sub CommandButton1_Click()
Dim Dic As Object, d1, Tmp, Arr(), Arr1()
Dim i, j, n, Id
Set Dic = CreateObject("Scripting.Dictionary")
Application.ScreenUpdating = 0
Rows("5:3000").ClearContents
ReDim Arr(1 To 3000, 1 To 18)
ReDim Arr1(1 To 3000, 1 To 18)
'TH nhap
If Sheet1.[A65536].End(3).Row = 3 Then Exit Sub
Tmp = Sheet1.Range(Sheet1.[A4], Sheet1.[A65536].End(3)).Resize(, 11)
For i = 1 To UBound(Tmp, 1)
If Not Dic.Exists(Tmp(i, 4) & ";" & Tmp(i, 7) & ";" & Tmp(i, 8)) Then
j = j + 1
Dic.Add Tmp(i, 4) & ";" & Tmp(i, 7) & ";" & Tmp(i, 8), j
For n = 1 To 11
Arr(j, n) = Tmp(i, n)
Next
d1 = DateDiff("d", Tmp(i, 2), DateTime.Date)
Select Case d1
Case Is < 8: Arr(j, 12) = d1
Case Is < 15: Arr(j, 13) = d1
Case Is < 31: Arr(j, 14) = d1
Case Is < 61: Arr(j, 15) = d1
Case Is < 91: Arr(j, 16) = d1
Case Is < 181: Arr(j, 17) = d1
End Select
Else
Id = Dic.Item(Tmp(i, 4) & ";" & Tmp(i, 7) & ";" & Tmp(i, 8))
Arr(Id, 11) = Arr(Id, 11) + Tmp(i, 11)
End If
Next
'TH xuat
If Sheet8.[A65536].End(3).Address <> "$A$4" Then
Tmp = Sheet8.Range(Sheet8.[A5], Sheet8.[A65536].End(3)).Resize(, 11)
For i = 1 To UBound(Tmp, 1)
Tmp(i, 11) = Tmp(i, 11) * -1
If Not Dic.Exists(Tmp(i, 4) & ";" & Tmp(i, 7) & ";" & Tmp(i, 8)) Then
j = j + 1
Dic.Add Tmp(i, 4) & ";" & Tmp(i, 7) & ";" & Tmp(i, 8), j
For n = 1 To 11
Arr(j, n) = Tmp(i, n)
Next
Else
Id = Dic.Item(Tmp(i, 4) & ";" & Tmp(i, 7) & ";" & Tmp(i, 8))
Arr(Id, 11) = Arr(Id, 11) + Tmp(i, 11)
End If
Next
End If
Id = 0
If j > 0 Then
For i = 1 To j
If Arr(i, 11) <> 0 Then
Id = Id + 1
Arr1(Id, 1) = Id
For n = 2 To 18
Arr1(Id, n) = Arr(i, n)
Next
End If
Next
Sheet3.[A5].Resize(UBound(Arr, 1), UBound(Arr, 2)) = Arr1
End If
Application.ScreenUpdating = 1
Set Dic = Nothing
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Row < 31 Then
If Not IsEmpty(Target.Value) And Len(Trim(Target.Value)) <> 10 Then
MsgBox "O nay phai du 10 ky tu"
Target.Value = ""
Target.Select
End If
End If
End Sub