Các câu hỏi về lọc ra danh sách duy nhất (loại bỏ dữ liệu trùng)

Liên hệ QC
Em cám ơn anh HieuCD nhiều nhiều nha.
Em làm được rồi !
 
Lần chỉnh sửa cuối:
Anh HieuCD ơi !

Nhờ Anh hỗ trợ dùm em 1 vấn đề này nữa, cụ thể như sau:
- Sheet PS - cột đơn giá dựa vào 2 điều kiện sẽ dò từ:
+ Sheet GIA: dựa vào 2 điều kiện mã hàng + mã nhà cũng cấp
+ Nếu không có sẽ dò Sheet XNT: dựa vào 2 điều kiện mã kiện + mã vật tư

Em cám ơn anh rất nhiều !
 
Lần chỉnh sửa cuối:
Anh HieuCD ơi !

Nhờ Anh hỗ trợ dùm em 1 vấn đề này nữa, cụ thể như sau:
- Sheet PS - cột đơn giá dựa vào 2 điều kiện sẽ dò từ:
+ Sheet GIA: dựa vào 2 điều kiện mã hàng + mã nhà cũng cấp
+ Nếu không có sẽ dò Sheet XNT: dựa vào 2 điều kiện mã kiện + mã vật tư

Em cám ơn anh rất nhiều !
Dữ liệu thay đổi dòng cột thì code phải viết lại
Mã:
Sub GiaPS()
  Dim i As Long, key As String
  Dim Arr As Variant, dArr As Variant
With CreateObject("Scripting.Dictionary")
  With Sheets("GIA")
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i > 1 Then
      dArr = .Range("A2:E" & i).Value
      For i = 1 To UBound(dArr, 1)
        If dArr(i, 1) <> "" And dArr(i, 3) <> "" Then
          key = dArr(i, 1) & "#" & dArr(i, 3)
          .Item(key) = dArr(i, 5)
        End If
      Next i
    End If
  End With
 
  With Sheets("XNT")
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i > 9 Then
      dArr = .Range("A10:H" & i).Value
      For i = 1 To UBound(dArr, 1)
        If dArr(i, 1) <> "" And dArr(i, 2) <> "" Then
          key = dArr(i, 1) & "$" & dArr(i, 2)
          .Item(key) = dArr(i, 8)
        End If
      Next i
    End If
  End With
 
  With Sheets("PS")
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i > 2 Then
      dArr = .Range("A3:G" & i).Value
      ReDim Arr(1 To UBound(dArr, 1), 1 To 1)
      For i = 1 To UBound(dArr, 1)
        If dArr(i, 1) <> "" And dArr(i, 7) <> "" Then
          key = dArr(i, 1) & "#" & dArr(i, 7)
          If .exists(key) Then Arr(i, 1) = .Item(key)
        End If
        If Arr(i, 1) = "" Then
          If dArr(i, 6) <> "" And dArr(i, 7) <> "" Then
            key = dArr(i, 6) & "$" & dArr(i, 7)
            If .exists(key) Then Arr(i, 1) = .Item(key)
          End If
        End If
      Next i
    End If
    If IsArray(Arr) Then .Range("M3").Resize(UBound(Arr)) = Arr
  End With
End With
End Sub

Sub XNT()
  Dim i As Long, k As Long, key As String
  Dim Arr As Variant, dArr As Variant
  With Sheets("PS")
    dArr = .Range("F3", .Range("I" & Rows.Count).End(xlUp)).Value
  End With
  ReDim Arr(1 To UBound(dArr, 1), 1 To 4)
  With CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(dArr, 1)
      key = dArr(i, 1) & "#" & dArr(i, 2)
      If Not .exists(key) Then
        .Add key, ""
        k = k + 1
        Arr(k, 1) = dArr(i, 1): Arr(k, 2) = dArr(i, 2)
        Arr(k, 3) = dArr(i, 3): Arr(k, 4) = dArr(i, 4)
      End If
    Next i
  End With
  With Sheets("XNT")
    .Range("A10:D1010").EntireRow.Hidden = False
    .Range("A10:D1010").ClearContents
    If k Then .Range("A10:D10").Resize(k) = Arr
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i < 9 Then i = 9
    .Range("A" & i + 1, "A1010").EntireRow.Hidden = True
  End With
End Sub

Sub CN()
  Dim i As Long, k As Long, key As String
  Dim Arr, dArr
  With Sheets("PS")
    dArr = .Range("A3", .Range("B" & Rows.Count).End(xlUp)).Value
  End With
  ReDim Arr(1 To UBound(dArr, 1), 1 To 2)
  With CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(dArr, 1)
      key = dArr(i, 1)
      If Not .exists(key) Then
        .Add key, ""
        k = k + 1
        Arr(k, 1) = dArr(i, 1): Arr(k, 2) = dArr(i, 2)
      End If
    Next i
  End With
  With Sheets("CN")
    .Range("A10:B50").EntireRow.Hidden = False
    .Range("A10:B50").ClearContents
    If k Then .Range("A10:B10").Resize(k) = Arr
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i < 9 Then i = 9
    .Range("A" & i + 1, "A50").EntireRow.Hidden = True
  End With
End Sub
 
Dạ !
Em cám ơn anh HieuCD nhiều lắm ah!
Giúp đc em không ít.
 
Anh HieuCD xem lại giúp em với ah!
Báo lỗi chỗ dò đơn giá, nhờ anh xem lại giúp em với.
Em cám ơn nhiều !
 
Anh HieuCD xem lại giúp em với ah!
Báo lỗi chỗ dò đơn giá, nhờ anh xem lại giúp em với.
Em cám ơn nhiều !
2 with lồng nhau nó không chịu chạy
Mã:
Sub GiaPS()
  Dim i As Long, key As String
  Dim Dic As Object, Arr As Variant, dArr As Variant
  Set Dic = CreateObject("Scripting.Dictionary")
  With Sheets("GIA")
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i > 1 Then
      dArr = .Range("A2:E" & i).Value
      For i = 1 To UBound(dArr, 1)
        If dArr(i, 1) <> "" And dArr(i, 3) <> "" Then
          key = dArr(i, 1) & "#" & dArr(i, 3)
          Dic.Item(key) = dArr(i, 5)
        End If
      Next i
    End If
  End With

  With Sheets("XNT")
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i > 9 Then
      dArr = .Range("A10:H" & i).Value
      For i = 1 To UBound(dArr, 1)
        If dArr(i, 1) <> "" And dArr(i, 2) <> "" Then
          key = dArr(i, 1) & "$" & dArr(i, 2)
          Dic.Item(key) = dArr(i, 8)
        End If
      Next i
    End If
  End With

  With Sheets("PS")
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i > 2 Then
      dArr = .Range("A3:G" & i).Value
      ReDim Arr(1 To UBound(dArr, 1), 1 To 1)
      For i = 1 To UBound(dArr, 1)
        If dArr(i, 1) <> "" And dArr(i, 7) <> "" Then
          key = dArr(i, 1) & "#" & dArr(i, 7)
          If Dic.exists(key) Then Arr(i, 1) = Dic.Item(key)
        End If
        If Arr(i, 1) = "" Then
          If dArr(i, 6) <> "" And dArr(i, 7) <> "" Then
            key = dArr(i, 6) & "$" & dArr(i, 7)
            If Dic.exists(key) Then Arr(i, 1) = Dic.Item(key)
          End If
        End If
      Next i
    End If
    If IsArray(Arr) Then .Range("M3").Resize(UBound(Arr)) = Arr
  End With
End Sub
 
Anh HieuCD ơi !

Em nghĩ như thế này anh xem có khả thi hơn không nha, excel thì làm được nhưng sẽ làm file chậm.
- Nếu là PN cột C2 trở đi ở sheet thì làm quét giá ở sheet giá (như cách trên).
- Nếu là PX thì dò tìm bên sheet XNT các trường như trên.
Ngoài ra, cho em hỏi mình có cần sắp xếp lại data không anh nhỉ?

Em cám ơn anh nhiều !
 
Lần chỉnh sửa cuối:
Anh HieuCD ơi !

Em nghĩ như thế này anh xem có khả thi hơn không nha, excel thì làm được nhưng sẽ làm file chậm.
- Nếu là PN cột C2 trở đi ở sheet thì làm quét giá ở sheet giá (như cách trên).
- Nếu là PX thì dò tìm bên sheet XNT các trường như trên.
Ngoài ra, cho em hỏi mình có cần sắp xếp lại data không anh nhỉ?

Em cám ơn anh nhiều !
Cấu trúc và trình tự vận hành file của bạn như thế nào mình không biết rỏ nên phải viết code chung chung
- Sheet PS cột C có gì để nhận biết nhập xuất
- Sheet GIA và NXT các dòng dữ liệu có khi nào 1 loại mà có 2 giá (đặc biệt sheet GIA)
Dữ liệu không cần sắp xếp
 
Cấu trúc và trình tự vận hành file của bạn như thế nào mình không biết rỏ nên phải viết code chung chung
- Sheet PS cột C có gì để nhận biết nhập xuất
- Sheet GIA và NXT các dòng dữ liệu có khi nào 1 loại mà có 2 giá (đặc biệt sheet GIA)
Dữ liệu không cần sắp xếp

Cách của anh viết người ngu như em cũng có thể thay đổi, rất dễ hiểu.
Như thế này nè anh.
PN là mình mua hàng sẽ lấy hoàn đơn giá từ Sheet GIA
PX là mình lấy từ sheet NXT là đơn giá bình quân gia quyền theo tháng.
(VD: Ngày 1 mua 10L giá 20k, ngày 17 mua 5L giá 10k, bình quân là 2k/L)
Ngoài ra, còn có cách tính theo FIFO là nhập trước xuất trước thì đòi hỏi cao hơn,
sẽ khó hơn, đòi hỏi sắp xếp dữ liệu theo thứ tự lấy dữ liệu từ trên xuống - em không chọn cách này.

Vì có người nói là không biết cách sắp xếp dữ liệu, không chỉ là phải sắp xếp như thế nào là cho đúng?
Sheet PS là sheet để nhập liệu, chủ yếu là phiếu nhập và phiếu xuất thôi.
Các sheet khác sẽ lấy dữ liệu từ đây qua, XNT, Công nợ, in Phiếu nhập, in Phiếu xuất... liên quan đến KHO.

Rất mong được sự giúp đỡ của anh rất nhiều !
 
Cách của anh viết người ngu như em cũng có thể thay đổi, rất dễ hiểu.
Như thế này nè anh.
PN là mình mua hàng sẽ lấy hoàn đơn giá từ Sheet GIA
PX là mình lấy từ sheet NXT là đơn giá bình quân gia quyền theo tháng.
(VD: Ngày 1 mua 10L giá 20k, ngày 17 mua 5L giá 10k, bình quân là 2k/L)
Ngoài ra, còn có cách tính theo FIFO là nhập trước xuất trước thì đòi hỏi cao hơn,
sẽ khó hơn, đòi hỏi sắp xếp dữ liệu theo thứ tự lấy dữ liệu từ trên xuống - em không chọn cách này.

Vì có người nói là không biết cách sắp xếp dữ liệu, không chỉ là phải sắp xếp như thế nào là cho đúng?
Sheet PS là sheet để nhập liệu, chủ yếu là phiếu nhập và phiếu xuất thôi.
Các sheet khác sẽ lấy dữ liệu từ đây qua, XNT, Công nợ, in Phiếu nhập, in Phiếu xuất... liên quan đến KHO.

Rất mong được sự giúp đỡ của anh rất nhiều !
File bạn gởi không có gì để biết nhập hay xuất
 
Em gửi Anh File đây ah !

File 1.000 dòng hơi chậm, thực tế khoảng 2.000 dòng ở sheet phát sinh, cứ lặp đi lặp lại thôi ah.
Em tìm cách cải thiện file, hơi chậm mà VBA em gần như chưa biết gì hết.

Thấy anh nhiệt tình giúp em, em cám ơn thật nhiều !
 
Em gửi Anh File đây ah !

File 1.000 dòng hơi chậm, thực tế khoảng 2.000 dòng ở sheet phát sinh, cứ lặp đi lặp lại thôi ah.
Em tìm cách cải thiện file, hơi chậm mà VBA em gần như chưa biết gì hết.

Thấy anh nhiệt tình giúp em, em cám ơn thật nhiều !
Chạy code
Mã:
Sub GiaPS()
  Dim i As Long, key As String
  Dim Dic As Object, Arr As Variant, dArr As Variant
  Set Dic = CreateObject("Scripting.Dictionary")
  With Sheets("GIA")
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i > 1 Then
      dArr = .Range("A2:E" & i).Value
      For i = 1 To UBound(dArr, 1)
        If dArr(i, 1) <> "" And dArr(i, 3) <> "" Then
          key = dArr(i, 1) & "#" & dArr(i, 3)
          Dic.Item(key) = dArr(i, 5)
        End If
      Next i
    End If
  End With

  With Sheets("XNT")
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i > 9 Then
      dArr = .Range("A10:H" & i).Value
      For i = 1 To UBound(dArr, 1)
        If dArr(i, 1) <> "" And dArr(i, 2) <> "" Then
          key = dArr(i, 1) & "$" & dArr(i, 2)
          Dic.Item(key) = dArr(i, 8)
        End If
      Next i
    End If
  End With

  With Sheets("PS")
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i > 2 Then
      dArr = .Range("A3:G" & i).Value
      ReDim Arr(1 To UBound(dArr, 1), 1 To 1)
      For i = 1 To UBound(dArr, 1)
        If dArr(i, 3) <> "PN" Then
          If dArr(i, 1) <> "" And dArr(i, 7) <> "" Then
            key = dArr(i, 1) & "#" & dArr(i, 7)
            If Dic.exists(key) Then Arr(i, 1) = Dic.Item(key)
          End If
        ElseIf dArr(i, 6) <> "" And dArr(i, 7) <> "" Then
            key = dArr(i, 6) & "$" & dArr(i, 7)
            If Dic.exists(key) Then Arr(i, 1) = Dic.Item(key)
        End If
      Next i
    End If
    If IsArray(Arr) Then .Range("M3").Resize(UBound(Arr)) = Arr
  End With
End Sub
File bạn thiết kế không hợp lý như sheet PS bỏ các cột từ R đến AA, tạo 1 cột phụ là đủ tính sheet NXT
Công thức không nên chọn nguyên cột, tạo 1 ô tính dòng cuối cùng và dùng Offset để lấy đúng các dòng có dữ liệu
Không biết bạn tính giá ở sheet NXT kiểu gì, nếu là bình quân gia quyền cuối kỳ thì ổn
Không hiểu tại sao lấy code tính giá xuất theo mã kiện và mã VT, trong khi tính giá ở NXT chỉ dựa vào mã VT
 
Em cám ơn anh HieuCD nhiều lắm luôn, em làm được rồi.
Em cải thiện phần còn lại, chỗ nào không hiểu mong anh chỉ dạy thêm.

Giá Mã kiện như thế này anh, xem lô hàng đó do ai cung cấp, bán lô hàng đó cho người tác cũng chính bằng giá mình nhập vào luôn đó anh.
Giá XNT làm với Thuế thì đơn giản hơn chỉ có mã hàng là đủ rồi, bình quân gia quyền của tháng
 
Em chào Anh HieuCD ah !
Em mới bắt đầu tập tành học code VBA để hỗ trợ công việc tốt hơn.
Em làm phiền anh nhiều quá thì sẽ không hay.
Chỉ dám mong anh hỗ trợ giúp em cải tiến file này bằng VBA, cái này đối với e hiện tại là cần thiết nhất.
Hàm excel cũng đã chèn vào 1 số sheet tương đối hoàn thiện
- Sheet XNT
- Sheet CN
- Sheet PN
- Sheet PX
- Sheet PNX
- Sheet NXT là của kê thuế cũng giống như Sheet XNT
nhưng ở đây chỉ có ít trường hơn
+ Mã hàng - tên hàng - đvt
+ Tồn đầu kỳ
+ Số lượng nhập căn cứ vào loại PN (không có trường nhập khác)
+ Số lượng nhập căn cứ vào loại PX (không có trường xuất khác)
Ngoài ra, còn 3 sheet còn lại, em đang nghĩ dùng công thức để thiết lập trước bằng excel, các trường phù hợp.
Em chỉ biết cám ơn anh đã giúp đỡ em rất nhiều !
 
Em chào Anh HieuCD ah !
Em mới bắt đầu tập tành học code VBA để hỗ trợ công việc tốt hơn.
Em làm phiền anh nhiều quá thì sẽ không hay.
Chỉ dám mong anh hỗ trợ giúp em cải tiến file này bằng VBA, cái này đối với e hiện tại là cần thiết nhất.
Hàm excel cũng đã chèn vào 1 số sheet tương đối hoàn thiện
- Sheet XNT
- Sheet CN
- Sheet PN
- Sheet PX
- Sheet PNX
- Sheet NXT là của kê thuế cũng giống như Sheet XNT
nhưng ở đây chỉ có ít trường hơn
+ Mã hàng - tên hàng - đvt
+ Tồn đầu kỳ
+ Số lượng nhập căn cứ vào loại PN (không có trường nhập khác)
+ Số lượng nhập căn cứ vào loại PX (không có trường xuất khác)
Ngoài ra, còn 3 sheet còn lại, em đang nghĩ dùng công thức để thiết lập trước bằng excel, các trường phù hợp.
Em chỉ biết cám ơn anh đã giúp đỡ em rất nhiều !

Góp ý. Chỉ nói về cách làm -> không nói về Code VBA trong file.

1. Công thức không tham chiếu cả cột khi viết công thức, ví dụ như : =SUMIFS(PS!M:M,PS!C:C,"KETCHUYEN",PS!H:H,A10,PS!I:I,B10)

2. Đã làm File NXT thì phải làm bài bản, bài bản ở đây có nghĩa là:

+ Nhập liệu được: nhập liệu 1 cách khoa học...
---> Chưa nói việc bạn nhập giá trong sheet nhập liệu của bạn. Mai này đổi giá thì sao??? Đè lại giá cũ ah? Nhập liệu kiểu vậy ---> đi ăn mày sớm!:D
+ Theo dõi được chi tiết, tổng hợp.
+ Theo dõi phải từ ngày tới ngày -> Tự động tính lại số dư đầu kỳ, cuối kỳ trong khoản thời gian...

3. Nhiều thứ lắm....
File bạn chưa đáp ứng được mấy cái cơ bản trên -> chưa gọi là hoàn thiện được.
 
Lần chỉnh sửa cuối:
Em chào Anh HieuCD ah !
Em mới bắt đầu tập tành học code VBA để hỗ trợ công việc tốt hơn.
Em làm phiền anh nhiều quá thì sẽ không hay.
Chỉ dám mong anh hỗ trợ giúp em cải tiến file này bằng VBA, cái này đối với e hiện tại là cần thiết nhất.
Hàm excel cũng đã chèn vào 1 số sheet tương đối hoàn thiện
- Sheet XNT
- Sheet CN
- Sheet PN
- Sheet PX
- Sheet PNX
- Sheet NXT là của kê thuế cũng giống như Sheet XNT
nhưng ở đây chỉ có ít trường hơn
+ Mã hàng - tên hàng - đvt
+ Tồn đầu kỳ
+ Số lượng nhập căn cứ vào loại PN (không có trường nhập khác)
+ Số lượng nhập căn cứ vào loại PX (không có trường xuất khác)
Ngoài ra, còn 3 sheet còn lại, em đang nghĩ dùng công thức để thiết lập trước bằng excel, các trường phù hợp.
Em chỉ biết cám ơn anh đã giúp đỡ em rất nhiều !
File nầy vướng cách tính giá nên không thể làm gì tiếp
Vấn đề quan trọng là bạn phải mô tả qui trình nhập liệu và cách tính các chỉ tiêu của từng sheet theo trình tự trước sau, từ đó mới thiết kế lại các sheet dữ liệu lưu trữ (chưa tính tới các công thức tạo báo cáo) sau đó mới tính tiếp được
 
Em cám ơn 2 anh đã quan tâm hỗ trợ!
Nó là như thế này:

- Sheet PS là sheet nhập liệu chung hết
+ Đơn giá sẽ lấy từ Sheet NCC điền vào loại phiếu PN (mã nhà cung cấp + mã hàng)
+ Đơn giá xuất lấy từ Sheet NXT điền vào phiếu PX (căn cứ vào mã kiện + mã hàng)
Đơn giá xuất chỉ kho có đơn giá nhập mới có đơn giá để xuất.
. Click sự kiện 1 lấy đơn giá nhập điền vào phiếu PN Sheet PS
. Click sự kiện 2 Sheet NXT sẽ có đơn giá bình quân
. Click sự kiện 3 để lấy đơn giá vào phiếu PX ở Sheet PS
Nếu được thì có thể gộp lại chung vào 1 sự kiện thì quá tốt.
Ngoài ra, nếu chưa có giá thì mình để trống hoặc bằng 0, sẽ kiểm tra lại chỗ đó
Hôm trước anh HieuCD làm dùm em lọc mã trùng ở Sheet XNT và ẩn dòng trống,
có những nhiều dòng hay ít, mà cứ để công thức nhiều sẽ gây ảnh hưởng đến File.

- Sheet XNT được tính như sau:
+ Tồn đầu kỳ
Dựa vào Mã CC mặc định là KETCHUYEN, kết hợp với Mã Kiện và Mã Hàng từ tháng trước mang sang nhập ở Sheet PS luôn.
+ Nhập kho
Căn cứ vào Sheet PS để tính dựa các trường PN kết hợp Mã Kiện + Mã Hàng
+ Nhập khác
Căn cứ vào Sheet PS để tính dựa các trường NK kết hợp Mã Kiện + Mã Hàng
+ Xuất kho
Căn cứ vào Sheet PS để tính dựa các trường PX kết hợp Mã Kiện + Mã Hàng
+ Nhập khác
Căn cứ vào Sheet PS để tính dựa các trường XK kết hợp Mã Kiện + Mã Hàng
+ Tồn cuối kỳ
= Tồn đầu + nhập kho + nhập khác - xuất kho - xuất khác
+ Đơn giá bình quân (nếu linh động được thì tuyệt thời - giống cách viết của anh HieuCD)
Đối với kho gỗ hoặc MDF
= (TT tồn đầu kỳ + TT nhập kho + TT nhập khác)/(M3 tồn đầu kỳ + M3 nhập kho + M3 nhập khác)
Ngoài ra đối với các kho khác
= (TT tồn đầu kỳ + TT nhập kho + TT nhập khác)/(THANH tồn đầu kỳ + THANH nhập kho + THANH nhập khác)

Anh có cách nào hay hơn thì chỉ giúp em, em cám ơn các anh rất nhiều !
 
Lần chỉnh sửa cuối:
Góp ý. Chỉ nói về cách làm -> không nói về Code VBA trong file.

1. Công thức không tham chiếu cả cột khi viết công thức, ví dụ như : =SUMIFS(PS!M:M,PS!C:C,"KETCHUYEN",PS!H:H,A10,PS!I:I,B10)

2. Đã làm File NXT thì phải làm bài bản, bài bản ở đây có nghĩa là:

+ Nhập liệu được: nhập liệu 1 cách khoa học...
---> Chưa nói việc bạn nhập giá trong sheet nhập liệu của bạn. Mai này đổi giá thì sao??? Đè lại giá cũ ah? Nhập liệu kiểu vậy ---> đi ăn mày sớm!:D
+ Theo dõi được chi tiết, tổng hợp.
+ Theo dõi phải từ ngày tới ngày -> Tự động tính lại số dư đầu kỳ, cuối kỳ trong khoản thời gian...

3. Nhiều thứ lắm....
File bạn chưa đáp ứng được mấy cái cơ bản trên -> chưa gọi là hoàn thiện được.

Anh nói không sai, nếu được như anh nói là tuyệt vời không khác gì phần mềm ấy.
File của mình của chỉ làm từng tháng thôi, giá nhập vào gần như không thay đổi.
Nêu giá thay đổi thì mình sắp xếp như thế nào cho đúng, nhờ bạn hướng dẫn giúp mình.
Cám ơn anh rất nhiều !
 
Lần chỉnh sửa cuối:
Em cám ơn 2 anh đã quan tâm hỗ trợ!
Nó là như thế này:

- Sheet PS là sheet nhập liệu chung hết
+ Đơn giá sẽ lấy từ Sheet NCC điền vào loại phiếu PN (mã nhà cung cấp + mã hàng)
+ Đơn giá xuất lấy từ Sheet NXT điền vào phiếu PX (căn cứ vào mã kiện + mã hàng)
Đơn giá xuất chỉ kho có đơn giá nhập mới có đơn giá để xuất.
. Click sự kiện 1 lấy đơn giá nhập điền vào phiếu PN Sheet PS
. Click sự kiện 2 Sheet NXT sẽ có đơn giá bình quân
. Click sự kiện 3 để lấy đơn giá vào phiếu PX ở Sheet PS
Nếu được thì có thể gộp lại chung vào 1 sự kiện thì quá tốt.
Ngoài ra, nếu chưa có giá thì mình để trống hoặc bằng 0, sẽ kiểm tra lại chỗ đó
Hôm trước anh HieuCD làm dùm em lọc mã trùng ở Sheet XNT và ẩn dòng trống,
có những nhiều dòng hay ít, mà cứ để công thức nhiều sẽ gây ảnh hưởng đến File.

- Sheet XNT được tính như sau:
+ Tồn đầu kỳ
Dựa vào Mã CC mặc định là KETCHUYEN, kết hợp với Mã Kiện và Mã Hàng từ tháng trước mang sang nhập ở Sheet PS luôn.
+ Nhập kho
Căn cứ vào Sheet PS để tính dựa các trường PN kết hợp Mã Kiện + Mã Hàng
+ Nhập khác
Căn cứ vào Sheet PS để tính dựa các trường NK kết hợp Mã Kiện + Mã Hàng
+ Xuất kho
Căn cứ vào Sheet PS để tính dựa các trường PX kết hợp Mã Kiện + Mã Hàng
+ Nhập khác
Căn cứ vào Sheet PS để tính dựa các trường XK kết hợp Mã Kiện + Mã Hàng
+ Tồn cuối kỳ
= Tồn đầu + nhập kho + nhập khác - xuất kho - xuất khác
+ Đơn giá bình quân (nếu linh động được thì tuyệt thời - giống cách viết của anh HieuCD)
Đối với kho gỗ hoặc MDF
= (TT tồn đầu kỳ + TT nhập kho + TT nhập khác)/(M3 tồn đầu kỳ + M3 nhập kho + M3 nhập khác)
Ngoài ra đối với các kho khác
= (TT tồn đầu kỳ + TT nhập kho + TT nhập khác)/(THANH tồn đầu kỳ + THANH nhập kho + THANH nhập khác)

Anh có cách nào hay hơn thì chỉ giúp em, em cám ơn các anh rất nhiều !
1/ Sheet PS bạn nhập tay hay lấy từ phần mềm? và gồm có dữ liệu cột nào? cột nào để trống
2/ Sheet phát sinh nhập trong thời gian 1 tháng, 1 năm hay nhiều năm?
3/ Làm sao biết: Đối với kho gỗ hoặc MDF?
4/ Đơn giá XNT bạn tính dựa vào cột M3 nhưng không có số liệu thì làm sao tính?
5/ Tại sao một số lại không có giá
Trong file dữ liệu không cần nhiều dòng, nhưng phải có đầy đủ các cột và các trường hợp có khả năng xảy ra mới giải quyết được, nhiều cột không có dữ liệu là thua không làm gì được
 
Là như vậy nè anh HieuCD !
1. Sheet PS em dùm add-in Input From List để nhập liệu nâng cao
- Mã CC và Nhà cung cấp lấy từ Sheet NCC
- Mã vật tư, tên vật tư, đvt, hệ số quy đổi lấy từ sheet VT
- Số lượng M3 = Số lượng * hệ số quy đổi
- Thành tiền tính bằng công thức
+ Nếu không M3 thì số lượng * đơn giá
+ Nếu có M3 thì M3 * đơn giá
Những trường khác nhập bằng tay anh
2. Sheet PS nhập từng tháng (File kho dự kiến sẽ có 10 sheet) hỗ trợ cho việc Nội Bộ + Thuế
3. Nếu kho gỗ hay MDF sẽ có hệ số quy đổi là M3 - được tính ở sẵn Sheet VT
4. Vì những vật tư khác sẽ có đơn vị tính là M3 hoặc mình cũng có thể để mặc định là hệ số quy đổi là 1
5. Không có giá từ Xưởng 1 mang qua Xưởng 2, để mình theo dõi (nội bộ) không có giá sẽ là phiếu NK hay XK.
=>
- Khi có hóa đơn về mình sẽ nhập hóa đơn và ngày hóa đơn vào ở Sheet PS
- Hóa đơn sẽ được lấy qua sheet cuối để kê hóa đơn đầu vào Sheet KT gồm những trường:
+ Ngày hóa đơn
+ Số hóa đơn
+ Nhà cung cấp
+ Thành tiền

- Sheet NXT chính là xuất nhập tồn của thuế, loại bỏ bằng tay những cái nhập không có hóa đơn
+ Mã hàng và tên hàng
+ Tồn đầu kỳ (phải tự dùng hàm để quét)
+ Nhập kho, chỉ lấy phiếu PN, còn phiếu NK sẽ bị loại
+ Xuất kho, chỉ lấy phiếu PX, còn phiếu XK sẽ bị loại
+ Tồn cuối = tồn đầu + nhập kho - xuất kho

Em cập nhật ở đây nè anh !

Rất mong được sự đóng góp của anh !
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom