Đến nội dung

Tăng tốc file lớn ​

Cách giữ workbook Excel chạy nhanh khi dùng DVDAddin với dữ liệu lớn — trên 10,000 dòng, nhiều UDF, hàng trăm sheet.

Đo lường trước khi tối ưu ​

Công cụ ​

Công cụDùng để
Windows Task ManagerXem RAM và CPU của EXCEL.EXE khi mở file hoặc khi tính lại
Process ExplorerCông cụ của sysinternals.com — chi tiết hơn Task Manager (Working Set, Private Bytes, số handle)
Sysinternals Process MonitorTheo dõi đọc/ghi file khi nghi ổ đĩa hoặc phần mềm diệt virus quét file là chỗ gây chậm
Đồng hồ bấm giờ + F9Cách đơn giản nhất: chuyển sang chế độ tính thủ công (Manual), bấm F9, đếm giây
Báo cáo giai đoạn của In hàng loạtCó sẵn trong add-in — xem phần dưới

Lấy mốc đo ​

Trước khi tối ưu, hãy đo lấy mốc:

  1. Đóng mọi ứng dụng khác.
  2. Mở workbook → ghi lại thời gian mở.
  3. Bấm F9 để tính lại → ghi thời gian. Muốn tính lại toàn bộ, kể cả các ô Excel đã lưu sẵn kết quả: Ctrl + Alt + Shift + F9.
  4. Lưu file → ghi thời gian.

Tối ưu xong → đo lại → so sánh. Phải đo trên cùng một máy, cùng một file, không mở ứng dụng khác thì số đo mới có ý nghĩa.

10 nguyên nhân thường gặp khiến workbook chậm ​

#1 — Quá nhiều ô dùng UDF ​

UDF của add-in chạy chậm hơn hàm có sẵn của Excel, và Excel không tính UDF song song trên nhiều luồng (xem Tính đa luồng).

Dấu hiệu: Workbook có hàng nghìn ô =dvd...(...) → tính lại rất lâu.

Cách xử lý:

  • Chuyển kết quả UDF thành giá trị tĩnh (Ctrl+C → Paste Special → Values).
  • Hoặc dùng lệnh trên ribbon thay cho UDF. Ví dụ, thay vì 1000 ô =dvdTranslate(...), chọn vùng rồi chạy Dịch ngôn ngữ một lần — kết quả ghi thẳng vào ô, không còn công thức nào phải tính lại.

#2 — Hàm luôn tính lại (volatile) ​

Hàm volatile bị Excel tính lại mỗi khi có BẤT KỲ ô nào thay đổi, kể cả ô không liên quan.

DVDAddin có 3 hàm khai báo volatile:

HàmGhi chú
dvdAutoHideẨn/hiện dòng theo điều kiện — phải volatile mới bám kịp dữ liệu
dvdSumVisibleTổng các ô đang hiển thị — ẩn/hiện dòng không sinh sự kiện tính lại nên phải volatile
dvdMVLookupTrả nhiều kết quả — cột kết quả nằm lệch so với cột dò nên Excel không tự theo dõi được; vẫn chỉ ghi outputRange khi kết quả đổi

Từ 07/10/2026, dvdMCLookup và dvdUniqueV không còn là hàm volatile: chúng tính lại khi chính vùng đối số thay đổi.

Hàm volatile có sẵn của Excel: NOW(), TODAY(), RAND(), OFFSET(), INDIRECT().

Dấu hiệu: Sửa 1 ô ở sheet khác → thanh trạng thái hiện "Calculating (XX%)" rất lâu.

Cách xử lý:

  • Thay OFFSET(A1,1,0,10,1) bằng vùng cố định A2:A11.
  • Thay INDIRECT("Sheet1!"&A1) bằng CHOOSE hoặc nhiều IF lồng nhau.
  • Chỉ đặt NOW() ở đúng 1 ô, các ô khác tham chiếu tới ô đó.
  • Với 3 hàm volatile của DVDAddin ở bảng trên: chỉ dùng ở vài chục ô, đừng rải xuống 5000 dòng.

#3 — VLOOKUP toàn cột ​

=VLOOKUP(A1, BangGia!A:Z, 8, FALSE) — với mỗi ô, Excel quét toàn bộ cột A của sheet BangGia.

Cách xử lý:

  • Đổi sang vùng cố định: =VLOOKUP(A1, BangGia!$A$2:$Z$1000, 8, FALSE).
  • Hoặc dùng INDEX/MATCH.
  • Hoặc chuyển BangGia thành Excel Table (Ctrl+T) → tham chiếu theo tên cột.

#4 — Định dạng có điều kiện dùng công thức ​

Mỗi quy tắc định dạng có điều kiện (Conditional Formatting) dùng công thức sẽ được tính cho từng ô trong vùng áp dụng, ở mỗi lần tính lại.

Dấu hiệu: Workbook có 50+ quy tắc định dạng có điều kiện, áp trên các vùng lớn.

Cách xử lý:

  • Gom vùng — thay 100 quy tắc trên 100 ô riêng lẻ bằng 1 quy tắc trên cả vùng.
  • Đơn giản hoá công thức — dùng kiểu so sánh giá trị ô (Cell Value) thay cho công thức phức tạp.
  • Tạm bỏ định dạng có điều kiện: Home → Conditional Formatting → Clear Rules (chỉ làm tạm thời để dò lỗi).

#5 — Ràng buộc nhập liệu (Data Validation) phức tạp ​

Ô có Data Validation kiểu =COUNTIF(...) = 0 → tính lại mỗi khi giá trị thay đổi.

Cách xử lý: Đơn giản hoá danh sách. Dùng vùng đặt tên (Named Range) tĩnh thay cho vùng động.

#6 — Quá nhiều ảnh / shape ​

Workbook nhúng nhiều ảnh → tốn nhiều bộ nhớ, hiển thị bị giật.

Dấu hiệu: File .xlsx nặng hơn 50MB dù chữ trong ô không nhiều.

Cách xử lý:

#7 — PivotTable quá lớn ​

PivotTable lấy nguồn từ 100k+ dòng → tính lại rất lâu.

Cách xử lý:

  • Dùng Excel Table làm nguồn (nhanh hơn vùng ô thường).
  • PivotTable → Options → Data → tắt "Refresh data when opening file" (làm mới thủ công).
  • Dùng Data Model + Power Pivot cho dữ liệu rất lớn.

#8 — File chia sẻ qua mạng ​

File mở thẳng từ ổ mạng (\\server\share\file.xlsx) → lần lưu nào cũng chậm.

Cách xử lý:

  • Chép về máy → sửa → đưa lại lên ổ mạng.
  • Hoặc dùng OneDrive đồng bộ (file nằm trên máy, đồng bộ chạy ngầm).

#9 — Nhiều liên kết tới file khác ​

='[OtherFile.xlsx]Sheet'!A1 → mỗi lần tính lại, Excel phải đọc file kia.

Dấu hiệu: File mở chậm và hiện thông báo "Update External References".

Cách xử lý:

  • Data → Edit Links → Break Link → công thức chuyển thành giá trị tĩnh.
  • Hoặc gom số liệu cần dùng thành một bảng chốt số ngay trong file, cập nhật thủ công theo đợt.

#10 — Xung đột với add-in khác ​

PowerPivot, Solver, Analysis ToolPak, add-in của phần mềm diệt virus, DVDAddin — add-in nào cũng cộng thêm vào thời gian khởi động Excel.

Cách xử lý: Tắt add-in không dùng (File → Options → Add-ins → Manage → Go → bỏ tick).

Tinh chỉnh riêng cho DVDAddin ​

Tắt tự động tính / tự động vẽ khi đang nhập tiến độ ​

Tab DVD Cons có hai công tắc ảnh hưởng trực tiếp tới tốc độ nhập liệu:

  • Tự động tính — bật thì mỗi lần đổi ô là add-in tính lại ngày tháng cho bảng tiến độ.
  • Tự động vẽ — bật thì sau mỗi lần tính lại, Gantt được vẽ lại.

Khi nhập một loạt vài trăm công tác, tắt cả hai, nhập xong rồi bật lại (hoặc chạy Vẽ tiến độ một lần). Đây là khác biệt lớn nhất giữa "nhập mượt" và "nhập giật" trên bảng tiến độ lớn.

Chuyển Excel sang chế độ tính thủ công ​

Chế độ mặc định: Auto — Excel tính lại mỗi khi có ô thay đổi.

Workbook có nhiều UDF thì nên chuyển sang Manual:

  • File → Options → Formulas → Calculation options → Manual.
  • Bấm F9 để tính lại khi cần.

→ Sửa dữ liệu không còn kéo theo hàng nghìn lượt tính lại.

Hàm mạng: cái nào chặn Excel, cái nào không ​

Đây là điểm hay bị hiểu nhầm — không phải hàm mạng nào cũng chạy ngầm:

HàmCách chạyHệ quả
dvdTranslateĐồng bộ, chờ tối đa 15 giâyExcel đứng chờ từng ô một. 100 ô mà mạng chậm thì Excel treo rất lâu
dvdStockĐồng bộ, chờ tối đa 15 giâyNhư trên
DVDFxBất đồng bộ, lưu tạm 1 giờ trên đĩaÔ hiện #N/A một lát rồi tự có giá trị; không chặn Excel
dvdAIExplainBất đồng bộNhư trên

Từ đó:

  • Đừng rải dvdTranslate xuống cả cột. Dùng lệnh Dịch ngôn ngữ cho vùng lớn, chỉ giữ UDF ở vài ô cần tự cập nhật.
  • DVDFx lưu tạm kết quả theo bộ ba (đổi từ, đổi sang, ngày) trong %LocalAppData%\DVDAddin\fx_cache.json, mỗi kết quả giữ 1 giờ — 500 ô cùng cặp USD→VND chỉ tốn đúng 1 lần gọi mạng.
  • =DVDFx(A1,B1) với A1 = B1 trả về 1.0 ngay, không gọi mạng.

Đo được bằng chính công cụ của add-in ​

Nếu nghi chậm ở khâu in/xuất, đừng đoán — In hàng loạt in ra bảng phân tích thời gian ở cuối mỗi lần chạy (xem ngay dưới).

Tốc độ In hàng loạt ​

In hàng loạt chạy N vòng lặp; cuối lượt, add-in hiện báo cáo thời gian theo từng giai đoạn kèm phần trăm — nhìn vào là biết chỗ nào gây chậm:

⏱  Tổng: 45.12s
   • Ghi driver cell:       1.23s (3%)
   • Calculate:             8.45s (19%)
   • AutoFilter:            0.12s (0%)
   • Resolve+Select sheet:  2.34s (5%)
   • Auto-fit merge:        4.56s (10%)
       ↳ Pass1 baseline:    1.10s (2%)
       ↳ Pass2 per-merge:   2.90s (6%)  (318 merge)
       ↳ Pass3 apply:       0.56s (1%)
   • Export PDF|In:         28.40s (63%)
   • Gộp PDF (PdfSharp):    0.50s (1%)

Ba dòng ↳ Pass... chỉ hiện khi bạn bật tùy chọn tự canh chiều cao ô gộp. Dòng Gộp PDF chỉ hiện khi có tick gộp PDF thành một file.

Cách đọc báo cáo:

  • Calculate > 30% → bảng có công thức nặng. Bớt UDF, bớt hàm volatile, bớt công thức mảng trong các sheet được in.
  • Auto-fit merge > 20% → đang canh chiều cao cho quá nhiều vùng. Vùng cần canh được khai ở cột C của sheet Mucluc (dòng 5–104, tra theo tên sheet ở cột B) — hãy thu hẹp lại, chỉ giữ những vùng thật sự cần.
  • Export PDF|In ~60-70% → bình thường. Đây là phần Excel tự xuất file, add-in không tối ưu thêm được.
  • Ghi driver cell / Resolve+Select cao bất thường → workbook có quá nhiều sheet, hoặc tên sheet trong Sheet-print cell đang trỏ lộn xộn.

Ngoài ra, với vòng lặp dài, đừng gõ vào ô nào trong lúc lệnh đang chạy — Excel đang bận, thao tác của bạn sẽ xung đột với add-in.

Mức chiếm bộ nhớ ​

Phát hiện ​

Dùng Process Explorer (bộ sysinternals):

  • Thêm hai cột "Working Set" và "Private Bytes".
  • Theo dõi EXCEL.EXE theo thời gian.

Bộ nhớ tăng dần và không giảm sau khi đóng workbook → nghi có đối tượng COM không được giải phóng, từ một macro hoặc add-in nào đó.

Khoanh vùng ​

Tắt mọi add-in → mở file → đo bộ nhớ → bật lại từng add-in một → tìm add-in làm bộ nhớ phình ra.

Nếu khoanh được nguyên nhân về DVDAddin, hãy gửi kèm file (hoặc mô tả thao tác) qua kênh hỗ trợ trong hộp thoại Giới thiệu.

Tính đa luồng ​

Đa luồng có sẵn của Excel ​

File → Options → Advanced → Formulas → "Enable multi-threaded calculation":

  • Mặc định: theo số nhân CPU.
  • Có thể đặt cứng số luồng nếu muốn chừa CPU cho việc khác.

Lưu ý quan trọng: chỉ hàm có sẵn của Excel mới được tính song song. UDF của add-in (mọi hàm dvd...) chạy đơn luồng — thêm nhân CPU không làm chúng nhanh hơn. Đây là lý do "giảm số ô UDF" hiệu quả hơn mọi tinh chỉnh phần cứng.

Hàng đợi macro ​

Vài hàm phải đợi Excel rảnh mới làm được phần việc của mình. Một hàm đang tính thì không được phép sửa sheet, nên những hàm sau xếp việc vào hàng đợi và chạy ngay sau khi lượt tính kết thúc:

  • dvdAutoHide — ẩn/hiện dòng.
  • dvdPic — chèn ảnh vào ô.
  • dvdMVLookup, dvdMCLookup, dvdUniqueV — ghi các kết quả thứ 2 trở đi xuống outputRange (cách dành cho Excel 2016/2019 vốn không có mảng động — dynamic array).

Trong thực tế: đừng gõ dở dang trong một ô rồi chờ dvdPic vẽ xong ảnh — phải kết thúc việc nhập (Enter / Esc) thì hàng đợi mới chạy. Cũng vì vậy mà ba hàm ghi outputRange ở trên không hợp để rải hàng loạt: mỗi ô là một lượt ghi sheet phải xếp hàng sau lượt tính.

Giảm dung lượng file ​

Lưu dạng .xlsb ​

.xlsb (Excel Binary Workbook) có cùng tính năng với .xlsx nhưng lưu ở dạng nhị phân:

  • Dung lượng file nhỏ hơn đáng kể với workbook nhiều công thức.
  • Mở và lưu nhanh hơn.
  • Đôi khi không tương thích với các công cụ bên thứ ba đọc file Excel.

→ Nên cân nhắc .xlsb cho file lớn.

Dọn ô thừa ​

Workbook có ô trống ở dòng 1,000,000 (do dán nhầm) → Excel vẫn coi sheet là rất lớn.

Cách xử lý:

  1. Bấm Ctrl + End → con trỏ nhảy tới ô mà Excel coi là ô cuối.
  2. Nếu ô đó nằm xa hơn vùng có nội dung thật → có ô rỗng còn sót định dạng.
  3. Chọn các dòng/cột thừa → chuột phải → Delete.
  4. Lưu → đóng → mở lại → bấm Ctrl + End → giờ đã nhảy đúng vị trí.

Hai lệnh giúp dọn nhanh phần này: Xoá format không dùng và Xoá Cell Style ngoại lai (style rác đi theo file người khác gửi tới, thường lên tới hàng nghìn style thừa).

Nén ảnh ​

File → Compress Pictures → 96 ppi (email) hoặc 150 ppi (web).

→ Dung lượng giảm rất nhiều nếu workbook có nhiều ảnh. Với ảnh chưa chèn, dùng Chỉnh cỡ ảnh để xử lý hàng loạt trước.

Liên quan ​

Phát hành theo giấy phép DVDAddin.