Ép kiểu dữ liệu trong VBA

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.

  1. Tại sao phải ép kiểu trong VBA Excel
  2. Một số cách để ép kiểu trong VBA

1. Tại sao phải ép kiểu trong VBA Excel

Tránh lỗi trong quá trình tính toán

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.

Ép kiểu trong VBA

Đảm bảo tính chính xác trong các phép toán

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 

' Giá trị b đã bị mất phần thập phân, chỉ còn 10

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".

2. Một số cách để ép kiểu trong VBA

Sử dụng CType (hoặc các hàm ép kiểu cụ thể)

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

Ep kiểu tự động trong VBA

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)

Chú ý khi làm phần mềm excel với phương pháp ép kiểu tự động dễ gây ra mất dữ liệu và tính toán sai:

    Nếu bạn cố gắng ép kiểu không hợp lệ, ví dụ như chuyển một chuỗi không phải số sang kiểu số, VBA sẽ gây lỗi runtime.
    Để tránh lỗi, bạn có thể kiểm tra dữ liệu trước khi ép kiểu, sử dụng các hàm như IsNumeric hoặc IsDate.

 

Tìm kiếm:

Bài viết liên quan:

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.