Biến, hằng và kiểu kiểu trong VBA

Biến là gì ? hằng là gì và kiểu kiểu biến trong VBA sử dụng như thế nào cho hợp lý.

  1. Biến trong VBA là gì?
  2. Các bài tập về biến trong VBA Excel
  3. Cú pháp khai báo biến VBA
  4. Các nguyên tắt khai báo biến trong VBA
  5. Phạm vi của biến trong VBA
  6. Vòng đời của biến trong VBA
  7. Kiểu dữ liệu biến và hằng trong VBA
  8. Hằng trong VBA là gì?
  9. Bài tập phần mềm thực tế về biến trong VBA

1. Biến trong VBA là gì?

Định nghĩa biến là gì ?

biến là biến đổi, còn gọi là sự thay đổi, thay đổi ở đây là giá trị.

Trong thế giới lập trình biến được gọi 1 vùng bộ nhớ để lưu các giá trị cần thiết, khi phần mềm chạy làm một công việc nào đó thì biến được tạo ra để lưu vào bộ nhớ giúp cho việc tính toán.

Ví dụ vba đơn giản như sau: bạn viết 1 phần mềm tính tổng 2 số thì bạn cần tạo ra 2 biến để lưu 2 số cần tính tổng.

a=2
b=10
Msgbox a+b

Cách hoạt động của biến với máy tính

Như vậy máy tính làm gì với 3 dòng lệnh VBA trên ?

a=2 : Phần mềm VBA sẽ yêu cầu máy tính cấp phát 1 vùng bộ nhớ có tên là a, để lưu trữ số 2
b=10: Phần mềm VBA sẽ yêu cầu máy tính cấp phát 1 vùng bộ nhớ có tên là b, để lưu trữ số 10
Msgbox a+b : Phần mềm VBA sẽ truy xuất bộ nhớ tên a,b từ máy tính và cộng kết quả 2 số lại và in ra màn hình.

3 dòng lệnh VBA trên thì dòng nào là dòng khai báo biến ?

Bạn có đặt câu hỏi là khi VBA chạy qua lệnh a=2,b=10 thì biến này lưu vào RAM hay lưu vào ổ cứng ?
Khi Msgbox a+b thì phần mềm VBA truy xuất biến a,b ở đâu ? là RAM hay ổ cứng

2. Các bài tập về biến trong VBA Excel

Bài tập VBA 1

bạn hãy viết 1 đoạn code VBA có khai báo biến
Biến a, gán giá trị cho a là 20
Biến b, gán giá trị cho b là 2
Iin kết quả: chia biến a cho biến b.

Bài tập VBA 2

bạn hãy viết 1 đoạn có khai báo biến
Biến a, gán giá trị cho a là 10
Biến b, gán giá trị cho b là 20
Biến c, gán giá trị biến c là giá trị biến b chia cho 2
In kết quả: biến a nhân biến b, lấy tổng giá trị 2 biến a và b chia cho giá trị biến c

Bài tập VBA 3

viết 1 đạn code khai báo biến
Biến a, gán giá trị cho biến a là TRAN VAN
Biến b, giá giá trị cho biến b là D
Msgbox a+b sẽ cho ra kết quả như thế nào ?

Cũng như ví dụ 3, ta đổi là a gia tri là NGUYEN VAN, b giá trị BINH

Thì kết quả in ra NGUYEN VANBINH, bạn có nhận ra sự bất cập gì không, và cách sửa lại ?

Qua bài 3, bạn rút được điều gì ?

- Điều 1:?
- Điều 2: ?

3. Cú pháp khai báo biến VBA

Trong VBA, có 2 cách khai báo biến hay sử dụng:

Dạng khai báo ngầm( Implicitly )

a=2

* là khai báo dạng ngầm

Dạng khai rõ ràng ( Explicitly ).
dim a as Interger
* là dạng rõ ràng ( Explicitly )

Trong thực tế làm ứng dụng VBA Excel khi nào chọn cách khai báo ngầm, khi nà khai báo rõ ràng ?
         * Sẽ giải thích bài tiếp theo, bài này bạn chỉ đặt câu hỏi ?
 Interger là kiểu dữ liệu số nguyên, sẽ nói chi tiết phần tiếp theo.

Cú pháp chung: Dim TEN_BIEN as KIEU_BIEN
Chữ màu xanh luôn cố định, chữ màu đỏ thay đổi lại cho phù hợp.

4. Các nguyên tắt khai báo biến trong VBA

Nguyên tắt khai báo biến:
' không có dấu cách
' không có ký tự đặc biệt
' không có dấu _ đầu của biến
‘ Không có con số đầu của tên biến


Dim ho____ten As String
Dim HOTEN____ As String
Dim _HOTEN____ As String
Dim A1 As String
Dim 1A As String
 
 

5. Phạm vi của biến trong VBA

Trong VBA (Visual Basic for Applications), phạm vi của biến (variable scope) xác định nơi trong chương trình bạn có thể truy cập và sử dụng biến đó. Có 4 loại phạm vi chính:

- Phạm vi trong thủ tục (Procedure-level Scope)

    Khai báo bên trong một Sub hoặc Function bằng từ khóa Dim.

    Biến chỉ tồn tại và có thể sử dụng bên trong thủ tục đó.

    Sau khi thủ tục kết thúc, biến sẽ bị xóa khỏi bộ nhớ.

📌 Ví dụ:

Sub TestScope()
    Dim message As String
    message = "Hello"
    MsgBox message
End Sub

- Phạm vi trong mô-đun (Module-level Scope)

    Khai báo ngoài tất cả các thủ tục trong cùng một Module, dùng Dim hoặc Private.

    Biến có thể được dùng bởi tất cả các thủ tục trong cùng một Module.

    Không thể dùng từ các Module khác nếu dùng Private.

📌 Ví dụ:

Private counter As Integer  ' Module-level

Sub Increment()
    counter = counter + 1
    MsgBox counter
End Sub

Sub ResetCounter()
    counter = 0
End Sub

- Phạm vi toàn cục (Global Scope hoặc Public Scope)

    Khai báo bằng từ khóa Public trong Module chuẩn (Module, không phải UserForm hay Class).

    Có thể được truy cập từ bất kỳ Module nào trong cùng một project.

📌 Ví dụ:

Public appName As String

Sub InitApp()
    appName = "MyApp"
End Sub

Sub ShowAppName()
    MsgBox appName
End Sub

- Phạm vi tĩnh (Static Scope – giữ giá trị giữa các lần gọi)

    Dùng từ khóa Static bên trong thủ tục.

    Biến chỉ dùng được bên trong thủ tục, nhưng không bị reset giá trị giữa các lần gọi.

📌 Ví dụ:

Sub CountCalls()
    Static count As Integer
    count = count + 1
    MsgBox "Called " & count & " times"
End Sub

6. Vòng đời của biến trong VBA

Trong VBA, vòng đời của biến (variable lifetime) chỉ khoảng thời gian mà biến tồn tại trong bộ nhớ, từ lúc nó được tạo đến lúc nó bị hủy.

Dưới đây là phân tích chi tiết theo từng loại biến:

- Vòng đời biến cục bộ (Local Variable) – dùng Dim trong thủ tục

    Vòng đời: Bắt đầu khi thủ tục được gọi, kết thúc khi thủ tục kết thúc.

    Không giữ giá trị sau mỗi lần gọi.

📌 Ví dụ:

Sub ShowName()
    Dim name As String
    name = "Nhật"
    MsgBox name
End Sub

→ Biến name sẽ bị xóa khỏi bộ nhớ khi ShowName kết thúc.

- Vòng đời bbiến tĩnh (Static Variable) – dùng Static trong thủ tục

   Vòng đời: Tồn tại suốt thời gian chương trình chạy (từ lúc biến được tạo cho đến khi ứng dụng VBA kết thúc).

    Giữ giá trị giữa các lần gọi thủ tục.

📌 Ví dụ:

Sub CountCall()
    Static count As Integer
    count = count + 1
    MsgBox "Called " & count & " times"
End Sub

→ Biến count giữ giá trị mỗi lần gọi CountCall.

- Vòng đời biến cấp mô-đun (Module-level Variable) – dùng Dim hoặc Private ngoài thủ tục

    Vòng đời: Tồn tại suốt thời gian chương trình chạy.

    Có thể dùng lại trong các thủ tục khác của cùng Module.

📌 Ví dụ:

Private userName As String  ' Biến cấp mô-đun

Sub SetName()
    userName = "Nhật"
End Sub

Sub ShowName()
    MsgBox userName
End Sub

- Vòng đời biến toàn cục (Global Variable) – dùng Public trong Module chuẩn

    Vòng đời: Tồn tại suốt thời gian chương trình chạy.

    Có thể truy cập từ bất kỳ Module nào trong project.

📌 Ví dụ:

Public appVersion As String

Sub Init()
    appVersion = "1.0"
End Sub

Sub ShowVersion()
    MsgBox appVersion
End Sub

7.  Kiểu dữ liệu biến và hằng trong VBA

Data type Storage size Range
Boolean 2 bytes True or False
Byte 1 byte 0 to 255
Collection Unknown Unknown
Currency (scaled integer) 8 bytes -922,337,203,685,477.5808 to 922,337,203,685,477.5807
Date 8 bytes -657,434 (January 1, 100), to 2,958,465 (December 31, 9999)
Decimal 14 bytes +/-79,228,162,514,264,337,593,543,950,335 with no decimal point

+/-7.9228162514264337593543950335 with 28 places to the right of the decimal

Smallest non-zero number is+/-0.0000000000000000000000000001
Dictionary Unknown Unknown
Double (double-precision floating-point) 8 bytes -1.79769313486231E308 to -4.94065645841247E-324 for negative values

4.94065645841247E-324 to 1.79769313486232E308 for positive values
Integer 2 bytes -32,768 to 32,767
Long (Long integer) 4 bytes -2,147,483,648 to 2,147,483,647
LongLong (LongLong integer) 8 bytes -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807

Valid on 64-bit platforms only.
LongPtr (Long integer on 32-bit systems, LongLong integer on 64-bit systems) 4 bytes on 32-bit systems

8 bytes on 64-bit systems
-2,147,483,648 to 2,147,483,647 on 32-bit systems

-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 on 64-bit systems
Object 4 bytes Any Object reference
Single (single-precision floating-point) 4 bytes -3.402823E38 to -1.401298E-45 for negative values

1.401298E-45 to 3.402823E38 for positive values
String (variable-length) 10 bytes + string length 0 to approximately 2 billion
String (fixed-length) Length of string 1 to approximately 65,400
Variant (with numbers) 16 bytes Any numeric value up to the range of a Double
Variant (with characters) 22 bytes + string length (24 bytes on 64-bit systems) Same range as for variable-length String
User-defined (using Type) Number required by elements The range of each element is the same as the range of its data type.

8. Hằng trong VBA là gì?

Hằng nó giống biến VBA, nhưng cái khác là khi cấp giá trị cho hằng (giá trị gán vào RAM) thì không thay đổi được.

  • Cú pháp khai báo hằng VBA như thế nào ?
  • Các nguyên tắt khai báo hằng trong VBA ?

Trong VBA Excel, hằng số (constant) là giá trị không thay đổi trong suốt quá trình thực thi chương trình.

Cú pháp khai báo hằng

Const tên_hằng As kiểu_dữ_liệu = giá_trị

Ví dụ khai báo hằng

Const PI As Double = 3.14159
Const TenCongTy As String = "Công ty IIF"
Const SoNgayLamViec As Integer = 26

Đặc điểm của hằng số

Đặc điểm Mô tả
Không thay đổi Không thể gán lại giá trị mới sau khi khai báo
Tăng độ rõ ràng Giúp chương trình dễ đọc, dễ hiểu
Tối ưu hiệu năng Trình biên dịch có thể tối ưu tốt hơn so với biến

 

Ứng dụng ví dụ thực tế của hằng

Sub TinhLuong()
    Const LUONG_NGAY As Double = 500000
    Dim soNgayCong As Integer
    Dim tongLuong As Double

    soNgayCong = 22
    tongLuong = soNgayCong * LUONG_NGAY

    MsgBox "Tổng lương: " & Format(tongLuong, "#,##0") & " VNĐ"
End Sub

 

9. Bài tập làm phần mềm thực tế về biến trong VBA

Bài tập thực tế khai báo biến

 

Hãy khai báo biến để phần mềm VBA Excel lưu được thông tin trên ?

Bài viết liên quan:

Biến là gì ? hằng là gì và kiểu kiểu biến trong VBA sử dụng như thế nào cho hợp lý.