Thursday, December 31, 2015

Vòng lặp

Vòng lặp For
Ví dụ:
Sub danhsoThutu()
       Dim i As Integer
       For i = 1 to 10000
              Cells(i, 2) = i
       next i
End Sub

Cells() : Chỉ giá trị của ô

Tại sao không nên dùng Msgbox  để kiểm tra biến

Giả sử với vòng For
Sub taisao()
For i=1 to 10
MsgBox "Xin chao == " & i
Next i
End Sub

Sẽ tạo ra 10 msgbox, nhấn ok mỏi tay luôn.

Tuy nhiên nếu sử dụng câu lệnh
Debug.Print"Xin chao ==" & 1
Kết quả sẽ vào cửa sổ Immediate, không cần phải nhấn ok 10 lần.

Wednesday, December 30, 2015

Các phép toán và Các dạng biến trong VBA

Các phép toán

Câu lệnh mẫu cho phép cộng :
Worksheet(1).Range("A1").Value = Number1 + Number2
Tương tự với phép trừ - , phép nhân * và phép chia /

Các dạng biến

Byte              ( kiểu biến dữ liệu )
Boolean         ( kiểu biến đúng sai)
Integer           ( biến giá trị nguyên, khoảng 32k xung quanh số 0 )
Long              ( biến giá trị nguyên, khoảng 2 tỉ xung quanh số 0 )
Currency       ( kiểu biến tiền tệ )
Single            ( biến thực, có khả năng làm tròn 6 số )
Double           ( biến thực, có khả năng làm tròn 14 số )
Date               ( kiểu ngày tháng)
String             ( chuỗi kí tự, kiểu văn bản )
Variant           ( biến có thể là số hoặc chữ )


Lưu ý : MsgBox là câu lệnh tạo ra 1 box hiển thị kết quả


Monday, December 28, 2015

Những khái niệm cơ bản về biến và tên biến

Khái niệm cơ bản về biến.

Giả sử A là chiều dài cạnh hình vuông
Xét ví dụ
Dim MyNumber As integer
Tức là Giả sử MyNumber là số nguyên

Lưu ý :
Không thể đặt giá trị và gán giá trị cùng 1 dòng ( như trên Visual Basic.NET)
tức là sẽ sai khi viết
Dim MyNumber As Integer = 10
Phải viết
Dim MyNumber As Integer
MyNumber = 10

Tên biến

Quy định :
Không thể bắt đầu tên biến bằng một số
Không thể dùng dấu cách khi đặt tên biến
Không dùng các kí tự đặc biệt khi đặt tên biến như !, %, ?, #, $

Thực hành

Gán giá trị ô A1 bằng 10
Worksheets(1).Range("A1").Value = 10
hay trong trường hợp này
Worksheets(1).Range("A1").Value = MyNumber
cũng có thể áp dụng cho đối tượng là range
Worksheets(1).Range("B1:B10").Value = MyNumber

Thuộc tính Offset và Resize

Ví dụ : Range("A1").Offset(RowOffset:=1, ColumnOffset:=1).Select
Tức là : Chọn vào vị trí dịch 1 cột sang phải và 1 dòng xuống dưới so với ô A1
Nếu chỉ muốn dịch chuyển xuống 1 dòng so với A1
Range("A1").Offset(1).Select
Nếu muốn dịch sang ô B1
Range("A1").Offset(,1).Select


Offset đơn thuần là sự dịch chuyển đối tượng lệch trục.
Còn với Resize, chúng ta sẽ thay đổi vùng chọn ban đầu bằng cách thêm ô hay cột cho nó kể từ dùng dữ liệu đầu tiên được chọn.
Chúng ta cùng xem xét ví dụ sau :
Range("A1").Resize(RowSize:=2, ColumnSize:=2).Select
Tức là : Chọn một vùng dữ liệu bắt đầu từ ô A1 và có số dòng là 2 và số cột là 2, tức là vùng dữ liệu A1:B2
Chú ý : 
Offset thì là RowOffset = ...., Resize là RowSize=...
Giá trị thông số của Resize không có giá trị âm

Chúng ta có thể viết tắt như sau:
Range("A1").Resize(2,2).Select
Nếu chỉ chỉnh thêm cột mà không thêm dòng
Range("A1").Resize(2).Select
Thêm dòng mà không muốn thêm cột:
Range("A1").Resize(,2).Select

Nếu chọn A1:A3 làm đối tượng cho Range thì Resize luôn ưu tiên chọn ô đầu tiên là ô A1
Có thể áp dụng Offset và Resize trên cùng 1 câu lệnh