Giải pháp về tốc độ xử lý bảng tính nhanh

Liên hệ QC

handung107

Thành viên gắn bó
Thành viên danh dự
Tham gia
30/5/06
Bài viết
1,630
Được thích
17,436
Nghề nghiệp
Bác sĩ
TuanVNUI​

Excel cung cấp cho chúng ta rất nhiều hàm để làm, chúng thuộc các nhóm hàm thống kê, tài chính, tìm kiếm, toán học,...ta không dùng nó một cách độc lập mà thường phối hợp để cho ra những công thức, chúng ta đều đa số tự đắc chiêm ngưỡng thành quả của mình qua các hàm của Excel đó và cứ thế tin tưởng mải miết lập công thức rồi đế một ngày ta nhìn thấy thông báo trạng thái Calculation 1-100% ->Cần có một giả pháp tăng tốc cho Project của mình!
Vấn đề này hết sức quan trọng, nó là một trong những vấn đề quan tâm hàng đầu với bất kỳ ai đang làm việc với Excel một cách nghiêm túc. I cũng đã từng gặp chuyện này như các bạn và cũng đã từng nghĩ hơi "tiêu cực" về Excel nhưng cuối cùng I vẫn yêu nó.
I xin đưa ra một chút kinh nghiệm trong xử lý về tốc độ:
1-Cách chọn Hàm:
Bạn hãy nên chọn hàm nào tối ưu nhất để làm, điều này thật là mù mịt để biết đâu là tối ưu? Chúng ta nên tham khảo mọi người đã làm có kinh nghiệm, có rất nhiều người trong EFC cho ta lời khuyên như chị Handung107 vẫn khuyên mọi người nên dùng Sumproduct(,..) hơn là {=Sum(If(,..))}-công thức mảng, trong quá trình làm rồi ta cũng rút được nhiêm thêm thôi.
I xin đưa thêm cách lựa chọn cho các bạn. Nếu bạn cần lập sổ chi tiết đại loại có dùng hàm trích lọc như Offset, Index, Lookup, Hlookup,Choose,...Các hàm này nếu bạn phải copy cho nhiều dòng thì nó không phải là giải pháp tốt, riêng I thì không dùng các hàm này mà chỉ dùng IF,And,Or sau đó kết hợp với Autofilter tốc độc thực sự nhanh hơn nhiều nhưng đổi lại file của tôi dung lượng lại tốn hơn. Khi dùng các hàm như Index(RowID,ColID,VUNG), Hlookup(Valuefind,VUNG,col,kind),..Ham(,,VUNG..) tức là các hàm phải dùng tham số là một vùng thì mỗi một hàm nó cần phải xử lý quét từng dòng trong VUNG, nếu VUNG mà có nhiều dòng thì càng chậm. Bạn thử hình dung xem nếu một bảng tính, trong một ô I đặt công thức có 1 hàm Index và 1 hàm Hlookup nếu VUNG của ta có 100 dòng, lúc này một công thức trong ô Excel phải quét 2*100=200 lệnh (đại lọai như vậy), công thức này ta lại copy cho 50 dòng vậy tổng lượt quét là 200*50=10000 bạn có thể coi đây la số phép tính. Nếu I dùng hàm IF, And, Or thì I chỉ mất đúng 100 phép tính (100 là số dòng của VUNG), sau đó dùng Autofilter lọc ra những dòng có giá trị. Tại sao chỉ như vậy? Bởi I cùng phép so sánh "ngang bằng" [ =If(VUNGSheet!A1="NHAPKHO",VUNGSheet!C1,0) và copy theo số dòng có trong VUNGSheet, không hề có một VUNG nào tham gia mà chỉ là so sánh dòng=dòng]. Máy tính dù tốt đến mấy, EXCEL dù thông minh đến mấy nhưng ta so sánh số phép tính 100 và 10000 trên cùg một máy tính đó và cùng version của EXCEL thì thấy cái gì là giải pháp.
2-Giữ lại dòng đầu tiên có công thức:
EXCEL làm chúng yêu thích nó một phần là do tính "động đậy". Trong công thức ở Sheet1!A1 mà có Sheet2!A1, trong công thức ở Sheet2!A1 có Sheet3!A2,trong công thức ở Sheet3!A2 có Sheet4!A1 nếu I thay đổi giá trị ở Sheet4!A1 thì tất cả các Sheet có liên quan đều bị thay đổi. Như vậy tại sao mà nó thay đổi giá trị ở các Sheet? Vì EXCEL có sự kiện Automantic-nó sẽ lìm tất cả các mối liên hệ từ thời cụ kỵ đến nay có dòng huyết thống và tính lại tất cả các công thức mà một thành viên có. Trong tình huống trên thì từ các ô từ Sheet1->Sheet3 đều phải tính lại, nếu trong mỗi Sheet mà các ô lại liên kết (Link) với nhau thì bạn hãy lấy máy tính cá nhân để nhân số phép tính mà EXCEL phải tính lại sau mỗi một giá trị thay đổi (Các đối tượng không chung huyết thống thì được bỏ qua). Đó là nguyên nhân tốc độ máy tính chậm!
Một vấn đề như sau: giả sử I có 6 sổ. 1-Sổ chi tiết131;2-Sổ Tổng hợp 131; 3-Sổ cái; 4- Báo cáo Thuế; 5-Cân đối TK;6-Cân đối kế toán các sổ này được liên kết với nhau. Hàng ngày I chỉ quan tâm tới công nợ "131" như thế thì thường xuyên dùng 2 sổ 1-Sổ chi tiết131 và 2-Sổ Tổng hợp 131 còn tất cả các sổ kia I cần xem nó vào cuối tháng. Nếu chúng ta cứ để công thức ở tất cả các sổ thì thật lãng phí vì chúng ta chỉ xem có 2 sổ thôi, vậy nên giữ lại công thức ở 2 sổ còn các sổ khác để lại công thức ở dòng đầu tiên rồi xóa hết công thức ở các dòng dưới-> sẽ tiết kiệm được dung lượng của file và giảm số phép tính mà EXCEL phải Refresh lại sau mỗi giá trị thay đổi->Tốc độ được cải thiện tốt! Khi cần xem số liệu ở các sổ đã xóa bạn chỉ cần copy công thức dòng đầu là xong.
Nếu các báo cáo thì chúng ta nên copy công thức tới các dòng rôi Pastevalue, như vậy vẫn giữ được giá trị mà không gây ảnh hưởng tới tốc độ máy tính vì ta đã ngắt liên kết.
3-Chọn thuộc tính Automantic/Menual trên EXCEL:
Nếu dữ liệu mà ít thì bạn nên để Automantic, khi nhiều thì nên chọn Menual khi nào cần Refresh thì chọn Automantic sau khi được update thì chọn lại Menual.
Để làm được điều nàu bạn vào menu Tools\Options->Calculation
 
Giải pháp về tốc độ xử lý bảng tính nhanh (tiếp)

4-VBA chọn Application.ScreenUpdating=True/False :
Khởi đầu một Sub hay Function bạn nên chọn Application.ScreenUpdating=False lúc này mọi sự thay đổi trên các Cell (ô) tạm thời EXCEL không vẽ ra mà để sức lực cho việc phân tích nhưng các biến hệ thống vẫn nhận giá trị, cuối mỗi Sub hay Function cần phải có Application.ScreenUpdating=True. Việc làm này tưởng đơn giản nhưng trong một tập hợp nhiều dòng lệnh nếu không khéo nó sẽ làm cho kết quả bị sai (thường bị khi Copy công thức rồi Pastevalue/không phải Value thực)
Một cấu trúc mà I vẫn thường dùng:

'=========================
Sub Thutuc()
Dim OldSCR as Boolean
OldSCR=Application.ScreenUpdating

If Application.ScreenUpdating=False then
Application.ScreenUpdating=False
End If

Dòng lệnh 1
..........
Dòng lệnh n

If Application.ScreenUpdating<>OldSCR then
Application.ScreenUpdating=OldSCR
End If

End Sub

'=========================
Sub MainThutuc()
Dim OldSCR as Boolean
OldSCR=Application.ScreenUpdating

If Application.ScreenUpdating=False then
Application.ScreenUpdating=False
End If

Dòng lệnh 1

Thutuc

Lenh 2
..........
Dòng lệnh n

If Application.ScreenUpdating<>OldSCR then
Application.ScreenUpdating=OldSCR
End If

End Sub
'=========================

Như cấu trúc trên thấy trong MainThutuc có Thutuc nhưng khi Thutuc kết thúc nó vấn đảm bảo cho MainThutuc có môi trường ban đầu-Bảo toàn môi trường cũ. Nếu chúng ta không khéo léo thì sẽ làm cho cái này phá cái kia.
5-VBA chọn Application.EnableEvents = True/False :
Application.EnableEvents là biến hệ thống của Excel Application (Excel Property) kiểu Boolean.
Application.EnableEvents =False thì các Sub sự kiện của Excel ngừng hoạt động
Application.EnableEvents =True thì các Sub sự kiện của Excel hoạt động lại bình thường.

Một trong các sub sự kiện quan trọng liên quan tới quá trình biến động của Sheet, Cell trên bảng tính:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)

End Sub

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)

End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

End Sub

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)

End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

End Sub

Trong các Sub nếu có các lệnh làm thay đổi giao diện, giá trị ô, Select (dịch chuyển Sheet/Cell) lúc đó tất cả các sự kiện nêu trên của EXCEL đều thực hiện. Thật không hay nếu trong các Sub trên lại có các lệnh.
Vậy bạn nên dùng Application.EnableEvents. Bạn có thể dùng theo cách như Application.ScreenUpdating.
I cảnh báo rằng, nếu bạn không xử lý tốt ngữ cảnh thì hệ thông EXCEL của bạn sẽ bị tê liệt toàn bộ lúc đó bạn phải thoát khỏi EXCEL hoặc một cách nào khác như gọi một Sub có lệnh Application.EnableEvents=True (Việc này không dễ thực hiện khi Project đã đóng gói).
6-VBA Xử lý toàn bộ tình huống:
Khi viết Sub/Function một số tình huống ta chưa đưa ra khi đó có thể Excel sẽ báo lỗi "Run-time". Theo cách thông thường người ta dùng bẫy lỗi "On Error ..." nhưng việc này sẽ làm cho tốc độ xử lý của EXCEL bị giảm, dùng "On Error ..." chỉ là giải pháp tùnh thế tạm thời, bạn nên phân tích mọi tình huống sảy ra, cuối cùng mới dùng "On error..."
7-VBA Bộ nhớ bị chiếm dụng :
Khi viết lệnh mọi ngượi thận trọng các việc sau:
Khai báo Biến/Sub/Function: đừng tùy tiện khai báo Public nó sẽ làm cho bộ nhớ bị chiếm dụnh
Dùng biến Object/Class: Khi chúng ta tạo một đối tượng trên VB/VBA dùng lệnh Set Oj=Object/Class, khi đã dùng xong hãy nhớ viết thêm Set Oj=Nothing để hòan trả biến nhớ.
8-VBA Xử lý thuật toán tốt:
Vấn đề này I đã viết trong một topic nào đó rồi các bạn có thể tìm lại.

Trên là một chút kinh nghiệm I rut ra từ bản thân có thể chưa hòa tòa chính xác, mọi người có giải pháp náo xin đưa tiếp ra.
 
Hai2Hai Post :

Mấy cái Tuân nói đều đúng...trừ cái câu này:
6-VBA Xử lý toàn bộ tình huống:
Khi viết Sub/Function một số tình huống ta chưa đưa ra khi đó có thể Excel sẽ báo lỗi "Run-time". Theo cách thông thường người ta dùng bẫy lỗi "On Error ..." nhưng việc này sẽ làm cho tốc độ xử lý của EXCEL bị giảm, dùng "On Error ..." chỉ là giải pháp tùnh thế tạm thời, bạn nên phân tích mọi tình huống sảy ra, cuối cùng mới dùng "On error..."

Mấy cái On Error... thì ko làm code chạy chậm đến mức ko thể chấp nhận được. Ngôn ngữ lập trình nào cũng nên viết bẫy lỗi. Đó là nguyên tắc lập trình rồi. Ở chỗ tôi ko viết code theo chuẩn thì sẽ bị bắt viết lại (vì bắt buộc phải qua khâu Xem xét mã nguồn (Coding Review) mà)

bạn nên phân tích mọi tình huống xảy ra, cuối cùng mới dùng

Cái này thì lại đúng : ) (Cái đó người ta hay gọi là...vét cạn mọi tình huống xảy ra với từng dòng lệnh mình định viết.

If Application.ScreenUpdating=False then
Application.ScreenUpdating=False
End If

Đoạn này ko hiểu lắm :). Đùa thôi. Chắc vội quá Tuân viết nhầm
à, nhân tiện về cái lệnh kiểu If a = True Then hoặc If a = False Then
thì các bạn nên viết như thế này cho nó chuyên nghiệp (ko những chuyên nghiệp mà còn tăng tốc độ, đố các bạn chứng minh được tại sao đấy : ))

If a Then '// tương đương với If a = True Then
If Not a Then '// tương đương với If a = False Then

Thông thường, 1 quá trình tính toán dài, tốn nhiều resource của PC thì hay làm đờ máy vì thực ra trong quá trình chạy đó có rất nhiều thứ đang thực hiện (như refresh (paint) cái màn hình chẳng hạn,...). Chính vì vậy mới có cái tip như Tuân nói.

Thông thường thì người ta hay làm như sau:
1. Dùng 1 lệnh nào đó có trong ngôn ngữ lập trình để "Lock" lại các controls (vì mỗi control thường là 1 window (trừ cái label,...) và các controls đó nó thường Paint liên tục. Trong trường hợp VBA thì Tuân dùng Application.ScreenUpdating=False, còn ở VB thì dùng API, ko nhớ lệnh nào nữa... nhưng search cái chắc ra ngay. Một số Grid như VS FlexGrid cũng có riêng cái method để ko paint grid.
2. Thực hiện 1 (vài) câu lệnh mà tốn nhiều resources như LoadDatatoGrid, to Treview, Listview,... Long time transactions,....

3. Paint lại các window (controls, active form) (trong VBA thì Application.ScreenUpdating=True)

Nếu thấy những điều tớ nói...lằng nhằng phức tạp quá thì bỏ qua nhé. Còn nếu vẫn muốn tìm hiểu thêm thì nên đọc về Windows Programming (có sách này đấy - hoặc vào MSDN mà search)
 
Theo tôi, máy tính bây giờ có tốc độ cao nên việc xử lý bảng tính nhanh hay chậm thì cũng không ảnh hưởng lắm.
 
ThanhThao đã viết:
Theo tôi, máy tính bây giờ có tốc độ cao nên việc xử lý bảng tính nhanh hay chậm thì cũng không ảnh hưởng lắm.

bác đã bao giờ có tính một bảng tính gồm khoảng hơn 10 cột và vài chục dòng mà tất cả các ô trong đó đều có công thức và toàn là những công thức "hạng nặng" (như sumif, sumproduct, công thức mãng...) bác sẽ hiểu là nó tính lâu thế nào.
 
ThanhThao đã viết:
Theo tôi, máy tính bây giờ có tốc độ cao nên việc xử lý bảng tính nhanh hay chậm thì cũng không ảnh hưởng lắm.

Cái này thì bạn sai hoàn toàn rồi.
Nếu bạn không viết khéo, không design khéo thì ứng dụng của bạn chạy khoảng 10 lần là hết mọi resources, memory, cpu usage của windows.

Chính vì thế mà trong lập trình mới có những khái niệm gọi là Turning, Optimizing, v.v...

Đó là còn chưa kể khi viết ra ứng dụng thì nghĩa là nhiều người dùng. Mà đã nhiều người dùng thì có người có máy tính mạnh, có người có máy tính chậm. Vì thế vẫn phải test trên máy có cấu hình thấp nhất mà vẫn chấp nhận được. Cái này người ta gọi là Test trên mọi môi trường (1 trong vô vàn các khái niệm test đấy).

Cái việc Turning kia thực sự mà nói ko phải ai cũng làm được đâu bạn ạ. Thông thường những người làm công việc đó phải là những master về những gì mình làm (và vì vậy mình mới ko nói tiếp :) nữa vì sợ nói quá đà).

Về vấn đề Excel, Bạn hãy thử dữ liệu về hàng hóa trên 200,000 mặt hàng (như thế cũng ko phải là nhiều đâu, có nơi phải xử lý trên 10tr bản ghi hoặc thậm chí nhiều hơn nữa nhưng cái đó ngoài tầm Excel mất rồi). Sau đó bạn lập 1 cái báo cáo Kho lấy từ 200,000 mặt hàng đó và rồi thử Save lại xem máy có save nhanh không nhé.

Máy của mình P4, ~3Ghz, 1Gb RAM (cũng ko quá chậm mà cũng ko quá nhanh) mà đang chạy ì ạch mấy file Excel đây này.
 
Nghe các bác nói em sợ quá!

Không nghĩ là bên lĩnh vực TC-KT phải xử lý khối lượng công việc nặng nề vậy.
Ngất!!!! :,
 
PhanTuHuong đã viết:
Nghe các bác nói em sợ quá!

Không nghĩ là bên lĩnh vực TC-KT phải xử lý khối lượng công việc nặng nề vậy.
Ngất!!!! :,

Hiện nay phần mềm kế toán của bên mình trên Excel đang phải đương đầu làm những việc như vậy. Chuyện là có thật chứ ko phải bịa. Khách hàng đang kêu kia kìa. Bạn cứ thử bán chương trình cho cửa hiệu thuốc hoặc các siêu thị (cỡ nhỏ thôi) xem họ có bao nhiêu mặt hàng nhé. Mình mới test thử "tạm" 1 kho của họ đã lên tới 23,000 mặt hàng rồi.

Ngay cả các file excel kế toán trước kia trên wkt mới chỉ có khoảng hơn 10Mb thôi mà mở ra chậm kinh khủng (chứ đừng nói là save). Có lẽ bạn chưa thử đấy thôi.

Còn những vấn đề quá kỹ thuật thì tớ đã sorry rồi mà. Ai thích thì đọc thôi.

Nhưng mà chủ đề này mà để ở Excel căn bản thì chắc "Ngất" cùng là phải thôi.

Hình ảnh ví dụ:
InventoryItemList.JPG
 
Lần chỉnh sửa cuối:
Các Bác Bàn Luận Sôi Như Thùng Nước Lèo,em Nghe Phát Thèm.
Mạo Muội Xin Góp Tí,bác Handung107 Nói Rất đúng,nếu Biết Phối Hợp Tất Cả Mọi Thủ Thuật Em Nghĩ 200.000 Mặt Hàng Là Chuyện Nhỏ.
 
ThanhThao đã viết:
Theo tôi, máy tính bây giờ có tốc độ cao nên việc xử lý bảng tính nhanh hay chậm thì cũng không ảnh hưởng lắm.
Vấn đề này mình đã mắc phải rồi, Bảng tính tổng hợp chứa nhiều công thức sẽ làm tăng dung lượng file Excel và tốc độ tính toán ì ạch, hơn nữa, làm cho mình sử dụng thì được chứ làm cho...darling dùng thì tèo. lúc đó chỉ còn cách ngồi ao ước có một "chú máy tính" tốc độ ...vài trăm Gz. cám ơn những chia sẻ của diễn đàn.
 
ThanhThao đã viết:
Theo tôi, máy tính bây giờ có tốc độ cao nên việc xử lý bảng tính nhanh hay chậm thì cũng không ảnh hưởng lắm.

Tôi chấp chiếc máy tính của bạn là P4, 3.2G, RAM 1G luôn đấy! Tôi có rất nhiều file thuộc dang hạng nặng và tôi dám cá với bạn rằng nếu bạn mở nó lên mà nó ko treo máy mới lạ đấy!...
Chúng ta chỉ thật ko quan tâm đén tốc độ khi dử liệu tương đối ít thôi... Từ 5000 dòng dử liệu trở lên thì phải tính toán cho thật kỷ, làm sao hạn chế dc số phép tính như handung107 đã nói... Cái này tôi đã từng gặp mấy lần rồi...
Với handung107: Bạn có thể chế tác ra 1 vài VD, trong đó nêu lên vài cách làm... và phân tích xem cách nào là tối ưu về tốc độ nhất dc ko?... Cái này thât sự bổ ích đây!...
Với bản thân tôi thì tôi quan tâm đến tốc độ trước tiên, tiếp theo mới đến dung lượng... Nếu ko thể tối ưu hóa dc dung lượng file thì ít nhất cái file ấy khi mở ra phải... vèo vèo...
Mến
ANH TUẤN
 
Thường tôi giải quyết vấn đề này như thế này:
- Đối với bảng tính có số mẫu tin không nhiều (<2000) tôi dùng trực tiếp các hàm của Excel, nếu phép tính quá phức tạp thì viết thêm hàm.
- Đối với bảng tính có số mẫu tin lớn, tôi dùng VBA viết 1 Sub, trong đó bao gồm tất cả các phép tính phục vụ cho nó. Sau khi nhập dữ liệu xong, cần in hay lọc dữ liệu để báo cáo, chạy sub để cập nhật kết quả.
Ví dụ một dữ liệu có 20 trường và 5000 mẫu tin, trong đó có 10 trường là dữ liệu đầu vào (TruongA) phải nhập trực tíếp vào bảng tính và 10 trường là các phép tính (Truong B) lấy dữ liệu từ 10 trường đầu vào.
- Nếu bạn nhập công thức vào tất cả Truong B, bảng tính bạn sẽ có 100.000 ô có dữ liệu, trong đó có 50.000 ô công thức. Dung lượng tập tin tăng đáng kể. Nếu Excel tự động tính tóan lại, việc nhập dữ liệu rất chậm.
- Nếu sử dụng VBA, bảng tính bạn cũng có 100.000 ô có dữ liệu (không phải công thức). Chỉ khi nào cần cập nhật, VBA sẽ cập nhật. bạn nhập dữ liệu nhanh hơn.
 
Chúng ta chỉ nên sử dụng Hàm viết bằng VBA để cho ra một chỉ tiêu, còn nếu dùng Hàm này để lập cho một bảng báo cáo thì không nên! Như bạn pham_duy_long nói đúng, để lập một báo cáo mà nguồn dữ liệu lớn, nên viết một Sub để làm cả bảng luôn. Việc viết trên VBA tốc độ có nhanh hay không là phụ thuộc vào thuật toán nhiều.
 
Đối với việc sử dụng công thức cũng có cách hạn chế phép tính... Chẳng hạn khi dùng Combox hoặc data validation đễ lấy ra dử liệu theo 1 d/k nào đó... Đễ ý rằng dử liệu cần lấy chỉ nằm trên 1 phần của mãng, trong khi việc tính toán thì phải quét toàn bộ mãng... Lúc này ta nên dùng Offset đễ giới hạn mãng là tốt nhất (như thế thay vì nó phải quét 2000 dòng, khi dùng Offset rất có thể chỉ cần quét 100 dòng mà thôi)
Mến
ANH TUẤN
 
mình có 1 file liên kêt rât nhieu, nhieu ham,nhieu ô xu lí rat cham nho cac ban giup dum
 
Lần chỉnh sửa cuối:
lamvudung đã viết:
mình có 1 file liên kêt rât nhieu, nhieu ham,nhieu ô xu lí rat cham nho cac ban giup dum
Mình nghĩ chỉ có cách là bạn gởi file đó lên để mọi người xem qua nó là gì mới có thể tối ưu file được
Mến!
 
Nhắn với handung107: Bạn có thể làm 1 vài file VD liên quan đến vấn đề "tốc độ" dc ko?... Trong file phân tích rõ tại sao lại làm như vậy... Có thế thì sẽ trực quan hơn đấy!... Đối với bạn và 1 số cao thủ cùng trình độ có thể nói sơ cái là hiểu dc ngay... nhưng những người như chúng tôi thì thật sự khó hình dung lắm bạn à!
Giúp nhe! Cám ơn!
ANH TUẤN
 
file excel dung lượng lớn, chạy chậm.

Tôi có một file excel mới viết xong nhưng dung lượng lớn quá và tốc độ chạy chậm, mình đã cố hết sức để giảm bớt công thức nhưng mà vẫn không ăn thua. Các bạn có cách nào giúp với. Minh sẽ gửi kèm file. Cảm ơn các bạn rất nhiều.http://www.mediafire.com/?9qx36nd2rfsf86t
 
Tôi có một file excel mới viết xong nhưng dung lượng lớn quá và tốc độ chạy chậm, mình đã cố hết sức để giảm bớt công thức nhưng mà vẫn không ăn thua. Các bạn có cách nào giúp với. Minh sẽ gửi kèm file. Cảm ơn các bạn rất nhiều.http://www.mediafire.com/?9qx36nd2rfsf86t

Bạn tham khảo bộ sổ kế toán SQL nhé. Rất nhiều sổ nhưng file chạy nhanh.
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom