Khi làm việc với các phép toán trong VBA, nếu các kiểu dữ liệu không tương thích, có thể dẫn đến lỗi hoặc kết quả không mong muốn. Ép kiểu giúp tránh những lỗi này.
Một số kiểu dữ liệu có độ chính xác cao hơn những kiểu khác.
Ví dụ, kiểu Double có độ chính xác cao hơn kiểu Integer. Khi làm việc với số thực hoặc các phép toán phức tạp, bạn cần ép kiểu đúng để tránh mất mát dữ liệu hoặc sai sót trong tính toán.
Ví dụ 1: Lỗi tính toán mất số thập phân khi bạn chưa rõ về ép kiểu dữ liệu VBA
Dim a As Double
Dim b As Integer
a= 10.15
b= a
Ví dụ 2: Lỗi tính toán không thực hiện được phép tính khi bạn chưa rõ về ép kiểu dữ liệu VBA
Dim a As String
Dim b As String
a = 2
b = 3
MsgBox a + b
Giải thích:
Mặc dù a và b được khai báo là kiểu chuỗi (String), nhưng VBA tự động chuyển đổi các giá trị số (2 và 3) thành chuỗi khi gán cho chúng. Do đó:
a sẽ có giá trị chuỗi "2".
b sẽ có giá trị chuỗi "3".
Trong VBA, dấu + có thể được sử dụng để cộng chuỗi và làm việc như phép nối chuỗi (concatenation), thay vì phép cộng toán học khi cả hai biến đều là chuỗi.
Do đó, a + b sẽ nối hai chuỗi "2" và "3", cho kết quả là chuỗi "23".
VBA cung cấp các hàm để ép kiểu từ kiểu này sang kiểu khác. Một số hàm ép kiểu phổ biến bao gồm:
CInt: Chuyển đổi sang kiểu Integer.
CLng: Chuyển đổi sang kiểu Long.
CDbl: Chuyển đổi sang kiểu Double.
CStr: Chuyển đổi sang kiểu String.
CDate: Chuyển đổi sang kiểu Date.
CVar: Chuyển đổi sang kiểu Variant (mặc định trong VBA).
Ví dụ một tình huống khá phức tạp trong lập trình nếu bạn không nắm rõ nguyên lý ép kiểu:
Dim num As Integer
Dim str As String
Dim dbl As Double
str = "123.45"
num = CInt(str) ' Chuyển chuỗi thành Integer
dbl = CDbl(str) ' Chuyển chuỗi thành Double
Kết quả sẽ khác nhau tùy vào cấu hình máy tính về dấu ngăn cách nhóm số và dấu ngăn cách thập phân.
Sẽ có 2 tình huống xảy ra:
Máy tính bạn đang cấu hình dạng: 1,234,567.00
num = 123 ' .45 được xem là số thập phân nên khi ép sang int bị bỏ đi.
dbl=123.45
Máy tính bạn đang cấu hình dạng: 1.234.567,00
num = 12345 ' dấu . là ngăn cách nhóm số nên đã xóa đi
dbl=12345 ' dấu . là ngăn cách nhóm số nên đã xóa đi
VBA sẽ tự động ép kiểu trong nhiều trường hợp. Tuy nhiên, khi bạn chuyển từ một kiểu lớn sang một kiểu nhỏ hơn (như từ Double sang Integer), bạn có thể mất dữ liệu.
Ví dụ ép kiểu VBA tự động:
Dim x As Double
Dim y As Integer
x = 9.75
y = x ' VBA sẽ ép kiểu x từ Double sang Integer (y = 9)
Tìm kiếm:
Làm phần mềm Excel bạn hay gặp các trường hợp tính toán kết quả khác nhau cho dù bạn đã nghĩ rằng sẽ đúng, nhưng lý do là do ép kiểu dữ liệu trong VBA Excel chưa đúng.