Làm sao để cắt file báo cáo sales của nhiều vùng thành những file báo cáo nhỏ mỗivùng (1 người xem)

Liên hệ QC

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

binmanagertl

Thành viên mới
Tham gia
25/10/16
Bài viết
29
Được thích
0
Chào mọi người,

Hiện em có file daily sales là file báo cáo sales của nhiều vùng ở Việt Nam. Em muốn chia nhỏ file báo cáo tổng này thành nhiều file báo cáo nhỏ tương ứng với từng vùng (ví dụ giống như file HCM). Mọi người cho em hỏi là mình có thể làm như vậy với VBA không ạ?

Em cảm ơn mọi người rất nhiều :)
 

File đính kèm

Chào mọi người,

Hiện em có file daily sales là file báo cáo sales của nhiều vùng ở Việt Nam. Em muốn chia nhỏ file báo cáo tổng này thành nhiều file báo cáo nhỏ tương ứng với từng vùng (ví dụ giống như file HCM). Mọi người cho em hỏi là mình có thể làm như vậy với VBA không ạ?

Em cảm ơn mọi người rất nhiều :)

Chào binmanagertl,

Bạn có biết tại sao topic này: Chia file tổng thành nhiều file
lại không có ai giúp bạn tuy có nhiều lượt vào xem bài.
Bạn cần diễn đạt làm sao người khác hiểu vấn đề của bạn, mong muốn của bạn thì mới giúp bạn được.
File "daily_sales" của bạn chỉ có 4 Region: Vậy chỉ cần copy file đó ra 4 file mới rồi filter/ xóa là được. Còn nhanh hơn ngồi viết vba.
p/s: Sheet "Daily Sales by SI" của file "HCM" được tạo nên như nào từ file "daily_sales"?
 
Upvote 0
Bạn vào Access, load file lên và dùng query lọc ra từng vùng. Cứ mỗi vùng thì save lại thành 1 csv.
Sau đó load csv trở lại Excel.
Đây là quy trình căn bản của dân làm việc với dữ liệu.
 
Upvote 0
Chào bạn befaint,

Để ra được sheet "Daily sales by SI" của file "HCM", thì trong file "daily_sales", mình chỉ delete tất cả các dữ liệu của các vùng còn lại. Làm tới vùng nào thì mình chỉ giữ lại dữ liệu sales của vùng đó và xóa các vùng còn lại. Mình cũng thấy như vậy là cũng nhanh nhưng mà người quản lý mình hỏi mình là có cách nào viết bằng VBA mà nhanh hơn cách này không. Mình cũng không giỏi về VBA lắm cho nên mình muốn hỏi mọi người xem sao... Nhưng mà bản thân mình cũng thấy là làm vùng nào giữ lại dữ liệu sales của vùng đó và xóa dữ liệu các vùng còn lại cũng là rất nhanh rồi....
 
Upvote 0
Chào bạn befaint,

Để ra được sheet "Daily sales by SI" của file "HCM", thì trong file "daily_sales", mình chỉ delete tất cả các dữ liệu của các vùng còn lại. Làm tới vùng nào thì mình chỉ giữ lại dữ liệu sales của vùng đó và xóa các vùng còn lại. Mình cũng thấy như vậy là cũng nhanh nhưng mà người quản lý mình hỏi mình là có cách nào viết bằng VBA mà nhanh hơn cách này không. Mình cũng không giỏi về VBA lắm cho nên mình muốn hỏi mọi người xem sao... Nhưng mà bản thân mình cũng thấy là làm vùng nào giữ lại dữ liệu sales của vùng đó và xóa dữ liệu các vùng còn lại cũng là rất nhanh rồi....

Bạn xem lại nhé. Không dưng tôi hỏi cái sheet "Daily Sales by SI", bởi vì:
File "HCM" của bạn gửi ở bài #1 có 2 sheets: "Daily Sales by SIP" và "Daily Sales by SI"
Sheet "Daily Sales by SIP" là kết quả bạn đang yêu cầu.
Sheet "Daily Sales by SI": Không rõ
có cách nào viết bằng VBA mà nhanh hơn cách này không
Quan trọng là áp dụng như nào? dùng 1 lần hay nhiều lần? Nếu thi đấu cho lần đầu tiên thì cách bạn đang làm là dành cúp rồi.
 
Upvote 0
Thật ra Sheet "Daily sales by SI" không quan trọng lắm. Sheet đó có thể bỏ trong kết quả cũng được. Người quản lý mình chỉ yêu cầu từ file "daily_sales" hiện ra kết quả giống như sheet "Daily sales by SIP" thôi. Họ muốn viết bằng VBA để áp dụng cho nhiều lần để mỗi lần làm report thì không phải mắc công cứ ngồi giữ lại mỗi vùng mình cần và delete các vùng còn lại vì cũng mất hơi nhiều thời gian vì thật ra cũng có rất nhiều vùng chứ không phải chỉ là 4 vùng trong file "daily_Sales" (tại file báo cáo tổng có nhiều vùng quá không tải lên hết được nên mình phải delete bớt các vùng ở dưới và chỉ giữ lại 4 vùng cho các bạn có thể hình dung được thôi...).
 
Upvote 0
Upvote 0
Thật ra file "daily_sales" cũng có 2 sheet là Daily sales by SIP và Daily sales by SI. Nhưng mà nếu giữ luôn cái sheet Daily sales by SI thì nặng quá nên mình đã delete rồi (với lại cái sheet đó cũng không quan trọng). Mình quên delete cái sheet "Daily sales by SI" trong file HCM. Bạn có thể đưa mình email của bạn để mình gửi cho bạn file hoàn chỉnh của file "daily_sales" dc không vì dung lượng tải lên của mình đã hết nên mình ko tải file đó lên dc nữa...
 
Upvote 0
Thật ra file "daily_sales" cũng có 2 sheet là Daily sales by SIP và Daily sales by SI. Nhưng mà nếu giữ luôn cái sheet Daily sales by SI thì nặng quá nên mình đã delete rồi (với lại cái sheet đó cũng không quan trọng). Mình quên delete cái sheet "Daily sales by SI" trong file HCM. Bạn có thể đưa mình email của bạn để mình gửi cho bạn file hoàn chỉnh của file "daily_sales" dc không vì dung lượng tải lên của mình đã hết nên mình ko tải file đó lên dc nữa...
Chào binmanagertl,

Bạn cứ bình tĩnh nêu yêu cầu của bạn, có hay không có cái gì thì bạn cứ nêu ra dứt khoát. Bạn cứ nhập nhằng vậy sẽ làm khó người muốn giúp bạn.
dung lượng tải lên của mình đã hết nên mình ko tải file đó lên dc nữa
Bạn có thể upload file đó lên google drive, onedrive, mediafire, dropbox... rồi gửi link qua đây.
 
Upvote 0
ah file ED South cũng là 1 file ví dụ kết quả phải ra từ file daily sales by SIP_SI Oct 2016 :)
 
Upvote 0
Chào bạn befaint,

Bạn có xem dc file trong đường link mình dẫn không? Bạn có cần mình nói rõ hơn nữa không? :)
 
Upvote 0
Chào bạn befaint,

Bạn có xem dc file trong đường link mình dẫn không? Bạn có cần mình nói rõ hơn nữa không? :)

Tôi đã xem file.
Bạn vui lòng phản hồi thêm thông tin:
- Căn cứ theo cột 8-[Region] hay theo cột 10-[Auto] để phân vùng?
- Dữ liệu từ dòng 6630 trở xuống thì căn cứ vào đâu?
 
Upvote 0
Mình sẽ căn cứ vào cột 10- [Auto] để phân vùng nha bạn ;)

Từ dòng 6515 trở xuống là những đại lý của những lĩnh vực không còn hoạt động nữa nên chỉ xuất hiện trong file báo cáo tổng cộng chứ không cần gửi cho các đại lý của mỗi vùng thông tin từ dòng 6615 trở xuống. Mình chỉ dừng ở dòng 6614 là được rồi :) Các dòng sau dòng 6615 thì chỉ dành cho cấp quản lý cấp cao tham khảo thôi chứ từng vùng thì không cần phải biết :). Như bạn thấy 2 file ví dụ "HCM" vs "ED South" đều không có những thông tin từ dòng 6614 trở xuống.

Mình sẽ chia các file theo các khu vực như bên dưới:

[TABLE="width: 872"]
[TR]
[TD]MC
[/TD]
[TD]
[/TD]
[TD]
[/TD]
[/TR]
[TR]
[TD]HCM_MC
[/TD]
[TD]-->
[/TD]
[TD]HCM
[/TD]
[/TR]
[TR]
[TD]EAST_MC
[/TD]
[TD]-->
[/TD]
[TD]EAST
[/TD]
[/TR]
[TR]
[TD]MEKONG_MC
[/TD]
[TD]-->
[/TD]
[TD]MEKONG
[/TD]
[/TR]
[TR]
[TD]CENTRAL_MC
[/TD]
[TD]-->
[/TD]
[TD]CENTRAL
[/TD]
[/TR]
[TR]
[TD]NORTH_MC
[/TD]
[TD]-->
[/TD]
[TD]NORTH
[/TD]
[/TR]
[TR]
[TD]ED
[/TD]
[TD]
[/TD]
[TD]
[/TD]
[/TR]
[TR]
[TD]HCM_ED+ MEKONG_ED
[/TD]
[TD]-->
[/TD]
[TD]ED SOUTH
[/TD]
[/TR]
[TR]
[TD]EAST_ED
[/TD]
[TD]-->
[/TD]
[TD]ED EAST
[/TD]
[/TR]
[TR]
[TD]CENTRAL_ED
[/TD]
[TD]-->
[/TD]
[TD]ED CENTRAL
[/TD]
[/TR]
[TR]
[TD]NORTH_ED
[/TD]
[TD]-->
[/TD]
[TD]ED NORTH
[/TD]
[/TR]
[/TABLE]
 
Upvote 0
Mình sẽ căn cứ vào cột 10- [Auto] để phân vùng nha bạn ;)

Từ dòng 6515 trở xuống là những đại lý của những lĩnh vực không còn hoạt động nữa nên chỉ xuất hiện trong file báo cáo tổng cộng chứ không cần gửi cho các đại lý của mỗi vùng thông tin từ dòng 6615 trở xuống. Mình chỉ dừng ở dòng 6614 là được rồi :) Các dòng sau dòng 6615 thì chỉ dành cho cấp quản lý cấp cao tham khảo thôi chứ từng vùng thì không cần phải biết :). Như bạn thấy 2 file ví dụ "HCM" vs "ED South" đều không có những thông tin từ dòng 6614 trở xuống.
Bạn ơi, bạn diễn đạt làm sao cho người khác hiểu vấn đề của bạn.
Chứ mỗi lúc bạn nói ra được chút... cứ hỏi rồi mới nói.
Code két gì làm sao biết được trong đầu bạn nghĩ cái gì? Nó cần căn cứ cụ thể.
=> Làm sao biết là tới dòng 6514 thì thôi? Sau một thời gian dữ liệu có tăng lên không, khi đó dòng 6514 là cái dòng nào?
Có phải khi cột [Auto] có giá trị ="NEW" thì bỏ qua?
 
Upvote 0
Đúng rồi bạn :) khi nào cột [Auto] có giá trị = "NEW" thì mình sẽ bỏ qua :)
 
Upvote 0
Bạn thông cảm cho mình nha. Nhiều khi mình diễn đạt không dc rõ ràng lắm =.=
 
Upvote 0
Là sao hả bạn? Mình không hiểu lắm =.=

Bạn chép vào module rồi nhấn F5:
Mã:
Sub Main()
Dim NF As String: NF = "\Phan vung"
Dim Thisbook As Workbook: Set Thisbook = ThisWorkbook
Dim dF As String, cF As String, cp As String
Dim lr As Long, tcp(), rng As Range, i As Integer
Dim sh As Worksheet, dk(), k As Integer, j As Integer
lr = Sheet2.Cells(Rows.Count, "K").End(xlUp).Row
Set rng = Sheet2.Range("J7:J" & lr)
tcp = fRNG(rng)
dF = "CMD /C RD /s /q """ & Thisbook.Path & NF & """"
cF = "CMD /C MD """ & Thisbook.Path & NF & """"
Shell dF, vbHide
Shell cF, vbHide
For i = 0 To UBound(tcp)
cp = "CMD /C COPY """ & Thisbook.FullName & """" & " " & """" & Thisbook.Path & NF & "\" & tcp(i) & Right(Thisbook.Name, 5) & """"
Shell cp, vbHide
Next i
ReDim dk(1 To UBound(tcp) + 2)
dk(UBound(dk) - 1) = "NEW": dk(UBound(dk)) = "="
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For i = 0 To UBound(tcp)
Workbooks.Open Filename:=Thisbook.Path & NF & "\" & tcp(i) & Right(Thisbook.Name, 5) ', ReadOnly:=False
    For Each sh In ActiveWorkbook.Sheets
        If sh.Name = "Daily Sales by SIP" Then
            k = 1
            For j = 0 To UBound(tcp)
                If tcp(j) <> tcp(i) Then dk(k) = tcp(j): k = k + 1
            Next j
            sh.Range("$A$6:$AY$" & lr).AutoFilter Field:=10, Criteria1:=dk, Operator:=xlFilterValues
            sh.Rows("7:6688").SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp
            sh.ShowAllData
            ActiveWorkbook.Save
        End If
    Next sh
Workbooks(tcp(i) & Right(Thisbook.Name, 5)).Close
Next i
Call Shell("explorer.exe" & " " & Thisbook.Path & NF, vbNormalFocus)
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
'-----------
Function fRNG(rng As Range) As Variant
If rng.Columns.Count > 1 Then Exit Function
Dim Dic As Object
Set Dic = CreateObject("Scripting.Dictionary")
Dim r As Long, Arr()
On Error Resume Next
Arr = rng.Value
For r = 1 To UBound(Arr, 1)
        If Arr(r, 1) <> "" And Arr(r, 1) <> "NEW" And Not Dic.Exists(Arr(r, 1)) Then
            Dic.Add Arr(r, 1), ""
        End If
Next r
fRNG = Dic.Keys
End Function
 
Upvote 0
À mình có thắc mắc muốn hỏi bạn là mình đã chạy thành công macro của bạn rồi mà lúc chạy nó chỉ ra 8 files, còn thiếu file của ED East.
 
Upvote 0
À bạn ơi cho mình hỏi là sau khi xuất ra 8 file báo cáo nhỏ theo từng vùng, sheet "Daily sales by SI" không tự động cắt theo từng vùng giống như sheet "Daily sales by SIP" mà nó cũng còn y chang như sheet "daily sales by SI" trong file "daily sales by SI SIP_Oct 2016" hả bạn?

Cảm ơn bạn trước nha :)
 
Upvote 0
À bạn ơi cho mình hỏi là sau khi xuất ra 8 file báo cáo nhỏ theo từng vùng, sheet "Daily sales by SI" không tự động cắt theo từng vùng giống như sheet "Daily sales by SIP" mà nó cũng còn y chang như sheet "daily sales by SI" trong file "daily sales by SI SIP_Oct 2016" hả bạn?

Cảm ơn bạn trước nha :)

Bạn này hồn nhiên, dễ thương ghê cơ! --=0--=0
Bạn đọc kỹ bài #15 chưa? Đọc kỹ rồi thì cứ nêu yêu cầu của bạn thôi.
(Cần kết quả abc, điều kiện cụ tỉ là xyz... kiểu như vậy)
 
Upvote 0
À ý mình là như vậy:

1. Từ file "Daily sales by SIP SI_oct 2016", mình cần tách file đó ra thành 9 file nhỏ tương ứng với từng vùng như sau :

[TABLE="class: cms_table, width: 872"]
[TR]
[TD]MC[/TD]
[TD][/TD]
[TD][/TD]
[/TR]
[TR]
[TD]HCM_MC[/TD]
[TD]-->[/TD]
[TD]HCM[/TD]
[/TR]
[TR]
[TD]EAST_MC[/TD]
[TD]-->[/TD]
[TD]EAST[/TD]
[/TR]
[TR]
[TD]MEKONG_MC[/TD]
[TD]-->[/TD]
[TD]MEKONG[/TD]
[/TR]
[TR]
[TD]CENTRAL_MC[/TD]
[TD]-->[/TD]
[TD]CENTRAL[/TD]
[/TR]
[TR]
[TD]NORTH_MC[/TD]
[TD]-->[/TD]
[TD]NORTH[/TD]
[/TR]
[TR]
[TD]ED[/TD]
[TD][/TD]
[TD][/TD]
[/TR]
[TR]
[TD]HCM_ED+ MEKONG_ED[/TD]
[TD]-->[/TD]
[TD]ED SOUTH[/TD]
[/TR]
[TR]
[TD]EAST_ED[/TD]
[TD]-->[/TD]
[TD]ED EAST[/TD]
[/TR]
[TR]
[TD]CENTRAL_ED[/TD]
[TD]-->[/TD]
[TD]ED CENTRAL[/TD]
[/TR]
[TR]
[TD]NORTH_ED[/TD]
[TD]-->[/TD]
[TD]ED NORTH[/TD]
[/TR]
[/TABLE]


Khi chạy macro của bạn thì nó chỉ xuất ra có 8 file excel thôi, còn thiếu mất 1 file của vùng "ED East".

2. Trong 9 file excel nhỏ thì mục sheet "Daily sales by SIP" thì kết quả là đúng như ý mình muốn như 2 file ví dụ HCM và ED South (tức là nó đã tự động tách ra tùy theo những điểm bán hàng của từng vùng). Tuy nhiên, trong sheet "Daily sales by SI", thì mình không hiểu sao là cái sheet đó vẫn y chang như sheet cùng tên trong file ban đầu "Daily sales by SIP SI_Oct 2016", cái mình cần là khi tách ra thành 9 file nhỏ tương ứng với từng vùng thì cái sheet "Daily sales by SI" cũng tự động tách ra tùy theo từng vùng giống như sheet "Daily sales by SIP". Bạn có thể xem kết quả mình mong muốn trong sheet "Daily sales by SI" giống như ví dụ trong 2 file HCM và ED South :)

Hi vọng các lời giải thích của mình đã rõ ràng hơn.

Cảm ơn bạn rất nhiều nha :)
 
Upvote 0
À ý mình là như vậy:

1. Từ file "Daily sales by SIP SI_oct 2016", mình cần tách file đó ra thành 9 file nhỏ tương ứng với từng vùng như sau :

Khi chạy macro của bạn thì nó chỉ xuất ra có 8 file excel thôi, còn thiếu mất 1 file của vùng "ED East".

2. Trong 9 file excel nhỏ thì mục sheet "Daily sales by SIP" thì kết quả là đúng như ý mình muốn như 2 file ví dụ HCM và ED South (tức là nó đã tự động tách ra tùy theo những điểm bán hàng của từng vùng). Tuy nhiên, trong sheet "Daily sales by SI", thì mình không hiểu sao là cái sheet đó vẫn y chang như sheet cùng tên trong file ban đầu "Daily sales by SIP SI_Oct 2016", cái mình cần là khi tách ra thành 9 file nhỏ tương ứng với từng vùng thì cái sheet "Daily sales by SI" cũng tự động tách ra tùy theo từng vùng giống như sheet "Daily sales by SIP". Bạn có thể xem kết quả mình mong muốn trong sheet "Daily sales by SI" giống như ví dụ trong 2 file HCM và ED South :)

Hi vọng các lời giải thích của mình đã rõ ràng hơn.

Cảm ơn bạn rất nhiều nha :)
Ý 1:
"Em" này mới được sinh ra hử? ED EAST
Bạn vui lòng kiểm tra trong file đính kèm ở link bài #10 có ED EAST (cột [Region]) không?
Ý 2:
Bạn tham khảo cách nêu vấn đề với bài #13 đó. Ta chỉ cần nêu: Căn cứ vào vùng được liệt kê ở cột nào đó (???) để tách ra ứng với vùng đó.

Bạn phản hồi lại nhé. Sau bài nữa chắc tôi xách dép chạy.
 
Upvote 0
À sorry bạn mình vừa nhìn thấy. Cái đó là lỗi của người làm cái file "Daily sales by SIP SI_otct 2016", mình vừa mới sửa lại những vùng có "ED East" trong cột 10. Mình vừa mới up file lên lại theo đường link:

https://drive.google.com/drive/folders/0B-zoAPfWVNT9bDRnV29Qa3VnTEU

2. Trong sheet "Daily sales by SI" của file "Daily sales by SI SIP_Oct 2016", mình mới insert 1 cột J "REGION". Mình sẽ dựa vào cột J đó để phân vùng. Khi nào cột J đó có giá trị ="NEW" thì mình sẽ bỏ qua.
 
Upvote 0
À sorry bạn mình vừa nhìn thấy. Cái đó là lỗi của người làm cái file "Daily sales by SIP SI_otct 2016", mình vừa mới sửa lại những vùng có "ED East" trong cột 10. Mình vừa mới up file lên lại theo đường link:

https://drive.google.com/drive/folders/0B-zoAPfWVNT9bDRnV29Qa3VnTEU

2. Trong sheet "Daily sales by SI" của file "Daily sales by SI SIP_Oct 2016", mình mới insert 1 cột J "REGION". Mình sẽ dựa vào cột J đó để phân vùng. Khi nào cột J đó có giá trị ="NEW" thì mình sẽ bỏ qua.

Tôi thấy trong sheet "Daily sales by SI" có cột E [Auto] thể hiện các vùng rồi mà. Sao ta không sử dụng cột đó?
Vấn đề quan trọng:
- Trước khi điền thêm dữ liệu vào cột J (bạn vừa chèn thêm), bạn cần Clear Outline.
Tôi kiểm tra thì cột J vẫn còn trống ở nhiều dòng.
- Nếu dùng cột E ban đầu để phân vùng thì bạn cũng cần bổ sung dữ liệu vì còn nhiều dòng trống? (nếu bị lỗi quên nhập).
 
Upvote 0
À cột auto đó hiện không đúng theo giá trị vùng mà mình muốn. Cột J mà mình thêm vào mình đã chỉnh theo tên vùng mà mình muốn để có thể phân vùng cho chính xác. Mình mới thêm vào những dòng còn trống ở cột J và mình vừa upload lại file trên đường link:

https://drive.google.com/drive/folders/0B-zoAPfWVNT9bDRnV29Qa3VnTEU

Khi nào cột J đó có giá trị ="NEW" thì mình sẽ bỏ qua.

Cảm ơn bạn nhiều nha :)
 
Upvote 0
À cột auto đó hiện không đúng theo giá trị vùng mà mình muốn. Cột J mà mình thêm vào mình đã chỉnh theo tên vùng mà mình muốn để có thể phân vùng cho chính xác. Mình mới thêm vào những dòng còn trống ở cột J và mình vừa upload lại file trên đường link:
https://drive.google.com/drive/folders/0B-zoAPfWVNT9bDRnV29Qa3VnTEU
Khi nào cột J đó có giá trị ="NEW" thì mình sẽ bỏ qua.
Cảm ơn bạn nhiều nha :)
Trước khi chạy code, bạn kiểm tra lại vài chỗ sau.
File Daily Sales by SIP SI_Oct-2016:
- Sheet Daily Sales by SI: Cần kiểm tra dữ liệu tại:
J684:J685
J4908:J4926

- Sheet Sheet Daily Sales by SIP:
J292:J352
K353

=> File HCM/ Sheet Daily Sales by SIP: bị lỗi công thức tại K292...
Mã:
Sub Main()
Dim NF As String: NF = "\$Region"
Dim Thisbook As Workbook: Set Thisbook = ThisWorkbook
Dim dF As String, cF As String, cp As String
Dim lr As Long, tcp(), rng As Range, i As Integer, lr2 As Long
Dim sh As Worksheet, dk(), k As Integer, j As Integer
lr = Sheet2.Cells(Rows.Count, "K").End(xlUp).Row
lr2 = Sheet3.Cells(Rows.Count, "K").End(xlUp).Row
Set rng = Sheet2.Range("J7:J" & lr)
tcp = fRNG(rng)
dF = "CMD /C RD /s /q """ & Thisbook.Path & NF & """"
cF = "CMD /C MD """ & Thisbook.Path & NF & """"
Shell dF, vbHide: Shell cF, vbHide
For i = 0 To UBound(tcp)
cp = "CMD /C COPY """ & Thisbook.FullName & """" & " " & """" & Thisbook.Path & NF & "\" & tcp(i) & Right(Thisbook.Name, 5) & """"
Shell cp, vbHide
Next i
ReDim dk(1 To UBound(tcp) + 2)
dk(UBound(dk) - 1) = "NEW": dk(UBound(dk)) = "="
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For i = 0 To UBound(tcp)
Workbooks.Open Filename:=Thisbook.Path & NF & "\" & tcp(i) & Right(Thisbook.Name, 5)
    For Each sh In ActiveWorkbook.Sheets
        k = 1
        For j = 0 To UBound(tcp)
            If tcp(j) <> tcp(i) Then dk(k) = tcp(j): k = k + 1
        Next j
        If sh.Name = "Daily Sales by SIP" Then
            sh.Range("$A$6:$AZ$" & lr).AutoFilter Field:=10, Criteria1:=dk, Operator:=xlFilterValues
            sh.Rows("7:" & lr).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp
            sh.ShowAllData: ActiveWorkbook.Save
        End If
        If sh.Name = "Daily Sales by SI" Then
            sh.Range("$A$6:$AZ$" & lr2).AutoFilter Field:=10, Criteria1:=dk, Operator:=xlFilterValues
            sh.Rows("7:" & lr2).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp
            sh.ShowAllData: ActiveWorkbook.Save
        End If
    Next sh
Workbooks(tcp(i) & Right(Thisbook.Name, 5)).Close
Next i
Call Shell("explorer.exe" & " " & Thisbook.Path & NF, vbNormalFocus)
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
'-----------
Function fRNG(rng As Range) As Variant
If rng.Columns.Count > 1 Then Exit Function
Dim Dic As Object
Set Dic = CreateObject("Scripting.Dictionary")
Dim r As Long, Arr()
On Error Resume Next
Arr = rng.Value
For r = 1 To UBound(Arr, 1)
        If Arr(r, 1) <> "" And Arr(r, 1) <> "NEW" And Not Dic.Exists(Arr(r, 1)) Then
            Dic.Add Arr(r, 1), ""
        End If
Next r
fRNG = Dic.Keys
End Function
 
Upvote 0
Thanks bạn nhiều nha.

Sau khi check lại dữ liệu các vùng mà bạn nói thì code đã chạy bình thường rồi :)
 
Upvote 0

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

Back
Top Bottom