Nên sử dụng hàm có sẵn hay là VBA??

Liên hệ QC

ThanhThao

Thành viên mới
Tham gia
19/7/06
Bài viết
49
Được thích
57
Hàm có sẵn trong Excel rất nhiều cho mọi ngành. Ta có thể lồng chúng với nhau để giải quyết bài toán nào đó. Tuy nhiên, không phải ai cũng biết được hết và có thể thực hiện được. Có người thường sử dụng VBA để lập cho tiện dụng.

Tôi mong ý kiến trao đổi của mọi người.
 
Theo ý kiến của em thì thế này:
Hướng giải quyết đầu tiên nên áp dụng các hàm có sẵn. Vì chắc chắn một điều là [1]SUM của Excel tốt hơn VBA_SUM (của người tự viết). Thực ra nếu chỉ sử dụng riêng lẻ các hàm thì cũng chưa giải quyết được việc gì, vấn đề ở đây là phải có cách để lập công thức phối hợp các phép toán, các hàm.
Lấy một vị dụ đơn giản
Cần tín tổng lương đặt tên là LUONG
=SUM(LUONG) tốt hơn là phải viết
Function VBA_Sum(Byval array as Range)
Dim oCell As Range
For Each oCell In array
If IsNumberoCell.Value)
VBA_Sum=VBA_Sum+oCell.Value
End If
Next
End Function

Bây giờ để tính tổng LUONG cho PHONGBAN (Phòng ban) là "KT"
=SUMIF(PHONGBAN,"KT",LUONG)
Nếu viết hàm VBA_SUMIF. Chắc chắn là phức tạp hơn vì trong FOR...NEXT ta phải kiểm tra IF CELLS(I,PHONGBAN)="KT" AND...IsNumber...Then VBA_SumIF=VBA_SumIF+oCell.Value

Nếu bây giờ cần tính tổng lương cho PHONGBAN="KT" và HĐLĐ từ ngày 01/06/06
=SUM(IF(PHONGBAN="KT",IF(HDLD>=Datevalue('01/06/06'),LUONG,0),0))

Đến mức này thì VBA_SUMIFIF chắc khó theo được

Vấn đề ở đây nếu cùng để giải quyết một vấn đề A thì thằng nào linh động nhất thì ta theo.

Nhưng có những bài toán mà không viết VBA thì khó mà làm được, nếu làm được thì cũng vỡ cả đầu.

Có bài toán này:
Lập sổ tổng hợp hàng hóa theo kho
Mã hàng| Tên hàng | Tồn đầu | Nhập | Xuất bán| Xuất KM | Xuất trả lại | Xuất khác | Tồn cuối |
Có 7-1=6 cột phải tính SUM có điều kiện theo từng mã, theo thời gian, theo kho...
Bảng dữ liệu có 2000 dòng, có 600 mã hàng

Theo bài toán trên thì dùng hàm sẽ là không tốt vì:
Phải có 600*6=3600 công thức tính SUM, trong mỗi công thức phải SUM một vùng 2000 dòng. Nhìn một cách thô nhất thì EXCEL phải đảm nhận khối tính toán là 3600*2000=7,200,000
lượt. Thực tế có nhiều mặt hàng xuất hiện ít lần trong sổ.
Nếu bài toán trên viết bằng VBA - Viết vòng FOR I=1 To 2000 cúng cách xử lý mảng (Dong,7) thì khối lượng tính toán giảm rất nhiều - Phương pháp tối ưu nhất nếu không so sánh với kỹ thuật T-SQL.

Biết viết VBA người dùng tự tin hơn khi bắt gặp các vấn đề phức tạp.
Biết VBA người dùng có thể hy vọng tự mình xây dựng được một ứng dụng tốt cho chính mình và cho người khác.
 
??

Theo tôi dĩ nhiên dùng hàm sẵn có của Excel thì tốt hơn.

Lê Văn Duyệt
 
Dùng hàm của excel thì là lựa chọn số 1. Như trường hợp của TuanVNUNI thì tôi vẫn thường dùng sumproduct, dữ liệukhoảng 15ngàn dòng; khoảng 300 mã hàng thì việc tính toán rất nhanh (chỉ để lại dòng đầu tiên, các dòng sau là copy dán giá trị).
Tuy nhiên có những lúc không dùng VBA không được (vòng lặp chẳng hạn), hay dùng VBA thì tốt hơn nhiều (macro chẳng hạn).
Tôi nghĩ các hàm của excel như con dao nhỏ, VBA như con dao lớn. Tùy từng lúc ta dùng dao lớn hay dao nhỏ.
Vì thế đó là tùy chọn của mỗi người, mỗi trường hợp.
 
Web KT

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

Back
Top Bottom