Copy dữ liệu sang Sheet mới tốn thời gian

Liên hệ QC

elvis pham

Thành viên mới
Tham gia
16/11/17
Bài viết
18
Được thích
0
Giới tính
Nam
Em chào anh chị trong diễn đàn GPE.
Hiện tại em đang có một vấn đề như thế này:
em có 1 file excel sau khi đặt tên cho các vùng trong file thì việc copy dữ liệu từ file sang sheet mới rất chậm.
anh chị có thể cho em biết cách khắc phục vấn đề này không ạ.
PS Nếu file em copy value dữ liệu 1 sheet sang Workbook mới tốn khoảng 3s
Nhưng nếu copy dữ liệu từ Workbook mới lại chỉ tốn khoảng 0.2s
 

File đính kèm

  • BM-Mua Hang CN NCC V1.4.xlsm
    769.8 KB · Đọc: 16
có anh chị nào biết không giúp em với
 
Em chào anh chị trong diễn đàn GPE.
Hiện tại em đang có một vấn đề như thế này:
em có 1 file excel sau khi đặt tên cho các vùng trong file thì việc copy dữ liệu từ file sang sheet mới rất chậm.
anh chị có thể cho em biết cách khắc phục vấn đề này không ạ.
PS Nếu file em copy value dữ liệu 1 sheet sang Workbook mới tốn khoảng 3s
Nhưng nếu copy dữ liệu từ Workbook mới lại chỉ tốn khoảng 0.2s
Cuối cùng thì ý bạn cần giúp đỡ gì nhỉ?
Khắc phục tình trạng copy dữ liệu sang sheet mới bị chậm hay như thế nào?
 
2s và 0.2s tiết kiệm làm gì không biết
Trong khi gõ post bài lên đây có khi mất 10 phút
 
2s và 0.2s tiết kiệm làm gì không biết
Trong khi gõ post bài lên đây có khi mất 10 phút
Đây là dân làm việc rất chỉnh chu về thời gian. Biết đâu lại có cách gõ chỉ tốn và giây.
Chứ bản thân tôi làm việc rùa bò, copy mất khoảng 5 giây tôi cũng chả nhận ra.
Thực tế là tôi có mấy cái cốt ma cô mở lên, đi uống cà phê nửa tiếng sau trở ại làm tiếp mà tôi cũng chả màng "tối ưu".
 
Cuối cùng thì ý bạn cần giúp đỡ gì nhỉ?
Khắc phục tình trạng copy dữ liệu sang sheet mới bị chậm hay như thế nào?
em có gửi kèm file em viết code kèm theo. Do em làm việc với rất nhiều file vd mỗi lần em nhập dữ liệu vào file tính toán. Khi file tính toán xong thì xuât dữ liệu ra file mới. mà mỗi lần copy dữ liệu sang file mới thì chạy rất chậm tốn 3s.
VD em làm việc với 1000 file thì code chạy tầm 1h.
mục đích của em là làm thế nào để giảm thời gian copy dữ liệu sang sheet mới.
 
Nhưng nếu copy dữ liệu từ Workbook mới lại chỉ tốn khoảng 0.2s
Góp ý cho bạn với cái đoạn bạn đã nói.
Bây giờ mình làm ngược lại. Bằng cách chạy code từ phía Workbook mới
Bạn chỉ cần tạo code Get data và Add code vào Workbook mới sau đó chạy. Thì từ workbook mới sẽ thực hiện lấy dữ liệu ngược và nó tự đóng


 
Góp ý cho bạn với cái đoạn bạn đã nói.
Bây giờ mình làm ngược lại. Bằng cách chạy code từ phía Workbook mới
Bạn chỉ cần tạo code Get data và Add code vào Workbook mới sau đó chạy. Thì từ workbook mới sẽ thực hiện lấy dữ liệu ngược và nó tự đóng
cảm ơn bạn rất nhiều nhé. Mình sẽ thử theo cách này xem.
 
Góp ý cho bạn với cái đoạn bạn đã nói.
Bây giờ mình làm ngược lại. Bằng cách chạy code từ phía Workbook mới
Bạn chỉ cần tạo code Get data và Add code vào Workbook mới sau đó chạy. Thì từ workbook mới sẽ thực hiện lấy dữ liệu ngược và nó tự đóng
:( Cách làm getdata này còn tốn thời gian hơn copy nhiều bạn ơi. bạn có cách nào khác không
 
Bạn nên nói rõ bạn muốn sửa những sub nào , đoạn code nào, mục đích code làm gì

Có thật làm hàng ngàn (1000) files thật không? hay chỉ là ví dụ như bạn nói, ví dụ thì thôi làm chi cho phí thời gian.
 
Bạn nên nói rõ bạn muốn sửa những sub nào , đoạn code nào, mục đích code làm gì

Có thật làm hàng ngàn (1000) files thật không? hay chỉ là ví dụ như bạn nói, ví dụ thì thôi làm chi cho phí thời gian.
hiện tại mình làm việc khoảng hơn 800 file chủ yếu là xuất nhập hàng ngày
VD trong module Xuatkho_Nhapkho có đoạn code này
IP_XK.Range("A:AT").Copy
Workbooks.Add
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
đoạn xuất ra này tốn khá nhiều thời gian nên mình muốn tối ưu làm thế nào để code chạy nhanh hơn. code trong file mình gửi kèm ở trên
 
hiện tại mình làm việc khoảng hơn 800 file chủ yếu là xuất nhập hàng ngày
VD trong module Xuatkho_Nhapkho có đoạn code này
IP_XK.Range("A:AT").Copy
Workbooks.Add
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
đoạn xuất ra này tốn khá nhiều thời gian nên mình muốn tối ưu làm thế nào để code chạy nhanh hơn. code trong file mình gửi kèm ở trên
Code đây mà kêu nghe theo tôi chỉ. Bạn thích đùa ghê. Đợi đi ... Việt Nam vô địch ;););););)
 
hiện tại mình làm việc khoảng hơn 800 file chủ yếu là xuất nhập hàng ngày
VD trong module Xuatkho_Nhapkho có đoạn code này
IP_XK.Range("A:AT").Copy
Workbooks.Add
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
đoạn xuất ra này tốn khá nhiều thời gian nên mình muốn tối ưu làm thế nào để code chạy nhanh hơn. code trong file mình gửi kèm ở trên
Xem qua thì có thể tốn time là do các WorksheetFunction như VLOOKUP

Bạn nên thay lại thuật toán tránh dùng WorksheetFunction --> chẳng hạn dùng FIND của RANGE

tránh dùng Selection --> nên chỉ rõ range nào (vd range("A1")...)

Khi đó thì có thể tắt Calculation, giúp nhanh hơn khi thực hiện codes
Vì code của bạn rối, nên chỉ tạm góp ý vậy
 
Lần chỉnh sửa cuối:
Sao diễn đàn này toàn là dân buôn hàng sỉ không nhỉ.
Worksheet hàng tiệu dòng, hàng ngàn cột. Workbook hàng trăm sheets. Lấy dữ liệu thì hàng ngàn Files.

Mình làm với dữ liệu mấy chục năm nay mà chưa hề làm việc một lúc tới con số trăm workbooks.

Thực ra cái thắc mắc nhất của mình là: dân quản lý dữ liệu hạng này là bậc thầy của mình. Tại sao lại phải lẩn quẩn ở đây nhỉ?

Thú tội:
Có lẽ do mình hơi yếu VBA cho nên cứ dữ liệu nhiều quá thì cho nó vào CSDL. Ở đây toàn dân xịn code VBA cho nên không thấy mấy con số ấy là dạng "khó kiểm soát", "khó làm chủ tình hình".
 
Sao diễn đàn này toàn là dân buôn hàng sỉ không nhỉ.
Worksheet hàng tiệu dòng, hàng ngàn cột. Workbook hàng trăm sheets. Lấy dữ liệu thì hàng ngàn Files.

Mình làm với dữ liệu mấy chục năm nay mà chưa hề làm việc một lúc tới con số trăm workbooks.

Thực ra cái thắc mắc nhất của mình là: dân quản lý dữ liệu hạng này là bậc thầy của mình. Tại sao lại phải lẩn quẩn ở đây nhỉ?

Thú tội:
Có lẽ do mình hơi yếu VBA cho nên cứ dữ liệu nhiều quá thì cho nó vào CSDL. Ở đây toàn dân xịn code VBA cho nên không thấy mấy con số ấy là dạng "khó kiểm soát", "khó làm chủ tình hình".
Kiểu làm việc này là lương tính $ rồi
Công ty kiểu to thế này nên mua phần mềm chuyên nghiệp

Mà tôi thấy code có ghi chú MISA --> sao không đòi hỏi công ty chủ Phần mềm MISA hỗ trợ xuất dữ liệu đầu cuối hợp lý? (câu hỏi này dành cho chủ topic)
 
Kiểu làm việc này là lương tính $ rồi
Công ty kiểu to thế này nên mua phần mềm chuyên nghiệp

Mà tôi thấy code có ghi chú MISA --> sao không đòi hỏi công ty chủ Phần mềm MISA hỗ trợ xuất dữ liệu đầu cuối hợp lý? (câu hỏi này dành cho chủ topic)
Cái lạ là ở chỗ đó.
Cty thì quá xịn, hằng ngàn khách hàng. Giao dịch thì hằng triệu phát sinh (transactions).
Mà theo dõi thì bằng Excel !!!
 
@elvis pham
Tối ưu code 1 tí.
Và việc thực hiện lấy dữ liệu ngược thì không cần lắm, như nhau thôi.
Quá trình Add workbook đã tốn mớ thời gian rồi
Nếu biết Javascript thì dùng NodeJS. thao tác với Workbook ở chế độ âm thầm. Có khi nhanh hơn
PHP:
Sub test_()
  Dim ti As Double, Path$, iRow&
  'Tạo folder D:\Excel\ để test
  Path = "D:\Excel\text_temp" & Format(Now, "yy-mm-dd_hh_mm") & ".xlsx"
  ti = Timer
  On Error GoTo setEvents
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
  iRow = IP_XK.Range("C" & IP_XK.Rows.Count).End(xlUp).Row + 10
  Dim Arr: Arr = IP_XK.Range("A1:AT" & iRow).Value

  With Workbooks.Add
    .Sheets(1).[A1].Resize(UBound(arr), UBound(arr, 2)).Value = arr
      ' IP_XK.Range("A1:AT" & iRow).Copy .Sheets(1).[A1].Resize(UBound(arr), UBound(arr, 2))
    .SaveAs Filename:=Path, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
setEvents:
    On Error Resume Next
    .Close False
  End With
  Application.ScreenUpdating = True
  Application.DisplayAlerts = True
  Debug.Print Timer - ti
  Shell "explorer.exe /select," & Path, vbNormalFocus
End Sub


 
Lần chỉnh sửa cuối:
em có gửi kèm file em viết code kèm theo. Do em làm việc với rất nhiều file vd mỗi lần em nhập dữ liệu vào file tính toán. Khi file tính toán xong thì xuât dữ liệu ra file mới. mà mỗi lần copy dữ liệu sang file mới thì chạy rất chậm tốn 3s.
VD em làm việc với 1000 file thì code chạy tầm 1h.
mục đích của em là làm thế nào để giảm thời gian copy dữ liệu sang sheet mới.
Góp ý cho bạn:
1/ Trong File có cả đống code không ai rảnh để đọc hết đâu.
2/ Bạn nên nêu rỏ cái bạn cần ở sheet nào và copy dữ liệu sang sheet mới là copy cái gì (trong File có nhiều sheet thì chả ai hiểu).
3/ Bạn nên nêu rỏ cái bạn mong muốn các thành viên có hiểu mới đưa ra giải pháp tốt nhất cho bạn, chứ đừng nên bắt người hiểu nữa vời như : Làm việc với 1000 file là làm việc gì?
 
Web KT
Back
Top Bottom