Em cũng đang theo dõi để coi cách dùng. Toán tử [ ] với em hơi lạ. Sáng thấy bài mới đi tìm hiểu.
Có lẽ giờ này bạn đã tìm hiểu xong.
Tôi chỉ ra đây cho các bạn chưa tìm ra:
Toán tử [ ] là một cách viết tắt của hàm Evaluate. Tuy nhiên vì nó mặc đinh không gian trình dịch (trình dịch VBA dùng cách dịch đặc biết khi gặp toán tử []) cho nên chỉ có thể sử dụng được với các điều kiện sau:
- bên trong nó là câu biểu thức viết in hệt như biểu thức trên worksheet.
- nó không nhận bất cứ cái gì không phải là hằng.
- nó chạy chậm hơn Evaluate một chút.
- vì là hàm bảng tính cho nên nó luôn luôn theo luật bảng tính. Điển hình nếu bạn dùng nó để dựng mảng thì mảng bắt buộc là (1 To n). Không bao giờ là (0 To n) như hàm Array của VBA.
- nếu dùng để xác định range (như vế bên trái của bài #1), thì nó chậm hơn hàm Range. Giải thích: Hàm range là hàm VBA, hàm Evaluate là hàm bẳng tính. Phần lớn các trường hợp, hàm VBA chạy nhanh hơn hàm bảng tính.
Evaluate cũng là hàm bảng tính. Sự thực nếu bạn gọi hàm này với tiền tố Worksheet (Ví dụ Sheet1.Evaluate) thì sẽ chạy nhanh hơn một chút.
Vì là hàm chính chắn cho nên Evaluate nhậ tham số một cách chính chắn chứ không qua cách dịch đặc biệt như [].
Tham số để nạp vào Evaluate là một string. Vì vậy hàm này uyển chuyển hơn. Cần tính gì bạn chỉ việc nắn cái string tham số cho đúng ý, rồi nạp vào.
Ví dụ: bạn khai báo một mảng 3 phần tử 2, 4, 6 với [ ]
a = [ { 2, 4, 6 } ]
Cách khai báo mảng trong bảng tính là { hằng1, hằng2,... }. Bạn hoàn toàn khong có cách nào khác.
Với Evaluate, bạn có thể:
For i = 1 to 3
s = s & "," & i*2
Next i
a = Evaluate( "{" & MId(s, 2) & "}" )
Dĩ nhiên là tôi chọn ví dụ cho các bạn thấy cách khai báo 1 gọn, đẹp hơn; nhưng cách khai báo 2 cho phép bạn dùng các con toán phức tạp để nạp các phần tử cho mảng.
Trở lại vấn đề tôi nêu ra ở bài #4. Đây là trường hợp đặc biết. Hàm Evluate dùng cho phép tính đơn gian và mảng một chiều như vậy nhanh hơn vòng lạp tính bằng hàm VBA.. (hiện hại tôi cũng chẳng hiểu tại sao, chỉ nghe nấy thằng gu ru Excel nói vậy)