1. Trang chủ
  2. » Công Nghệ Thông Tin

LẬP TRINH VISUAL TReN EXCEL

145 218 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 145
Dung lượng 25,81 MB
File đính kèm LẬP TRINH VISUAL TReN EXCEL.rar (18 MB)

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

MỤC LỤC 1 Bài 1: MARCRO trang 2 2 Bài 2: Biến – Kiểu dữ liệu trang 8 3Bài 3: Lệnh điều kiện (Conditional Statements) trang 9 4Bài 4: Lệnh vòng lặp (Loop Statements trang 18 5Bài 5: Mảng (Array) THỰC HÀNH TRÊN FILE HAMSO2.XLMS Private Sub CommandButton1_Click() row_number = 0 dem_kytu = 0 KYTU = Sheets(sheet1).Range(F3) Do DoEvents row_number = row_number + 1 CHU = Sheets(sheet1).Range(A row_number) If InStr(CHU, KYTU) > 0 Then dem_kytu = dem_kytu + 1 End If Loop Until CHU = MsgBox so ky tu xuat hien : dem_kytu lan End Sub

Trang 1

MỤC LỤC

-Workbooks(“Seles.xls”).Worksheets(“Sheet1” ).Range(“B3”)

- Bạn có thể dùng ngoặc vuông [ ] để chọn vùng ô thay vì () So sánh với ví dụ như sau:

[A1:A3].Select là cách chọn vùng giống như Range(“A1:A3”).Select thay

input - output – inventory : nhập - xuất - tồn

Dim lastColumn As Integer

lastColumn = ActiveSheet.Cells(2, Columns.Count).End(xlToLeft).Column

MsgBox lastColumn

Sub TimKiem_Trich_loc_MoTieuKien()

' Xoa ket qua tim kiem truoc

' tim kiem cac dong thoa man dieu kien va copy qua sheet REPORT

Dim Datasheet As Worksheet

Dim reportsheet As Worksheet

Dim chonlua As String

Dim lr As Long

' Gan cac bien

Set Datasheet = Sheet1

Set reportsheet = Sheet4

If (Cells(i, 2) Like chonlua & "*") Then

Range(Cells(i, 1), Cells(i, 12)).Copy

reportsheet.Select

Range("A200").End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats

Datasheet.Select ' Tro lai sheet1 (N1) và tim kiem

Trang 2

Private Sub Worksheet_Change(ByVal Target As Range)

Dim KeyCells As Range

' The variable KeyCells contains the cells that will

' cause an alert when they are changed.

Set KeyCells = Range("A1:C10")

If Not Application.Intersect(KeyCells, Range(Target.Address)) _

Is Nothing Then

' Display a message when one of the designated cells has been

' changed

' Place your code here

MsgBox "Cell " & Target.Address & " has changed."

Using the Columns property without an object qualifier is equivalent to

using ActiveSheet.Columns If the active document isn't a worksheet,

the Columns property fails.

To return a single column, include an index in parentheses For

example, Columns(1) and Columns("A")return the first column.

Trang 4

Đối với Excel 13 thì ta bât Ribbon Devoloper lên bằng cách

Customize ribbon-> clich chọn vào Developer

10

Lúc này trên excel sẽ xuất hiện 1 thẻ Developer

Khi nhấn thẻ Developer ta sẽ có Thẻ Record Macro/stop Macro

Và thẻ Use Relative Reference : sử dụng tham chiếu ô tường đối (quan hệ với vị trí ô được kích hoạt

ban đầu )

Macro security : Tùy chọn bảo mật macro ( cho phép chạy hay không )

Để thiếp lập chế độ Enable cho Macro ta thao tác như sau :

Trang 5

Để vào cửa sổ soan thảo Lập trinh ( viết code ) ta có 2 cách lựa chọn thứ nhất nhấp vào cửa sổ Visual Basic hoặc nhấn phím tắt Alt+F11

Visual Basic(Alt+F11 ) : cửa sổ soạn thảo VBA

Trang 6

2 -GHI MACRO BẰNG RECORD MACRO, THỰC HIỆN MACRO

3-THỰC HIỆN(RUN) MACRO ĐÃ TẠO

Cách 1 : Thực hiện từ bảng điều khiển

Chọn Marco (Alt+F8) từ Ribbon Developer

Chọn Macro cần thực hiện và nhấn phím Run

Cách 2 : Thực hiện từ phím tắt

Bấm tổ hợp phím tắt đã đặt cho Macro để chạy Macro

Cách 3 : Thực hiện bằng cách Gán Macro vào đối tượng

Đối tượng có thể là các đối tượng được Insert (ảnh , hình vẽ …)

Hoặc có thể là đối tượng DATA FORM

ảnh , hình vẽ : NHẤP chuột phải vào hình ảnh, hoặc hình vẽ

Trang 7

TẠO COMBOBOX :

TA tiên hành từ 1->7

LẬP TRINH VISUAL TRN EXCEL

HÀM NGƯỜI DÙNG (USER FUNCTIONS)

CÁCH BIÊN SOẠN VÀ SỬ DỤNG

Ta tạo ra bằng cách đưa ra những biểu thức hoặc dùng mã lệnh Visual Basic trong một Visual Basic Modul

Hàm được biên soạn trong cửa sổ modul theo mẫu :

Public Function TênHàm(danh sách đối số )

Các câu lệnh để tính trị cho hàm

End function

1)Nếu bảng tính đã có Modul sheet ,thì gọi lệnh tools –Marco-Visual basic Editor

-vào insert chọn Module hoặc insert –procedure

Trang 8

Ví dụ viết chươn trình tính diện tích hình tam giác

public Function TAMGIAC(A, B, C)

Muốn thử chương trình có chạy hay không ta có Ctrl-G

Sau đó trong cửa sổ ta gõ ?tên chương trình cùng các đối số

Ví dụ ? TAMGIAC(3,4,5)

6

Lưu tên file này lại ,kể từ nay khi bạn mở file này sẽ cảnh giác bạn rằng bảng tính này chứa Macro , mà Marco thì có thể chứa Virus ,do đó Excel gợi ý sẵn là Disable Marco, nhưng bạn phải chọn Enable Macro thì các hàm tự biên mới hoạt động được

PHONG CẤP CHO HÀM

Sau khi viết xong ,ta hãy lưu bảng tính vào thư mục chỉ định

C:\Program Files\Microsoft Office\OFFICE11\Library

Mục save as type chọn Microsoft Excel Add-In

Mục file name gõ tên tập tin ví dụ MyUser

Các hàm này được phong cấp từ hàm cục bộ sang thành hàm toàn cục (global user functions )

Go và Browse chọn Add-Ins cần bổ sung vào Excel.)

Nhấp chọn MyUser-Ok

-Sử dụng user defined User -Insert-function- chọn user defined

Trang 9

Function : Hàm là 1 tập hợp các câu lệnh để thực hiện 1 chức năng nào đó

Ví dụ: Viết 1 hàm đơn giản trên VBA.

Bước 1: Mở cửa sổ VBA.

Bước 2: Thêm 1 hàm có tên là Hello.

Bước 3: Gõ vào dòng lệnh sau:

MsgBox ("Chao ban, day là chuong trinh VBA dau tien cua toi!!!")

Khi đó trên cửa sổ VBA, bạn sẽ thấy kết quả như sau:

Bước 4: Kiểm tra (test) chức năng của hàm Hello.

Quay lại Excel, tại 1 ô b ất kỳ, gõ vào công thức sau: =Hello()

Bài 2: Biến – Kiểu dữ liệu

Biến (variable) là 1 vùng bộ nhớ dùng để lưu trữ 1 giá trị có tính tạm thời Trước khi sử dụng 1 biến, ta phải khai báo biến.

1) Cách khai báo biến

Dim <tên biến> As <kiểu> [,<tên biến> As <kiểu>]…

- tên biến : phải bắt đầu bằng 1 ký tự, dài tối đa 255 ký tự, không được có khoảng trắng và dấu chấm.

- kiểu (data type) : có nh ững kiểu sau:

Loại Tên kiểu Số byte Miền giá trị

Trang 10

Ngày, giờ Date 8 01/01/100 to 31/12/9999

Ví dụ 1:

Dim diem As Single, phai As Boolean, ngay as Date

Dim ten As String

Chú ý: Bật chế độ bắt buộc phải khai báo biến trước khi dùng: tại cửa sổ VBA, click menu Tools

=> Options, rồi chọn Require Variable Declaration.

2) Các phép toán

- Cộng, trừ, nhân, chia : +, –, *, /

- Lũy th ừa : ^ VD: 6^2 -> 36

- Trả về số dư của phép chia: mod VD: 14 mod 3 -> 2

- Trả về thương số của phép chia: \ VD: 14 \ 3 -> 4

- Nối nhiều chuỗi: & VD: “abc” & “456” & “xyz” -> “abc456xyz”

Ví dụ 3: viết hàm trả về thương số của 1 phép chia

Public Function ThuongSo(SoBiChia As Integer, SoChia As Integer)

ThuongSo = SoBiChia \ SoChia

End Function

Chú ý:

- Khai báo tham số (argument / parameter): <tên tham số>As<kiểu>

Bài tập

1) Viết hàm trả về số dư của 1 phép chia.

2) Viết hàm nhận vào 1 số nguyên có 3 chữ số, tính tổng và tích của 3 chữ số ấy.

3) Viết hàm nhận vào 1 số tiền nguy ên, đổi số tiền ấy thành tờ 500, 20, và dư bao nhiêu.

4) Viết hàm nhận vào 1 thời gian tính theo giây, đổi sang dạng giờ:phút:giây.

(Gợi ý: các bài 2, 3, và 4 ta trả về 1 chuỗi)

Giải

Bt1

Public Function Duso(SoBiChia As Integer, SoChia As Integer)

Duso = SoBiChia Mod SoChia

End Function

Bt2

Public Function TongTich(So As Integer)

Dim tram As Integer, chuc As Integer, donvi As Integer

TongTich = ""

tram = So \ 100

chuc = (So \ 10) Mod 10

donvi = So Mod 10

TongTich = "Tong cac chu so la " & (tram + chuc + donvi)&chr(13)

TongTich = TongTich & ", Tich cac chu so la " & (tram * chuc * donvi)

End Function

Bt3

Trang 11

Public Function DoiTien(SoTien As Integer)

Dim st50 As Integer, st20 As Integer, le As Integer

st50 = SoTien \ 50

st20 = (SoTien Mod 50) \ 20

le = (SoTien Mod 50) Mod 20

DoiTien = st50 &" to Nam muoi, " & st20 & " to hai muoi " & le & " tien le "

End Function

Bt4

Dim gio As Integer, phut As Integer

gio = Giay \ 3600

phut = (Giay Mod 3600) \ 60

Giay = (Giay Mod 3600) Mod 60

DoiGiay = gio &" gio, " & phut & " phut, " & Giay & " giay "

End Function

Bài 3: Lệnh điều kiện (Conditional Statements)

Lệnh điều kiện cho phép CPU thực thi 1 tập hợp lệnh trong những điểu kiện được định trước.

1) Điều kiện (Condition / Criterion)

- Điều kiện là những biểu thức so sánh và luôn trả về True hoặc False

Trang 12

Ý nghĩa : thực thi các lệnh 1 khi đk1 đúng (True); ngược lại th ực thi các lệnh 2 khi đk2 đúng; …;

nếu tất cả các điều kiện đều sai (False) thì các lệnh else được thực thi.

Ví dụ 3: viết hàm nhận vào 1 số nguyên, cho biết số đó chẵn hay lẻ.

Public Function ChanLe(So As Integer)

If (So mod 2) = 0 then

Ví dụ 4: viết hàm nhận vào 1 số, cho biết số đó âm, dương, hay bằng 0.

Public Function Dau(So As Double)

Trang 13

Select Case <biểu thức B>

Ví dụ 7: viết hàm nhận vào tháng và năm, cho biết tháng đó có bao nhiêu ngày?

Public Function SoNgay(Thang As Byte, Nam As Integer)

Dim sn As Byte, tmp As Integer

Select Case Thang

1) Viết lại ví dụ 3 và 4 bằng cách dùng SELECT.

2) Viết lại ví dụ 7 bằng cách dùng IF.

3) Viết hàm nhận vào 3 số Cho biết số lớn nhất ( dùng IF dạng 1 )

4) Viết hàm nhận vào 1 số nguyên có 3 chữ số, cho biết chữ số nhỏ nhất.

4b) Viết lại bằng cấu trúc If dạng 3

5) Viết hàm nhận vào 1 ngày Cho biết thứ trong tuần.

=CHOOSE(WEEKDAY("22/10/2016"),"CHỦ NHAT","Thu Hai","Thu Ba","Thu Tu","thu Nam","Thu Sau","Thu Bay")

6) Viết hàm nhận vào 1 năm Cho biết năm âm lịch.

(Hướng dẫn: năm âm lịch gồm can và chi.

Can:, Canh-0, Tân-1, Nhâm-2, Quí-3, Giáp-4, Ất-5, Bính-6, Đinh-7, M ậu-8, Kỷ-9

Chi: Thân-0, Dậu-1, Tuất-2, Hợi-3, Tí-4, Sửu-5, D ần-6, Mão-7, Thìn-8, Tỵ-9, Ngọ-10, Mùi-11,

7) Viết hàm nhận vào 2 số A và B Giải phương trình Ax + B = 0 Giai theo dang If 1 và If 2

(Hướng dẫn: nếu (A = 0) và (B = 0) thì phương trình có vô số nghiệm.

Nếu (A = 0) và (B <> 0) thì phương trình vô nghiệm.

Nếu (A <> 0) thì phương trình có nghiệm x = -B/A.)

8) Viết hàm nhận vào 3 số A, B và C Giải phương trình Ax2+ Bx + C = 0.

(Hướng dẫn: nếu (A = 0) thì giải phương trình Bx + C = 0.

Nếu (A <> 0)+ Tính = B2– 4AC

+ Nếu < 0 thì vô nghiệm

+ Nếu >= 0 thì có 2 nghiệm xác định bởi công thức

Trang 14

Bt1)

(Ví dụ 3: viết hàm nhận vào 1 số nguyên, cho biết số đó chẵn hay lẻ.

Public Function ChanLe(So As Integer))

Public Function Chanle(so As Integer)

If (so Mod 2 = 0) Then

Chanle = "So chan"

Else: Chanle = "so le"

End If

Public Function Chanle(so As Integer)

Select Case (so Mod 2)

Case 0: Chanle = "So chan"

Case 1: Chanle = "so le"

End Select

End Function

BT2)

Public Function SoNga(Thang As Byte, Nam As Integer)

Dim sn As Byte, tmp As Integer

If (Thang = 1) Or (Thang = 3) Or (Thang = 7) Or (Thang = 8) Or (Thang = 10) Or (Thang = 12) Then

Public Function SoLN(a As Integer, b As Integer, c As Integer)

Dim max As Integer

max = a

If max < b Then max = b

If max < c Then max = c

SoLN = max

End Function

BT4)

Public Function NhoNhat(So As Integer)

4) Viet hàm nhan vào 1 so nguyên có 3 chu so, cho bit chu so nho nhat.

Dim tram As Byte, chuc As Byte, donvi As Byte

tram = So \ 100

chuc = (So \ 10) Mod 10

donvi = So Mod 10

NhoNhat = tram

If NhoNhat > chuc Then NhoNhat = chuc

If NhoNhat > donvi Then NhoNhat = donvi

4b) Ví d :ụ

so sánh 2 biến a, b

if( a > b) then'a lớn hơn b';

câu lệnh if có else

if(a > b) then'a lớn hơn b';

elseecho'b lớn hơn a';

câu lệnh if có elseif, else

Trang 15

Public Function sosanh(a, b)

‘ câu lệnh if có else, elseif có lồng ghép phức tạp

Public Function maxx(a, b, c)

TH = NGAY & "/" & THANG & "/" & NAM

THU = Choose(Weekday("TH"), "CHU NHAT", "Thu Hai", "Thu Ba", "Thu Tu", "thu Nam", "Thu Sau",

"Thu Bay")

End Function

Bt6)

Public Function AmLich(Nam As Integer)

'Can:, Canh-0, Tân-1, Nhâm-2, Quí-3, Giáp-4, Ât-5, Bính-6, Dinh-7, Mau-8, Ky-9

Select Case Nam Mod 10

Case 0: Can = "Canh"

Case 1: Can = "Tân"

Case 2: Can = "Nhâm"

Case 3: Can = "Quí"

Case 4: Can = "Giáp"

Case 5: Can = "Ât"

Case 6: Can = "Bính"

Case 7: Can = "Dinh"

Case 8: Can = "Mau"

Case 9: Can = "Ky"

End Select

'Chi: Thân-0, Dau-1, Tuat-2, Hoi-3, Tí-4, Suu-5, Dan-6, Mão-7, Thìn-8, Ty-9, Ng?-10, Mùi-11,

Trang 16

Select Case Nam Mod 12

Case 0: Chi = "Thân"

Case 1: Chi = "Dâu"

Case 2: Chi = "Tuât"

Case 3: Chi = "Hoi"

Case 4: Chi = "Ty"

Case 5: Chi = "Suu"

Case 6: Chi = "Dân"

Case 7: Chi = "Mão"

Case 8: Chi = "Thìn"

Case 9: Chi = "Ty."

Case 10: Chi = "Ngo."

Case 11: Chi = "Mùi"

End Select

AmLich = Can + Space(1) + Chi

End Function

Bt6 cach2)

Public Function AMLICH(Y)

Dim CAN, CHI

Dim N, M As Integer

CAN = Array("Canh", "Tan", "Nhm", "Qy", "Gip",”Ất", "Bính", "Đinh", "Mậu", "Kỷ")

CHI = Array("Thn", "Dậu", "Tuất", "Hợi", "Tý", "Sửu", “Dần", "Mo", "Thìn", "Tị", "Ngọ", "Mi")

Trang 17

Áp dụng vào các sheet trên Excel HÀM IF

Public Sub TEST()

With Sheets("a") ‘ Tại Sheet a, nếu ký tự đầu tiên ở Ô C7 là 1 thì đến Ô J9

If Left(.Range("C7"), 1) = 1 Then ‘ viết vào ký tự 1, nếu không phải thì viết vào ký tự 3 Range("J9") = 1

Private Sub COMMAND()

Dim FirstNum, secondnum As Single

FirstNum = Cells(1, 1).Value

secondnum = Cells(1, 2).Value

If FirstNum > secondnum Then

Trang 18

MsgBox " The First number is greater than the second number " ElseIf FirstNum < secondnum Then

MsgBox " The FirstNumber is less than the secon number "

Trang 19

If c = 0 Then TextKetQua.Text = " pt Vo so nghiem " Else TextKetQua.Text = " pt VO NGHIEM " Else

Trang 20

Bài 4: Lệnh vòng lặp (Loop Statements)

Lệnh vòng lặp cho phép thực thi các lệnh nhiều lần.

Loop Until <điều kiện D>

Ý nghĩa : thực thi các lệnh D cho đến khi điều kiện D đúng (True)

Ý nghĩa : khi điều kiện W còn đúng (True) thì thực thi các lệnh W.

Ví dụ 1 A : giải thích sự hoạt động của vòng lặp Do until… loop

Sub DoUntil_loop()

i = 1

Do Until i = 10 ' gioi han i=10 neu True thi thoat

Cells(i, 5) = i ' gia tri trong cac O tang dan

MsgBox i ' Hop Thong bao gia tri i

i = i + 1 ' cho gia tri tang dan

Loop

End Sub

Sub Doloop_until()

i = 1

Do ' gioi han i=10 neu True thi thoat

Cells(i, 5) = i ' gia tri trong cac O tang dan

MsgBox i ' Hop Thong bao gia tri i

i = i + 1 ' cho gia tri tang dan

Loop Until i = 10

End Sub

Trang 21

Trong từng trường hợp cụ thể chúng có thể làm việc khác nhau, ta sử dụng vòng lặp Do Until …loop hoặc Do …loop Until để duyệt qua từng ô chứa tên học sinh, quê quán cho học sinh đó còn không nó sẽ

Range("B1").Offset(i, 1) = InputBox(" Nhâp Dia chi ")

Range("B1").Offset(i, 2) = InputBox(" Nhâp Que quan ")

Range("B1").Offset(i, 1) = InputBox(" Nhâp Dia chi ")

Range("B1").Offset(i, 2) = InputBox(" Nhâp Que quan ")

VdDoLoopUntil vẫn bắt nhập địa chỉ quê quan khi không có một em học sinh nào

Ví dụ 2: viết hàm nhận 1 số nguyên dương N, tính tổng và tích các số từ 1 đến N.

Tổng = 1 + 2 + 3 + … + N

Tích = 1x2x3x…xN = N!

Public Function TongTich(N As Integer)

Dim Tong As Integer, Tich As Double

Ví dụ 3: viết hàm nhận vào 1 số nguyên dương N, tính tổng các chữ số trong N.

Public Function TongChuSo(N As Integer)

Dim Tong As Integer, cs as Byte

Trang 22

Ví dụ4:

Sub VD_DoW_Loop()

i = 1 ‘ Đặt i lúc đầu bằng 1

Do While i <= 10 ‘ Đặt giới hạn cho i, nếu False thì thoát

Cells(i,1) = i ‘ Gán i vào ô i = i + 1 „ Cho giá trị i tăng dần

MsgBox i ‘ Hộp thông báo giá trị i

1) Viết lại ví dụ 2 bằng cách sử dụng vòng lặp Do.

Ví dụ 2: viết hàm nhận 1 số nguyên dương N, tính tổng và tích các số từ 1 đến N.

Do

<các lệnh D>

Loop Until <điều kiện D>

2) Viết hàm nhận vào 1 số nguy ên dương N, tìm chữ số nhỏ nhất trong N.

Hướng dẫn:Public Function Nho_Nhat(N As Integer)

Vòng While…wend

3) Viết hàm nhận vào 1 số nguy ên dương N, tính tổng các số lẻ nhỏ hơn hoặc bằng N.

Public Function TongLe(N As Integer)

5) Viết hàm nhận vào 1 số nguy ên dương N Tính S = 1 + 1/2! + 1/3! + … + 1/n!

Hướng dẫn:Public Function TongS(N As Integer)

2 Vòng for lồng nhau

Trang 23

Public Function TongTich2(N As Integer)

'Viet lai ví du 2 bang cách su dung vòng lap Do.

Dim i, Tong As Integer, Tich As Double

Public Function Nho_Nhat(N As Integer)

Dim Tong, cs, Min As Integer

Public Function TongLe(N As Integer)

'Viet hàm nhan vào 1 so nguyên duong N, tính tong các so le nho hon hoac bang NDim i, Tong As Integer

4)Public Function Tich(N As Integer)

' Viet hàm nhan vào 1 so nguyên duong N, neu N le thì tính tích các so le <= n,' neu N chan thì tính tích các so chan <= n

Dim i, Tong As Integer, T As Double

5)Public Function TongS(N As Integer)

'5) Viet hàm nhan vào 1 so nguy ên duong N Tính S = 1 + 1/2! + 1/3! + … + 1/n!Dim i, j As Integer, S As Double

Trang 24

Bài 5: Mảng (Array)

- Mảng là 1 dãy các biến có cùng kiểu dữ liệu Các biến trong mảng có cùng 1 tên gọi là tên mảng Các biến trong mảng được phân biệt với nhau thông qua 1 chỉ số (số nguyên) Mỗi biến trong mảng được gọi là phần tử.

1) Khai báo và sử dụng

- Khai báo 1 mảng: Tên mảng(n1 to n2) As kiểu

Ví dụ 1: Dim A(1 To 4) As Byte

Dim N(0 To 6) As Integer

Dim X(–2 To 4) As Double

- Các số 53, 27, 64, 12 là những giá trị của các phần tử có chỉ số là 1, 2, 3 và 4.

- Để lấy giá trị 1 phần tử, ta dùng cú pháp: Tên mảng(chỉ số)

- Để gán giá trị cho 1 phần tử, ta dùng cú pháp: Tên mảng(chỉ số) = giá trị

Ví dụ 2: A(2) = A(1) + A(4)*2

2) Mảng 2 chiều (bảng / ma trận)

- Mảng 2 chiều được cấu thành từ nhiều dòng và nhiều cột.

- Khai báo: Tên mảng(d1 to d2, c1 to c2) As kiểu

- Sử dụng: Tên mảng(chỉ số dòng, chỉ số cột)

Ví dụ 3: Dim M(1 To 3, 1 To 4) As Double

M(1, 3) = –2.5

3) Mảng có số phần tử thay đổi (mảng động/dynamic array )

- Khai báo: Tên mảng() As kiểu

- Xác định số phần tử của mảng: Redim Tên mảng(n1 to n2)

Public Function Tong(Ran As Range)

Dim d As Integer, c As Integer, sum As Double

Public Function Tim(Val As Double, Ran As Range)

Dim num As Integer, oCell As Range

num = 0

For Each oCell In Ran

If oCell.Value = Val Then

Trang 25

Bt tìm điểm trên năm bôi đậm và tô màu xanh, giả sử ta có file Excel như sau

Ta viết đoạn code như sau

B2) Public Sub TBINH()

Dim Diachi As String

Dim Traloi As Integer

Dim Otinh As Range ‘ Range là một dảy ta chọn trên Ecel

Dim Vungchon As Variant ‘ Biến số Variant thường là một vùng chọn

Vungchon = Selection

Diachi = Selection.Address ‘ Hiên lên địa chỉ vùng chọn ví dụ $C$4: #G$12

Traloi = MsgBox(Diachi, vbYesNo) ‘ Hiên lên bảng thông báo Đia chỉ và chọn lựa Yes -No

If Traloi = 1 Then End

For Each Otinh In Selection.Cells

Trang 26

Sẽ hiện lên bảng dữ liệu theo yêu cầu

Giải thích :

Trang 27

c) Tìm phần tử lớn nhất trong mảng

Public Function LonNhat(Ran As Range)

Dim max As Double, v As Integer, d As Integer, c As Integer

Bài 6: Ứng dụng VBA trong Excel

Ví dụ 2: Đổi chữ thành chữ hoa của vùng chọn.

Public Function EV(X As Range, W As Range)

Dim i As Integer, sum As Double

sum = 0

For i = 1 To X.Columns.Count

Ví dụ 2: Đổi chữ thành chữ hoa của vùng chọn.

Public Sub Hoa()

Dim SelRan As Range, d As Long, c As Long, s As String

Set SelRan = Selection

Sub phải găn vào macro THÌ MỚI CÓ TÁC DỤNG

Cách đưa thủ tục Hoa thành 1 nút trên thanh Menu:

Bước 1: Right click trên thanh menu chọn Customize Quick Access Toolbar…

Bước 2: Tại ô Choose commands from, chọn Macros Click mục Hoa trong ô phía dưới Rồi click nút Add Click Ok.

Bước 3: Trên thanh menu sẽ xuất hiện 1 nút Hoa Khi click vào nút này thì thủ tục Hoa sẽ th ực thi Chú ý:

- Thủ tục (Sub) không trả về giá trị và không gọi th ực hiện trong công thứ

Ví dụ 3: Dùng hàm có sẵn trong Excel

Public Function Ex(Ran As Range)

Ex = Application.WorksheetFunction.Sum(Ran)

End Function

Public Sub Kieu()

'Ví dU 4: Thay DOI kiEu chU (Font)

Dim SelRan As Range

Set SelRan = Selection

With SelRan

Trang 28

Ví dụ 5: Thay đ ổi đư ờng viền (Borders)

Public FUNCTION KeKhung(Ran As Range) Dim SelRan As Range

Set SelRan = Selection

With SelRan

.Borders.Item(xlEdgeBottom).LineStyle = 1 Borders.Item(xlEdgeTop).LineStyle = 1

.Borders.Item(xlEdgeLeft).LineStyle = 1

.Borders.Item(xlEdgeRight).LineStyle = 1

.Borders.Item(xlInsideHorizontal).LineStyle = 1 Borders.Item(xlInsideVertical).LineStyle = 1 Borders.Item(xlDiagonalDown).LineStyle = 1 Borders.Item(xlDiagonalUp).LineStyle = 1 End With

End Sub

Nếu muôn tạo thành Maceo THÌ VIẾT NHƯ SAU Public Sub KeKhung()

Dim SelRan As Range

Set SelRan = Selection

With SelRan

.Borders.Item(xlEdgeBottom).LineStyle = 1 Borders.Item(xlEdgeTop).LineStyle = 1

.Borders.Item(xlEdgeLeft).LineStyle = 1

.Borders.Item(xlEdgeRight).LineStyle = 1

.Borders.Item(xlInsideHorizontal).LineStyle = 1 Borders.Item(xlInsideVertical).LineStyle = 1 Borders.Item(xlDiagonalDown).LineStyle = 1 Borders.Item(xlDiagonalUp).LineStyle = 1 End With

End Sub

Trang 29

Call < tên thủ tục >[(< danh sách tham số truyền >)]

< tên biến > = < tên hàm >[(< danh sách tham số truyền >)]

3) Cách định nghĩa tham số trong thủ tục / hàm

ByVal < tên tham số > As < kiểu >, …

hoặc ByRef < tên tham số > As < kiểu >, …

- ByVal : tham số có kiểu giá trị (tham trị), có 2 đặc điểm sau:

+ Khi truy ền cho phép truyền giá trị hoặc biến.

+ Khi tham số bị thay đổi giá trị bởi những câu lệnh bên trong thủ tục định nghĩa nó, thì biến truy ền tương ứng sẽ không bị thay đổi.

- ByRef : tham số có kiểu biến (tham biến), có 2 đặc điểm sau:

+ Khi truyền chỉ nên truy ền biến.

+ Khi tham số bị thay đổi giá trị bởi những câu lệnh bên trong thủ tục định nghĩa nó thì biến

truy ền tương ứng sẽ bị thay đổi theo.

Ví dụ 1:

Public Function ThamTri()

Dim y As Integer, s As String

Public Function ThamBien()

Dim y As Integer, s As String

Public Function ThamBienM()

Dim y(1 To 5) As Integer, i As Integer

Trang 30

4) Tầm ảnh hưởng của các biến

- Biến cục bộ / tham số được khai báo trong thủ tục, hàm

+ Biến cục bộ chỉ được sử dụng đối với các câu lệnh trong thủ tục định nghĩa ra nó.

+ Biến cục bộ chỉ tồn tại trong bộ nhớ khi thủ tục được thực hiện.

+ Biến toàn cục Module được sử dụng đối với tất cả các câu lệnh trong Module.

+ Biến toàn cục Module tồn tại trong bộ nhớ khi workbook được mở.

Ví dụ 5:

Option Explicit

Dim TC As Integer ‘ TC là biến toàn cục Module

Public Function Test1()

Ví dụ 6:

Option Explicit

Dim TC As Integer ‘ TC là biến toàn cục Module

Public Function Test1()

Trang 31

Bài 8: Hộp đối thoại

1) Phương pháp lập trình

Sau khi có lời giải của bài toán ở dạng ngôn ngữ tự nhiên, ta sẽ tiến hành tổ chức chương trình sao cho dễ phát triển, kiểm tra, nâng cấp, và làm theo nhóm Dưới đây ta trình bày sơ lược 3 phương pháp.

a) Lập trình theo hướng thủ tục/hàm (Procedural Programming)

+ Chương trình được chia thành nhiều thủ tục và hàm.

+ Mỗi thủ tục/hàm thực hiện 1 chức năng nào đó.

+ Mỗi thủ tục/hàm bao gồm 1 số câu lệnh nào đó để thực thi chức năng của nó.

+ Khi tên của thủ tục/hàm được gọi thì chức năng của thủ tục/hàm đó được thực hiện (các câu lệnh của thủ tục/hàm được thực thi).

+ Mỗi th ủ tục/hàm nên có tham số để chúng trở nên linh động và tổng quát.

b) Lập trình theo hướng đối tượng (Object Oriented Programming–OOP)

+ Chương trình được chia thành nhiều đối tượng.

+ Đối tượng là 1 thực thể có thật trong cuộc sống như: sinh viên, toán, cái bàn, đường tròn, … + Một đối tượng được cấu tạo bởi thuộc tính (property/attribute) và phương thức (method).

+ Thuộc tính là những tính chất mô tả đối tượng.

+ Phương thức (cũng là thủ tục/hàm) là những chức năng của đối tượng.

+ Ví dụ: Xét đối tượng hình tròn thì

Thuộc tính: bán kính, màu đường viền, màu tô, …

Phương thức: lấy bán kính hiện tại, thay đổi bán kính, tô màu nền, tô màu đường viền, …

+ Khi muốn sử dụng thuộc tính/phương thức của 1 đối tượng, ta dùng cú pháp: đối tượng.thuộc tính, đối tượng.phương thức

c) Lập trình theo hướng sự kiện (Event Driven Programming)

+ Đây là sự mở rộng của OOP nhưng thêm khái niệm sự kiện/biến cố (Event).

+ Sự kiện (cũng là thủ tục/hàm) là những tác động từ môi trường bên ngoài lên đối tư ợng mà đối tượng có thể hiểu.

+ Ví dụ: xét đối tượng nút lệnh (command button) thì các sự kiện là: click, right click, mouse move + Khi lập trình theo hướng này, thì ta chủ yếu viết các câu lệnh cho sự kiện cần thiết Nghĩa là dạy đối tượng cách ứng xử với tác động từ bên ngoài.

+ Các câu lệnh của 1 sự kiện chỉ được thi hành khi sự kiện đó được kích hoạt.

2) Form

+ Form là 1 cửa sổ Để thêm 1 Form, click menu Insert => UserForm.

+ Một vài thuộc tính quan trọng của Form:

Name: tên của Form (dùng để viết code)

Caption: chuỗi ký tự xuất hiện trên thanh tiêu đề của Form

+ Một vài sự kiện quan trọng của Form:

Activate: khi Form được kích hoạt

Terminate: khi đóng Form.

Ví dụ 1: Tạo 1 Form với các sự kiện sau:

Activate: hiển thị Hello

Terminate: hiển thị Bye Bye

MouseMove: thay đổi màu nền của Form.

Bước 1: Insert -> UserForm Sau đó đặt thuộc tinh Name là frmDemo.

Bước 2: Double click trên Form để mở cửa sổ viết sự kiện cho Form Rồi sau đó chọn sự kiện cần

viết code tại ô này

Trang 32

Bước 3: viết code cho 3 sự kiện như sau

Private Sub UserForm_Activate()

Private Sub UserForm_Terminate()

MsgBox ("Bye Bye")

End Sub

Bước 4: viết hàm sau trong 1 Module.

Public Sub TestForm()

Caption: chuỗi ký tự xuất hiện trên nút lệnh

Enabled = True / False  các sự kiện được / không được kích hoạt

Visible = True / False  hiển thị / ẩn

+ Một vài sự kiện quan trọng của Form:

Click: sự kiện này xảy ra khi người dùng click chuột trên nút lệnh.

4) Label: hiển thị chuỗi ký tự tĩnh (ng ười dùng không thể thay đ ổi) Thuộc tính Caption chứa chuỗi ký

tự hiển thị.

5) TextBox: hiển thị chuỗi ký tự mà người dùng có th ể thay đ ổi.

+ Một vài thuộc tính quan trọng:

Text: chuỗi ký tự hiển thị.

Font: font chữ.

ForeColor: màu chữ.

MaxLength: số ký tự tối đa (=0 nghĩa là không giới hạn).

MultiLine = True / False  nhiều dòng / 1 dòng.

Ví dụ 2: chia các ô trong vùng chọn bởi 1 số.

Bước 1: Tạo Form như hình sau.

Bước 2: Viết các sự kiện sau.

Private Sub cmdCancel_Click()

Unload frmPhepChia

End Sub

Private Sub cmdOk_Click()

Dim SoChia As Double, cell As Range

SoChia = CDbl(txtSoChia.Text)

For Each cell In Selection

cell.Value = cell.Value / SoChia

Next cell

End Sub

Trang 33

Name = txtSoChia

Name = cmdCancel Name = cmdOk

Name = frmPhepChia

Dấu tách thập phân hợp lệ duy nhất mà hàm Val () có thể nhận dạng là dấu chấm (.) Nếu bạn sử dụng

một dấu tách thập phân khác, như một số ứng dụng quốc tế dùng, hãy dùng hàm CDbl để thay thế

Bước 3: Viết thủ tục sau trong 1 Module.

Public Sub PhepChia()

frmPhepChia.Show

End Sub

Bước 4: Đưa thủ tục PhepChia ở bước 3 lên thanh công cụ.

+ Right click trên thanh menu chọn Customize Quick Access Toolbar…

+ Tại ô Choose commands from, chọn Macros Click mục PhepChia trong ô phía dưới Rồi click nút Add Click Ok.

+ Trên thanh menu sẽ xuất hiện 1 nút PhepChia Khi click vào nút này thì thủ tục PhepChia sẽ thực thi.

6) OptionButton / CheckBox : chọn 1 mục duy nhất / chọn nhiều mục cùng lúc.

+ Một vài thuộc tính quan trọng:

Value = True / False ⇔ chọn / không chọn.

Caption : chữ hiển thị.

Ví dụ 3 : đổi chữ hoa/thường cho các ô trong vùng chọn.

Bước 1: Tạo Form như hình sau.

Bước 2: Viết các sự kiện sau.

Private SubcmdClose _ Click ()

Unload frmChangeCase

End Sub

Private SubopbLower _ Click ()

Dim cell As Range

For Each cell In Selection

cell.Value = LCase(cell.Value)

Next cell

End Sub

Private SubopbProper _ Click ()

Dim cell As Range

Trang 34

For Each cell In Selection

cell.Value = Application.WorksheetFunction.Proper(cell.Value)

Next cell

End Sub

Private SubopbUpper _ Click ()

Dim cell As Range

For Each cell In Selection

cell.Value = UCase(cell.Value)

Next cell

End Sub

7) ListBox : hiển thị 1 danh sách các mục ( item ).

+ Một vài thuộc tính quan trọng:

MultiSelect :

0 : chỉ được chọn 1 mục.

1 : cho phép chọn nhiều mục bằng cách click vào các mục cần chọn.

2 : cho phép chọn nhiều mục bằng cách nhấn CTRL hoặc SHIFT và click vào các mục cần chọn

ListCount : tổng số mục có trong ListBox.

List : là mảng kiểu chuỗi, các phần tử được đánh chỉ số từ 0 đến (ListCount –1) Mỗi phần tử giữ

chuỗi ký tự của 1 mục.

Selected : đây là 1 mảng kiểu Boolean với số phần tử giống như thuộc tính List.

Selected(i) = true List(i) được chọn

Selected(i) = false List(i) không được chọn

+ Một vài phương thức :

Xóa tất cả các mục: <Tên ListBox> Clear

Thêm 1 mục vào ListBox: <Tên ListBox> AddItem < chuỗi >

Xóa 1 mục: <Tên ListBox> RemoveItem < index >

Ví dụ 4 :

Trang 35

Bước 1: Tạo Form có Name là frmListBox như hình sau.

Bước 2: Viết các sự kiện sau.

Private SubcmdAdd _ Click ()

Trang 36

Cấu trúc lệnh IF <ĐIỀU KIÊN >

Cấu trúc câu lệnh IF trong VBA sẽ giống như thế này:

Public Function VND(BAONHIEU)

Dim Ketqua, Sotien, Nhom, Dich, S1, S2, S3 As String

Dim I, j, Vitro As Byte, S As Double

Dim Hang, Doc, Dem

Sotien = Right(Space(15) & Sotien, 18)

Hang = Array("None", "trăm", "mươi", "gì đó")

Doc = Array("None", "ngàn tỷ", "tỷ", "triệu", "ngàn", "đồng", "xu")

Dem = Array("None", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín") For I = 1 To 6

Nhom = Mid(Sotien, I * 3 - 2, 3)

If Nhom <>Space(3) Then

Select Case Nhom

Case "000"

Trang 37

Dich = "mười" &Space(1)

Case 3 And S = 0 And Nhom <>Space(2) & "0"

Dich = Hang(j) & Space(1)

Case 3 And S = 5 And S2 <>Space(1) And S2 <> "0" Dich = "l" &Mid(Dich, 2) & Space(1)

Case 2 And S = 0 And S3 <> "0"

If (S1 >= "1" And S1 <= "9") Or (S1 = "0" And I = 4) Then Dich = "lẻ" &Space(1)

vitri = InStr(1, chu, "mươi một", 1)

If vitri > 0 Then Mid(chu, vitri, 9) = "mươi mốt"

Ketqua = Ketqua &chu

Public Sub TBINH()

Dim Diachi As String

Dim Traloi As Integer

Dim Otinh As Range

Dim Vungchon As Variant

Vungchon = Selection

Diachi = Selection.Address

Traloi = MsgBox(Diachi, vbYesNo)

Trang 38

If Traloi = 1 Then End

For Each Otinh In Selection.Cells

If Val(Otinh.Value) >= 5 Then With Otinh.Font

Trang 39

I4 :=ROUND(((C4*D4)+TAMGIAC(E4,F4,G4))*$C$25,-2)

J4 :=VLOOKUP(H4,DMT,2,0)

K4 :=ROUND(J4*I4,2)

K17:="kết toán số tiền là "&VND(K4)

Phím tắt để hiện ALT+F11 sẽ hiện lên cử sổ Microsoft Visuabasic

Phím tắt Alt+F8 ĐỂ hiện bảng Macro.

Ngày đăng: 19/11/2018, 19:44

TỪ KHÓA LIÊN QUAN

w