Các Bạn giúp mình giải pháp Lọc danh sách mặt hàng, lô hàng, kho hàng cho Báo cáo NXT (1 người xem)

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

ndhmoney686

Thành viên thường trực
Tham gia
25/4/12
Bài viết
376
Được thích
104
Mình có gửi file đính kèm và ghi rất chi tiết ở bên trong. Mong các Bạn xem và giúp đỡ mình. Cảm ơn các Bạn nhiều. Chúc cả nhà GPE cuối tuần vui vẻ!


Nếu các Bạn ko tải đuợc file đính kèm thì tải theo đường link sau nhé.
http://www.mediafire.com/download.php?ewi7xj3goyix5n4
 

File đính kèm

Lần chỉnh sửa cuối:
mình tải ko được, ko biết cac bạn khác có tải được ko, bạn check lại xem
 
Các Bạn xem giúp mình với. Hi vọng sẽ có giải pháp phù hợp cho trường hợp này của mình.
 
Các Bạn xem giúp mình với. Hi vọng sẽ có giải pháp phù hợp cho trường hợp này của mình.
Thật ra muốn cải thiện tốc độ file này thì phải dùng VBA, Dạng bài lọc lấy dữ liệu này không khó <------- Quan trọng là mình không hiểu cách tính xuất nhập,... nói chung là về kinh tế kế toán mù tịt,--> nên không biết kết quả ntn để mà viết code
 
Thật ra muốn cải thiện tốc độ file này thì phải dùng VBA, Dạng bài lọc lấy dữ liệu này không khó <------- Quan trọng là mình không hiểu cách tính xuất nhập,... nói chung là về kinh tế kế toán mù tịt,--> nên không biết kết quả ntn để mà viết code


Bạn ơi mình giải thích như thế này nhé!

Mình có 1 file gồm 4 sheet

- Sheet Số dư đầu kỳ
Desktop 3-23-2013 8-41-06 PM-397.jpg

- Sheet Dữ liệu nhập
Desktop 3-23-2013 8-42-20 PM-460.jpg

- Sheet Dữ liệu xuất
Desktop 3-23-2013 8-41-56 PM-55.jpg

- Sheet Nhập xuất tồn
Desktop 3-23-2013 8-43-15 PM-855.jpg


Sheet Báo cáo nhập xuất tồn (Danh sách Mặt hàng, Lô hàng, Kho hàng) ở cột tô mầu xanh là phần mình cần lọc chính trong bài này. Danh sách đó là kết quả lọc từ các Sheet Số dư đầu kỳ, sheet Dữ liệu nhập, Dữ liệu xuất. Để kết quả Danh sách Mặt hàng, Lô hàng, Kho hàng chỉ xuất hiện một lần duy nhất ko trùng nhau trong Báo cáo nhập xuất tồn.

Mong các Bạn nghĩ cách giúp đỡ. Cảm ơn các Bạn!
 

File đính kèm

Lần chỉnh sửa cuối:
Giả sử ngày hôm nay 23/03/2013 phát sinh nghiệp vụ nhập hàng như sau.


Các bạn xem hình ảnh nhâp
Desktop 3-23-2013 9-34-28 PM-512.jpg


Ngay lập tức sheet Báo cáo Nhập xuất tồn được cập nhập ngay. Các bạn xem vùng mình khoanh mầu
Desktop 3-23-2013 9-26-56 PM-404.jpg
 
Mình tải thử thấy bình thường Bạn ah. Vậy Bạn tải về qua đường link này giúp mình nhé.
http://www.mediafire.com/download.php?ewi7xj3goyix5n4
Sao các bài khác, mình tải không được, chỉ tải được bài 2
Bài của bạn có khỏang 5 ngàn dòng mà muốn dùng công thức cho NXT kiểu này chắc đứng máy
Tôi VD Cthức cell E6
PHP:
=SUMPRODUCT(('Ton dau ky'!$A$5:$A$54=B6)*('Ton dau ky'!$B$5:$B$54=C6)*('Ton dau ky'!$C$5:$C$54=D6),'Ton dau ky'!$D$5:$D$54)
Các cell khác bạn làm tương tự
Với 5.000 dòng x 3 cột = 15.000 cthức như trên thì !!!
Chưa kể bạn yêu cầu cthức lọc duy nhất cho sheet NXT (Cái này chắc fải dùng cthức mảng)
---------------
Phương án
1/ Nếu bạn muốn sử dụng cthức như trên thì tại sheet NXT sẽ thêm 1 cột Gộp chung Mặt hàng & Lô hàng & Kho hàng như mấy sheet kia thì dùng Sumproduct chỉ cần 1 điều kiện là đủ (hoặc hàm sumif)
2/ Cái này chỉ nhờ viết code là nhẹ file nhất mà thôi
 
Sao các bài khác, mình tải không được, chỉ tải được bài 2
Bài của bạn có khỏang 5 ngàn dòng mà muốn dùng công thức cho NXT kiểu này chắc đứng máy
Tôi VD Cthức cell E6
PHP:
=SUMPRODUCT(('Ton dau ky'!$A$5:$A$54=B6)*('Ton dau ky'!$B$5:$B$54=C6)*('Ton dau ky'!$C$5:$C$54=D6),'Ton dau ky'!$D$5:$D$54)
Các cell khác bạn làm tương tự
Với 5.000 dòng x 3 cột = 15.000 cthức như trên thì !!!
Chưa kể bạn yêu cầu cthức lọc duy nhất cho sheet NXT (Cái này chắc fải dùng cthức mảng)
---------------
Phương án
1/ Nếu bạn muốn sử dụng cthức như trên thì tại sheet NXT sẽ thêm 1 cột Gộp chung Mặt hàng & Lô hàng & Kho hàng như mấy sheet kia thì dùng Sumproduct chỉ cần 1 điều kiện là đủ (hoặc hàm sumif)
2/ Cái này chỉ nhờ viết code là nhẹ file nhất mà thôi


Cảm ơn Bạn đã tham gia giúp đỡ mình. Như hiện tại mình sử dụng một Sheet lọc dữ liệu, để tổng hợp tất cả các Mặt hàng, Lô hàng, Kho hàng ở tất cả 3 sheet CSDL (Tồn đầu kỳ, Dữ liệu nhập, Dữ liệu xuất) vào một vùng. Rồi sau đó mới lọc ra một danh mục duy nhất (ko trùng nhau). Rồi xử lại xử lý sắp xếp từ A đến Z. Rồi tại Sheet NXT mình dùng Vlookup để lấy sang các cột tương ứng.
 
Bạn ơi mình giải thích như thế này nhé!
Sheet Báo cáo nhập xuất tồn (Danh sách Mặt hàng, Lô hàng, Kho hàng) ở cột tô mầu xanh là phần mình cần lọc chính trong bài này. Danh sách đó là kết quả lọc từ các Sheet Số dư đầu kỳ, sheet Dữ liệu nhập, Dữ liệu xuất. Để kết quả Danh sách Mặt hàng, Lô hàng, Kho hàng chỉ xuất hiện một lần duy nhất ko trùng nhau trong Báo cáo nhập xuất tồn.

Mong các Bạn nghĩ cách giúp đỡ. Cảm ơn các Bạn!

Đọc xong cũng hơi lơ mơ --> cũng đưa tạm 1 đoạn code VBA để bạn tham khảo, ( trong code đã cố gắng liệt kê rõ ràng,<--- hi vọng bạn sẽ tìm hiểu qua về VBA để tuỳ biến chỉnh sửa theo ý của bạn )
[GPECODE=vb]
Sub GPE()
Dim Tmparr, Item, Tmp, Arr, sArr
Dim n As Long, i As Long, j As Long, iR As Long
ReDim sArr(1 To 65536, 1 To 6)
ReDim Tmparr(1 To 10000, 1 To 6)
'---------------------------------------------------------------------------------
With Worksheets("Ton dau ky")
Tmparr = .Range("A5", .[D65536].End(3).Offset(-1)).Value
For i = 1 To UBound(Tmparr, 1)
n = n + 1
For j = 1 To 4
sArr(n, j) = Tmparr(i, j)
Next
Next
End With
With Worksheets("Du lieu nhap")
Tmparr = .Range("B5", .[E65536].End(3).Offset(-1)).Value
For i = 1 To UBound(Tmparr, 1)
n = n + 1
For j = 1 To 3
sArr(n, j) = Tmparr(i, j)
Next
sArr(n, 5) = Tmparr(i, 4)
Next
End With
With Worksheets("Du lieu xuat")
Tmparr = .Range("B5", .[E65536].End(3).Offset(-1)).Value
For i = 1 To UBound(Tmparr, 1)
n = n + 1
For j = 1 To 3
sArr(n, j) = Tmparr(i, j)
Next
sArr(n, 6) = Tmparr(i, 4)
Next
End With
'-----------------------------------------------------------------------------
ReDim Arr(1 To n, 1 To 7)
With CreateObject("Scripting.Dictionary")
For i = 1 To n
Item = CStr(sArr(i, 1) & sArr(i, 2) & sArr(i, 3))
If Len(Item) Then
Tmp = Replace(UCase(Item), " ", "")
If Not .exists(Tmp) Then
iR = iR + 1
.Add Tmp, iR
Arr(iR, 1) = iR
For j = 2 To 7
Arr(iR, j) = sArr(i, j - 1)
Next
Else
For j = 5 To 7
Arr(.Item(Tmp), j) = CDbl(sArr(i, j - 1)) + CDbl(Arr(.Item(Tmp), j))
Next
End If
End If
Next
End With
If iR Then
[A5].Resize(10000, 7).Clear
[A5].Resize(iR, 7) = Arr
End If
End Sub
[/GPECODE]
 
Đã được câu trả lời ưng ý chưa hả chủ topic?
 
Đã được câu trả lời ưng ý chưa hả chủ topic?


Anh Hướng ạ. Em được bạn hungpecc1 giúp đúng như mong muốn rồi Anh ạ. Cảm ơn Anh!




Đọc xong cũng hơi lơ mơ --> cũng đưa tạm 1 đoạn code VBA để bạn tham khảo, ( trong code đã cố gắng liệt kê rõ ràng,<--- hi vọng bạn sẽ tìm hiểu qua về VBA để tuỳ biến chỉnh sửa theo ý của bạn )
[GPECODE=vb]
Sub GPE()
Dim Tmparr, Item, Tmp, Arr, sArr
Dim n As Long, i As Long, j As Long, iR As Long
ReDim sArr(1 To 65536, 1 To 6)
ReDim Tmparr(1 To 10000, 1 To 6)
'---------------------------------------------------------------------------------
With Worksheets("Ton dau ky")
Tmparr = .Range("A5", .[D65536].End(3).Offset(-1)).Value
For i = 1 To UBound(Tmparr, 1)
n = n + 1
For j = 1 To 4
sArr(n, j) = Tmparr(i, j)
Next
Next
End With
With Worksheets("Du lieu nhap")
Tmparr = .Range("B5", .[E65536].End(3).Offset(-1)).Value
For i = 1 To UBound(Tmparr, 1)
n = n + 1
For j = 1 To 3
sArr(n, j) = Tmparr(i, j)
Next
sArr(n, 5) = Tmparr(i, 4)
Next
End With
With Worksheets("Du lieu xuat")
Tmparr = .Range("B5", .[E65536].End(3).Offset(-1)).Value
For i = 1 To UBound(Tmparr, 1)
n = n + 1
For j = 1 To 3
sArr(n, j) = Tmparr(i, j)
Next
sArr(n, 6) = Tmparr(i, 4)
Next
End With
'-----------------------------------------------------------------------------
ReDim Arr(1 To n, 1 To 7)
With CreateObject("Scripting.Dictionary")
For i = 1 To n
Item = CStr(sArr(i, 1) & sArr(i, 2) & sArr(i, 3))
If Len(Item) Then
Tmp = Replace(UCase(Item), " ", "")
If Not .exists(Tmp) Then
iR = iR + 1
.Add Tmp, iR
Arr(iR, 1) = iR
For j = 2 To 7
Arr(iR, j) = sArr(i, j - 1)
Next
Else
For j = 5 To 7
Arr(.Item(Tmp), j) = CDbl(sArr(i, j - 1)) + CDbl(Arr(.Item(Tmp), j))
Next
End If
End If
Next
End With
If iR Then
[A5].Resize(10000, 7).Clear
[A5].Resize(iR, 7) = Arr
End If
End Sub
[/GPECODE]


Cảm ơn Bạn hungpecc1 rất nhiều! Đúng với ý của mình bạn ah. Bạn giúp Mình sửa code lại một chút là chỉ để code lọc phần Mặt hàng, Lô hàng, Kho hàng thôi Bạn nhé. Mỗi lần cập nhập dữ liệu thì bấm CommandButton. Nếu để nó tự động cập nhập dữ liệu tự động thì có ảnh hưởng nhiều đến tốc độ nhiều ko bạn? Mình cũng rất sợ file chạy ì ạch. Một lần nữa cảm ơn Bạn rất nhiều!
 
Lần chỉnh sửa cuối:
Anh Hướng ạ. Em được bạn hungpecc1 giúp đúng như mong muốn rồi Anh ạ. Cảm ơn Anh!

Cảm ơn Bạn hungpecc1 rất nhiều! Đúng với ý của mình bạn ah. Bạn giúp Mình sửa code lại một chút là chỉ để code lọc phần Mặt hàng, Lô hàng, Kho hàng thôi Bạn nhé. Mỗi lần cập nhập dữ liệu thì bấm CommandButton. Nếu để nó tự động cập nhập dữ liệu tự động thì có ảnh hưởng nhiều đến tốc độ nhiều ko bạn? Mình cũng rất sợ file chạy ì ạch. Một lần nữa cảm ơn Bạn rất nhiều!

Vấn đề 1: Bạn muốn lọc lấy bao nhiêu dữ liệu cũng được --> chỉ cần redim lại mảng là được
vấn đề 2 : bạn thấy tốc độ chay code rất nhanh ( khoảng 1-2 s) --> nếu để nó cập nhật tự động thì mỗi lần update thì cũng chỉ phải chờ 1-2s thô <--------- Đang đề cập đến file bạn upload nhé, file dữ liệu khác thì ????
[GPECODE=vb]
Option Explicit
Sub GPE()
Dim Tmparr, Item, Tmp, Arr, sArr
Dim n As Long, i As Long, j As Long, iR As Long
ReDim sArr(1 To 65536, 1 To 3)
ReDim Tmparr(1 To 10000, 1 To 3)
'---------------------------------------------------------------------------------
With Worksheets("Ton dau ky")
Tmparr = .Range("A5", .[C65536].End(3).Offset(-1)).Value
For i = 1 To UBound(Tmparr, 1)
n = n + 1
For j = 1 To 3
sArr(n, j) = Tmparr(i, j)
Next
Next
End With
With Worksheets("Du lieu nhap")
Tmparr = .Range("B5", .[D65536].End(3).Offset(-1)).Value
For i = 1 To UBound(Tmparr, 1)
n = n + 1
For j = 1 To 3
sArr(n, j) = Tmparr(i, j)
Next
Next
End With
With Worksheets("Du lieu xuat")
Tmparr = .Range("B5", .[D65536].End(3).Offset(-1)).Value
For i = 1 To UBound(Tmparr, 1)
n = n + 1
For j = 1 To 3
sArr(n, j) = Tmparr(i, j)
Next
Next
End With
'-----------------------------------------------------------------------------
ReDim Arr(1 To n, 1 To 4)
With CreateObject("Scripting.Dictionary")
For i = 1 To n
Item = CStr(sArr(i, 1) & sArr(i, 2) & sArr(i, 3))
If Len(Item) Then
Tmp = Replace(UCase(Item), " ", "")
If Not .exists(Tmp) Then
iR = iR + 1
.Add Tmp, iR
Arr(iR, 1) = iR
For j = 2 To 4
Arr(iR, j) = sArr(i, j - 1)
Next
End If
End If
Next
End With
If iR Then
[A5].Resize(10000, 4).Clear
[A5].Resize(iR, 4) = Arr
End If
End Sub
[/GPECODE]
Code này nhìn dài nhưng mà dễ hiểu <-------- bạn tự ngâm cứu rồi chỉnh lại cho ngắn và đẹp nhé ^^-0-/.
 
Anh Hướng ạ. Em được bạn hungpecc1 giúp đúng như mong muốn rồi Anh ạ. Cảm ơn Anh!
Nếu là mình sẽ vấn nhờ pác Hướng tư vấn trợ giúp ^^ vì khi đó bạn có nhiều giải pháp hay để lựa chọn...
Riêng mình thì lại được học hỏi thêm về code hay hàm excel __--__|||||
 
Cảm ơn Bạn! Phần mặt hàng, lô hàng, kho hàng. Ok rồi Bạn ah. Chỉ còn mỗi một cái nó chưa tự động cập nhập khi mình thêm dữ liệu ở 3 sheet kia. Mà muốn thấy thay đổi thì phải bấm vào Commanbutton Bạn ah. Giúp mình nhé
 
Cảm ơn Bạn! Phần mặt hàng, lô hàng, kho hàng. Ok rồi Bạn ah. Chỉ còn mỗi một cái nó chưa tự động cập nhập khi mình thêm dữ liệu ở 3 sheet kia. Mà muốn thấy thay đổi thì phải bấm vào Commanbutton Bạn ah. Giúp mình nhé

Xem ra bạn muốn tự động hóa File này , muốn tự động hóa file này theo mình :

--- Bạn phải làm CSDL cho các mặt hàng, lô hàng,kho hàng --> tính chuyên nghiệp sẽ cao hơn
__--__ theo cách viết bài của bạn, mình đoán chắc bạn là nữ giới cũng ngoài 30 rồi --> sao không để cách thanh niên trẻ trong phòng nghiên cứu lập bảng excel nhj,-0-/. ,<---------- nói vậy thôi ,để tự động hóa file này bạn bạn nghiên cứu thêm về VBA nhé,
--> với file dữ liệu bạn đưa lên, để tự động update bạn tham khảo file đính kèm nhé !

[GPECODE=vb]
'Tại sheet Báo cáo XNK thêm đoạn code này
Private Sub Worksheet_Activate()
Call Module2.GPE
End Sub
' Chèn code dưới đây vào 1 module
[/GPECODE]
[GPECODE=vb]
Sub GPE()
Dim n As Long, ws As Worksheet
SpeedOn
Worksheets("Bao cao NXT").[A5:H10000].Clear
For Each ws In Worksheets
If ws.Name <> "Bao cao NXT" Then
If ws.Name = "Ton dau ky" Then
ws.Range("A5", ws.[C65536].End(3)).Copy
Worksheets("Bao cao NXT").[B65536].End(3).Offset(1).PasteSpecial 2
Else
ws.Range("B5", ws.[D65536].End(3)).Copy
Worksheets("Bao cao NXT").[B65536].End(3).Offset(1).PasteSpecial 2
End If
End If
Next
Worksheets("Bao cao NXT").[A5:H50000].RemoveDuplicates Array(2, 3, 4)
SpeedOff
End Sub
[/GPECODE]
 
Xin lỗi các bạn vì mình loay hoay cả hơn 1 tiếng mà không biết cách vào chỗ nào để đặt câu hỏi trợ giúp trả lời.

Các bạn giúp mình.
 
Xem ra bạn muốn tự động hóa File này , muốn tự động hóa file này theo mình :

--- Bạn phải làm CSDL cho các mặt hàng, lô hàng,kho hàng --> tính chuyên nghiệp sẽ cao hơn
__--__ theo cách viết bài của bạn, mình đoán chắc bạn là nữ giới cũng ngoài 30 rồi --> sao không để cách thanh niên trẻ trong phòng nghiên cứu lập bảng excel nhj,-0-/. ,<---------- nói vậy thôi ,để tự động hóa file này bạn bạn nghiên cứu thêm về VBA nhé,
--> với file dữ liệu bạn đưa lên, để tự động update bạn tham khảo file đính kèm nhé !

[GPECODE=vb]
'Tại sheet Báo cáo XNK thêm đoạn code này
Private Sub Worksheet_Activate()
Call Module2.GPE
End Sub
' Chèn code dưới đây vào 1 module
[/GPECODE]
[GPECODE=vb]
Sub GPE()
Dim n As Long, ws As Worksheet
SpeedOn
Worksheets("Bao cao NXT").[A5:H10000].Clear
For Each ws In Worksheets
If ws.Name <> "Bao cao NXT" Then
If ws.Name = "Ton dau ky" Then
ws.Range("A5", ws.[C65536].End(3)).Copy
Worksheets("Bao cao NXT").[B65536].End(3).Offset(1).PasteSpecial 2
Else
ws.Range("B5", ws.[D65536].End(3)).Copy
Worksheets("Bao cao NXT").[B65536].End(3).Offset(1).PasteSpecial 2
End If
End If
Next
Worksheets("Bao cao NXT").[A5:H50000].RemoveDuplicates Array(2, 3, 4)
SpeedOff
End Sub
[/GPECODE]


Bạn ơi code của Bạn chạy đúng như ý của mình. Nhưng do mình chưa biết về code. Bạn có thể giúp mình ở trong code có các đoạn mình có thể khai báo các tham chiếu của các Sheet như Sheet "Báo cáo NXT", "Tồn đầu kỳ", "Dữ liệu nhập", "Dữ liệu xuất". Để (những người chưa biết code như mình dễ mò mẫm thay tham chiếu của các vùng vào). Mong Bạn giúp mình thêm. Cảm ơn Bạn!
 
Lần chỉnh sửa cuối:
Bạn ơi code của Bạn chạy đúng như ý của mình. Nhưng do mình chưa biết về code. Mình thấy code lần trước của Bạn có các đoạn "Tồn đầu kỳ", "Dữ liệu nhập", "Dữ liệu xuất". Để thay đổi tham chiếu của các cột các dòng (những người chưa biết code như mình dễ mò mẫm. hihi"). Code lần này mình thấy chỉ có mỗi "Tồn đầu kỳ" còn "Dữ liệu nhập", "Dữ liệu xuất" thì ko thấy có để mình thay. (hình như dùng macro gì đó cho các sheet kia phải ko bạn? mình đoán mò"
hungpecc1 nhiều nhiều!

Để lọc 3 cột bạn yêu cầu mình làm như thế này ::
--> Record Macro và bạn thao tác như sau :
---Copy hết dữ liệu 3 cột bạn cần lọc sang sheet "NTX"
--- Tại sh NTX bạn chọn toàn bộ vùng cần lọc --> DATA--> REMOVE DUPLICATES --> ok
- đến đây bạn có thể hiểu đoạn code rồi còn gì :
[GPECODE=vb]
Sub GPE()
Dim n As Long, ws As Worksheet
SpeedOn
Worksheets("Bao cao NXT").[A5:H10000].Clear
For Each ws In Worksheets '( Duyệt qua từng sheet trong file )

'( Nếu là sheet "ton dau ky " --> lấy dữ liệu tại [A:C]--> copy vào sheet đầu tiên)

If ws.Name <> "Bao cao NXT" Then
If ws.Name = "Ton dau ky" Then
ws.Range("A5", ws.[C65536].End(3)).Copy
Worksheets("Bao cao NXT").[B65536].End(3).Offset(1).PasteSpecial 2

'( Còn lại lấy dữ liệu tại [B:D]--> copy vào sheet đầu tiên)
Else
ws.Range("B5", ws.[D65536].End(3)).Copy
Worksheets("Bao cao NXT").[B65536].End(3).Offset(1).PasteSpecial 2
End If
End If
Next

'( Sheet đầu tiên dùng phương phức removeduplicates )

Worksheets("Bao cao NXT").[A5:H50000].RemoveDuplicates Array(2, 3, 4)
SpeedOff
End Sub
[/GPECODE]
 
Sub GPE()
Dim n As Long, ws As Worksheet
SpeedOn
Worksheets("Bao cao NXT").[A5:H10000].Clear
For Each ws In Worksheets '( Duyệt qua từng sheet trong file )

'( Nếu là sheet "ton dau ky " --> lấy dữ liệu tại [A:C]--> copy vào sheet đầu tiên)

If ws.Name <> "Bao cao NXT" Then
If ws.Name = "Ton dau ky" Then
ws.Range("A5", ws.[C65536].End(3)).Copy
Worksheets("Bao cao NXT").[B65536].End(3).Offset(1).PasteSpecial 2

Bạn có thể giúp mình có các mục như mình đã tô mầu đỏ trong bài. Để sau này mình có thể vận dụng code này vào các file khác. Khi các file khác có các sheet tên ko giống như file này. Để lúc đấy mình biết được là phải thay đổi những mục nào (để điền các vùng tham chiếu cho 3 vùng tô mầu đỏ đó)
Như ở code trong bài mình chỉ thấy nó tìm tham chiếu vùng Tồn đầu kỳ
Còn các vùng tham chiếu đến dữ liệu nhập, dữ liệu xuất mình ko biết nó nằm ở chỗ nào. Để thay đổi khi vận dụng sang các trường hợp khác.
Mong Bạn giúp mình. Cảm ơn Bạn!

If ws.Name <> "Bao cao NXT" Then
If ws.Name = "Dữ liệu nhập" Then
ws.Range("A5", ws.[C65536].End(3)).Copy
Worksheets("Bao cao NXT").[B65536].End(3).Offset(1).PasteSpecial 2

If ws.Name <> "Bao cao NXT" Then
If ws.Name = "Dữ liệu xuất" Then
ws.Range("A5", ws.[C65536].End(3)).Copy
Worksheets("Bao cao NXT").[B65536].End(3).Offset(1).PasteSpecial 2


'( Còn lại lấy dữ liệu tại [B:D]--> copy vào sheet đầu tiên)
Else
ws.Range("B5", ws.[D65536].End(3)).Copy
Worksheets("Bao cao NXT").[B65536].End(3).Offset(1).PasteSpecial 2
End If
End If
Next

'( Sheet đầu tiên dùng phương phức removeduplicates )

Worksheets("Bao cao NXT").[A5:H50000].RemoveDuplicates Array(2, 3, 4)
SpeedOff
End Sub
 
Lần chỉnh sửa cuối:
Sub GPE()
Dim n As Long, ws As Worksheet
SpeedOn
Worksheets("Bao cao NXT").[A5:H10000].Clear
For Each ws In Worksheets '( Duyệt qua từng sheet trong file )

'( Nếu là sheet "ton dau ky " --> lấy dữ liệu tại [A:C]--> copy vào sheet đầu tiên)

If ws.Name <> "Bao cao NXT" Then
If ws.Name = "Ton dau ky" Then
ws.Range("A5", ws.[C65536].End(3)).Copy
Worksheets("Bao cao NXT").[B65536].End(3).Offset(1).PasteSpecial 2

Bạn có thể giúp mình có các mục như mình đã tô mầu đỏ trong bài. Để sau này mình có thể vận dụng code này vào các file khác. Khi các file khác có các sheet tên ko giống như file này. Để lúc đấy mình biết được là phải thay đổi những mục nào (để điền các vùng tham chiếu cho 3 vùng tô mầu đỏ đó)
Như ở code trong bài mình chỉ thấy nó tìm tham chiếu vùng Tồn đầu kỳ
Còn các vùng tham chiếu đến dữ liệu nhập, dữ liệu xuất mình ko biết nó nằm ở chỗ nào. Để thay đổi khi vận dụng sang các trường hợp khác.
Mong Bạn giúp mình. Cảm ơn Bạn!

If ws.Name <> "Bao cao NXT" Then
If ws.Name = "Dữ liệu nhập" Then
ws.Range("A5", ws.[C65536].End(3)).Copy
Worksheets("Bao cao NXT").[B65536].End(3).Offset(1).PasteSpecial 2

If ws.Name <> "Bao cao NXT" Then
If ws.Name = "Dữ liệu xuất" Then
ws.Range("A5", ws.[C65536].End(3)).Copy
Worksheets("Bao cao NXT").[B65536].End(3).Offset(1).PasteSpecial 2


'( Còn lại lấy dữ liệu tại [B:D]--> copy vào sheet đầu tiên)
Else
ws.Range("B5", ws.[D65536].End(3)).Copy
Worksheets("Bao cao NXT").[B65536].End(3).Offset(1).PasteSpecial 2
End If
End If
Next

'( Sheet đầu tiên dùng phương phức removeduplicates )

Worksheets("Bao cao NXT").[A5:H50000].RemoveDuplicates Array(2, 3, 4)
SpeedOff
End Sub

Thôi đành dùng code cũ vậy :!$@!!
-- Nếu code của bài #15 bạn cũng không hiểu --> có lẽ phải CAFE 1 buổi mới tường minh được __--__
 
Ok rồi Bạn ah. Cảm ơn Bạn Hungpecc1 đã rất nhiệt tình giúp đỡ mình. Một lần nữa mình cảm ơn Bạn!
 
Nội dung mình up lại ở bài #29
 
Lần chỉnh sửa cuối:
- Mình có phát sinh thêm mấy tình huống này Bạn xem nghiên cứu xử lý giúp mình nhé:
+ Nếu mình thử xóa dữ liệu vừa lọc được tại vùng sheet Báo cáo NXT thì ko thấy nó update lại dữ liệu mới. Mà phải bấm sang một sheet bất kỳ rồi quay lại mới thấy dữ liệu được update mới. (có thể làm ko cần bấm sang sheet bên cạnh mà dữ liệu nó tự động update lại được ko Bạn?)
+ Mình có dòng Tổng Cộng ở dòng số 35 (như trong file đính kèm, Như hiện tại thì dữ liệu update lại 1 cái là dòng Cộng ko còn nữa. Bạn giúp mình trong code có vùng đặt tham chiếu cho dữ liệu sau khi lọc sẽ nằm ở trong khoảng A6:D35 (để sau này mình có thể chỉnh vùng tham chiếu đó cho phù hợp với thực tế)và dữ liệu lấy theo kiểu giá trị (để nó ko làm mất đi định dạng của các ô hiện tại)

+ Bạn có thể giúp mình code lọc cho 2 trường hợp:
Ví dụ: Khi mình chọn ở ô A3.
* Nếu chọn tiêu chí "Theo Mặt hàng, lô hàng" thì code chỉ lọc cho cột Mặt hàng và lô hàng
* Nếu chọn tiêu chí "Theo Mặt hàng, Lô hàng, Kho hàng. Thì code lọc như hiện tại (Mặt hàng, Lô hàng, kho hàng).
+ Bạn có thể giúp mình (sheet Báo cáo NXT có thể sửa đổi tên các kiểu (code ko cần đổi tên theo) mà code vẫn lọc được bình thường. (Liệu có thể dò tìm sheet đặt kết quả lọc. bằng tên sheet gốc, hoặc đặt ở sheet kết quả ô A1 với ký tự là "KQ" và code sẽ dò tìm sheet nào ở ô A1 có ký tự "KQ" thì nó sẽ thực hiện update dữ liệu lọc vào)

Mình đừa ra nhiều ý quá. Mong Bạn Hungpecc1các Bạn giúp mình. Lại làm phiền các Bạn rồi. Mong nhận được sự giúp đỡ của các Bạn. Cảm ơn các Bạn!

Hơ đêm qua thức khuya sáng đi làm muộn @!## mệt thật!
Vấn đề của bạn đưa ra không quá khó để giải quyết : nhưng để làm được việc trên thì cần phải làm rõ 1 vài vấn đề :
---- Cơ Sở dữ liệu phải được chuẩn hóa ---> tức là vị trí thứ tự các cột trong CSDL phải chính xác
------ Bạn bạn thử gửi 1 file hoàn chỉnh lên , để mình xem bạn trình bày ntn
-------Liệt kê tất cả các trường hợp mà bạn muốn lọc <------- Ít thôi vì nếu khó quá mình cũng pó tay **~**
 
Hơ đêm qua thức khuya sáng đi làm muộn @!## mệt thật!
Vấn đề của bạn đưa ra không quá khó để giải quyết : nhưng để làm được việc trên thì cần phải làm rõ 1 vài vấn đề :
---- Cơ Sở dữ liệu phải được chuẩn hóa ---> tức là vị trí thứ tự các cột trong CSDL phải chính xác
------ Bạn bạn thử gửi 1 file hoàn chỉnh lên , để mình xem bạn trình bày ntn
-------Liệt kê tất cả các trường hợp mà bạn muốn lọc <------- Ít thôi vì nếu khó quá mình cũng pó tay **~**


Bạn ơi mình có úp lại file mới và nội dung ở Bài #23. Bạn xem giúp đỡ mình nhé. Cảm ơn Bạn!
 
Lần chỉnh sửa cuối:
Nội dung mình up lại ở bài #29
 
Lần chỉnh sửa cuối:
Vậy mai có gì giúp đỡ mình với nhé. Cảm ơn Bạn rất nhiều!
 
Bài #21 với code của Bạn Hungpecc1 gần như là ok rồi. Bây giờ phát sinh thêm mấy ý của mình ở dưới mình up lại file. Các Bạn xem giúp mình lại những ý sau với nhé:
- Dữ liệu lọc tự động update trong các sheet báo cáo (ví dụ khi mình xóa dữ liệu vừa lọc được ở sheet báo cáo. Thì ngay sau đó nó sẽ lại tự hiện lên). Ko biết để tự động update như vậy thì file chạy có ì ạch ko bạn nhỉ? Nếu mà ảnh hưởng đến tốc độ chạy của fiel nhiều thì dùng nốt bấm "Xem" cũng được.
- Các Bạn giúp mình ở trong code có vùng giới hạn đặt kết quả sau khi lọc được (kiểu như trong báo cáo này là vùng từ E8:G50) để sau này mình có thể điều chỉnh vùng đấy cho phù hợp dữ liệu nhiều hay ít. Để mình còn đặt dòng Cộng ở dưới (ko có nó hiển thị một phát là tiêu luôn dòng Cộng.
- Giúp mình kết quả sau khi lọc được nó hiển thị vào sheet báo cáo dưới dạng kiểu giá trị (để nó ko làm mất đi định dạng của các ô hiện tại)
- Mình có 3 báo cáo:
Sheet Báo cáo NXT 1 thì cần hiển thị Mặt hàng.
Sheet Báo cáo NXT 2 thì cần hiển thị Mặt hàng, Lô hàng
Sheet Báo cáo NXT 3 thì cần hiển thị Mặt hàng, Lô hàng, Kho hàng.

Các Bạn xem giúp mình nhé. Cảm ơn Các Bạn nhiều!

Nếu ko tải được file ở dưới các Bạn tải qua đây giúp mình nhé
http://www.mediafire.com/?h2fzgeb9ckf2flb
 

File đính kèm

Lần chỉnh sửa cuối:
Các Bạn và Bạn Hungpecc1 mình up lại file. Các Bạn xem giúp mình lại những ý sau với nhé
- Dữ liệu lọc tự động update trong các sheet báo cáo (ví dụ khi mình xóa dữ liệu vừa lọc được ở sheet báo cáo. Thì ngay sau đó nó sẽ lại tự hiện lên). Ko biết để tự động update như vậy thì file chạy có ì ạch ko bạn nhỉ? Nếu mà ảnh hưởng đến tốc độ chạy của fiel nhiều thì dùng nốt bấm "Xem" cũng được.
- Các Bạn giúp mình ở trong code có vùng giới hạn đặt kết quả sau khi lọc được (kiểu như trong báo cáo này là vùng từ E8:G50) để sau này mình có thể điều chỉnh vùng đấy cho phù hợp dữ liệu nhiều hay ít. Để mình còn đặt dòng Cộng ở dưới (ko có nó hiển thị một phát là tiêu luôn dòng Cộng.
- Giúp mình kết quả sau khi lọc được nó hiển thị vào sheet báo cáo dưới dạng kiểu giá trị (để nó ko làm mất đi định dạng của các ô hiện tại)
- Mình có 2 báo cáo: Sheet Báo cáo NXT1 thì cần hiển thị Mặt hàng, Lô hàng. Còn sheet Báo cáo NXT2 thì cần hiển thị Mặt hàng, Lô hàng, Kho hàng.

Các Bạn xem giúp mình nhé. Cảm ơn Các Bạn nhiều!
Bạn gởi 1` file chẳng có số liệu thì làm sao kiểm tra kết quả?
 
Anh Ba tê và Các Bạn tải qua đây giúp mình nhé http://www.mediafire.com/?h2fzgeb9ckf2flb

Mình làm theo file NTX cuối cùng bạn up lên :

--- code này chỉ đúng với vùng dữ liệu, và tên sheets như trong file của bạn --> nếu bạn thay đổi nội dung sheets thì bạn phải điều chỉnh code cho phù hợp

----- Vấn đề update tự động không phải là không làm được, nhưng mình nghĩ nên dùng nút bấm thì hay hơn :

Xem file đính kèm bên dưới !
 
Bạn ơi. Khi mình chọn Mặt hàng, Lô hàng. Thì nó vẫn hiện cả kho hàng nữa Bạn ah.
Có thể giúp mình khi bấm vào bảng chọn mục nào thì mục nó sẽ link xuống ô E3 được ko bạn (để từ ô E3 sau này mình dùng công thức lọc dữ liệu).
Bạn xem giúp mình nhé.
 
Lần chỉnh sửa cuối:
Bạn ơi. Khi mình chọn Mặt hàng, Lô hàng. Thì nó vẫn hiện cả kho hàng nữa Bạn ah.
Có thể giúp mình khi bấm vào bảng chọn mục nào thì mục nó sẽ link xuống ô E3 được ko bạn (để từ ô E3 sau này mình dùng công thức lọc dữ liệu).
Bạn xem giúp mình nhé.

Tức là ý bạn lọc theo điều kiện lô hàng, kho hàng mặt hàng --> nhưng chỉ in ra lô hàng , mặt hàng
Hay thế nào ?
 
Bạn ơi tức là thế này bạn nhé.
- Nếu chọn Mặt hàng, lô hàng. Thì ở dưới dữ liệu lọc vào các cột Mặt hàng, lô hàng
- Nếu chọn Mặt hàng, lô hàng, kho hàng. Thì ở dưới dữ liệu lọc vào các cột Mặt hàng, lô hàng, kho hàng
Cảm ơn Bạn nhiều!
 
Bạn ơi tức là thế này bạn nhé.
- Nếu chọn Mặt hàng, lô hàng. Thì ở dưới dữ liệu lọc vào các cột Mặt hàng, lô hàng
- Nếu chọn Mặt hàng, lô hàng, kho hàng. Thì ở dưới dữ liệu lọc vào các cột Mặt hàng, lô hàng, kho hàng
Cảm ơn Bạn nhiều!

Thử file này xem :__--__ mà đây đã là đáp án cuối cùng của bạn chưa? -->

Nhưng mà xem file bạn làm mình thấy nó cứ thế nào ý,--> nếu đã viết code thì viết code hẳn , đằng này code 50 % còn lại là công thức 50%
 
Lần chỉnh sửa cuối:
Bạn ơi khi chọn mục thứ nhất thì ok rồi. Chọn mục thứ 2 thì cột kho hàng ko hiện lên bạn nhỉ?
 

File đính kèm

Lần chỉnh sửa cuối:
Sao bạn khoái ẩn dòng, ẩn cột quá vậy?
Làm cho bạn 1 sheet, không thích cột nào thì ẩn cột như bạn thích vậy.
Không chịu thì giải thích thêm và làm thêm.

Code của a Bate mình nghĩ là dễ hiểu và tường mình rồi , anh ý còn viết luôn cả phần tính số lượng , Công việc còn lại của bạn là tự " vọc " và tùy chỉnh theo ý của mình <-------- thanks
 
Anh ơi tại em đang dùng code lọc danh sách các danh mục. code đó phải đặt cột theo số thì form hiện lên mới đúng danh mục. cho nên sheet có cột đó sheet thì ko cần cột đó thì em ẩn đi Anh ạ.
 
Cảm ơn Anh Ba tê và Bạn Hungpecc1 rất nhiều.
 
Anh ơi tại em đang dùng code lọc danh sách các danh mục. code đó phải đặt cột theo số thì form hiện lên mới đúng danh mục. cho nên sheet có cột đó sheet thì ko cần cột đó thì em ẩn đi Anh ạ.
Copy code dưới thay vào code trong file tôi gửi cho bạn lần trược thử xem ntn :
[GPECODE=vb]
Sub GPE()
Dim rng As Range
Dim ws As Worksheet, opt1 As OptionButton, op2 As OptionButton
SpeedOn
[E8:G1000].Clear
Set opt1 = ActiveSheet.OptionButtons("Opt1")
Set opt2 = ActiveSheet.OptionButtons("Opt2")
Worksheets("Bao cao NXT").[E8:L1000].Clear
For Each ws In Worksheets
If ws.Name <> "Bao cao NXT" Then
ws.Range("I7:K19").Copy [E1000].End(3).Offset(1)
End If
Next
If opt1.Value = 1 Then
[E8:G1000].RemoveDuplicates Array(1, 2)
[G8:G1000].ClearContents
Else
[E8:G1000].RemoveDuplicates
End If
[E65536].End(3).Offset(1) = UniConvert("Toorng", "Telex")
KeVien Range([E1000].End(3), "L8")
SpeedOff
End Sub
[/GPECODE]
 
Ok rồi Bạn ah. Cảm ơn Bạn và Anh Ba tê đã giúp đỡ mình rất nhiều!
 
Anh ơi tại em đang dùng code lọc danh sách các danh mục. code đó phải đặt cột theo số thì form hiện lên mới đúng danh mục. cho nên sheet có cột đó sheet thì ko cần cột đó thì em ẩn đi Anh ạ.
Trưa thất nghiệp, GPE "đóng cửa sửa chữa", tôi đã thay file khác trong bài #38 bên trên, có 3 sheet báo cáo luôn cho bạn, thử xem sao.
 
Lần chỉnh sửa cuối:
Định nhờ các Anh chị tiếp nhưng thôi ạ. Chúc cả nhà ngủ ngon!
 
Lần chỉnh sửa cuối:
Anh Ba tê và các Bạn giúp Em sửa code để xem được theo khoảng thời gian. Khi cho ở dòng số 2 trong các Báo cáo từ ngày nào đến ngày nào code sẽ lọc theo khoảng thời gian đó. Nếu ko lọc được như vậy thì giúp Em sửa code bỏ phần tính số lượng nhập, số lượng xuất, số lượng tồn. Phần đó Em lập hàm tính cũng được. Mong Anh và các Bạn giúp đỡ!
Chuyện này cũng không khó lắm, nhưng hình như bạn không quan tâm đến dữ kiệu của bạn trước khi đưa lên hỏi.
- Lọc từ ngày đến ngày điều kiện này được xác định trong ô nào?
- Trong các sheet Nhap, Xuat không có 1 dòng nào thể hiện ngày nhập xuất, bạn không thể tự nhập như 1 ví dụ cho bảng tính của mình được sao? Kể cả các cột số lượng trước đây tôi cũng tự nhập vào để kiểm tra, còn của bạn cứ để trống.
- Nếu lọc từ ngày đến ngày thì số liệu tồn đầu kỳ thì sao?
Nói chung, bạn không có dữ liệu giống thật, không nói rõ những yêu cầu cần làm. Khi nào mọi chuyện rõ ràng mới giải quyết được.
 
Anh Ba tê và các Bạn giúp Em sửa code ko cho hiện dòng cộng, ko tính Số lượng tồn đầu, nhập, xuất, tồn cuối. Phần đó Em tự tính bằng hàm. Cảm ơn Anh và các Bạn!



PS: Phần tính số lượng nhập xuất tồn thực tế của em theo ngày và hơi loằng ngoằng. Em có được list danh sách lọc như vậy là Hạnh phúc rồi. Còn tiếp theo Em thủ công dùng Vlookup sang cũng được ạ.
 
Lần chỉnh sửa cuối:
Anh Ba tê và các Bạn giúp Em sửa code ko cho hiện dòng cộng, ko tính Số lượng tồn đầu, nhập, xuất, tồn cuối. Phần đó Em tự tính bằng hàm. Cảm ơn Anh và các Bạn!



PS: Phần tính số lượng nhập xuất tồn thực tế của em theo ngày và hơi loằng ngoằng. Em có được list danh sách lọc như vậy là Hạnh phúc rồi. Còn tiếp theo Em thủ công dùng Vlookup sang cũng được ạ.
Bạn hơi "bị" ngộ hé. Dứt khoát không đưa dữ liệu đầy đủ.
Lỡ cũng "bị" khoái mấy cái vụ cộng cộng trừ trừ nên giả lập thí thí dữ liệu để làm.
Nếu thấy nó xài được thì bàn tiếp, không được thì "chạy" luôn.
 

File đính kèm

Cảm ơn Anh Ba tê nhiều nhiều! Sắp tới Em đưa file đầy đủ lên Anh giúp Em 1 tay nhé. Rất mong nhận được sự giúp đỡ của Anh và mọi người.
 

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

Back
Top Bottom