1. Trang chủ
  2. » Giáo án - Bài giảng

Hướng dẫn sử dụng VBA trong Excel

15 556 6

Đ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 15
Dung lượng 250,81 KB

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

Nội dung

Lưu ý một số khái niệm a Thuộc tính RANGE Thuộc tính Range trả về một đối tượng, có thể là một cell đơn lẻ hoặc một dãy gồm nhiều cell.. Trong lệnh gán giá trị của cell A1 vào cell A5 đư

Trang 1

Hướng dẫn sử dụng VBA trong Excel

1 Giới thiệu

Các phần mềm trong MS Office nói chung và Excel nói riêng là công cụ giúp chúng ta lưu trữ số liệu, xử lý số liệu trong quá trình làm việc rất hiệu quả, tiết kiệm thời gian, công sức Ngoài các hàm đơn giản được trang bị sẵn trong thư viện của Excel như hàm Sum(), Max(), Min(), Text(), Value(), Left(), Vlookup () Average() v.v Người sử dụng có thể lập trình, tạo ra các hàm, thủ tục phức tạp hơn theo nhu cầu

sử dụng bằng cách dùng công cụ VBA (Visual Basic for Application), dùng ngôn ngữ lập trình VB, nhúng vào các ứng dụng của Microsoft như MS Word, PowerPoint, Auto CAD v.v Ở đây chúng ta viết các hàm, thủ tục cho Microsoft Excel.

2 Vào ra chương trình, cài đặt để sử dụng hàm trong Excel

a Vào ra chương trình

Bước 1 Khởi động Microsoft Excel, tạo một workbook mới (hoặc dùng Book1 như mặc định) Chọn Tools\Macro\Visual Basic Editor để mở cửa sổ soạn thảo VBA

Trong cửa sổ Project Explorer (nếu không thấy thì chọn View Project Explorer để mở nó), chọn VBAProject (Book1) Chọn Insert Module để thêm một module.

Bước 2 Gõ nội dung hàm phepcong() vào module mới tạo.

Ví dụ:

Public Function Phepcong(x as double, y as double) as double

Phepcong = x + y

End Function

Bước 3 Chuyển sang cửa sổ Excel để kiểm tra hàm bằng cách thử gõ vào ô bất

kỳ, =Phepcong(x,y), kết quả trả về ô tương ứng là x+y Ví dụ: = Phepcong(2,3) kết quả trả về là 5.

b Cài đặt và sử dụng hàm trong Excel

Bước 1 Mô tả hàm để thuận tiện cho việc sử dụng Trong cửa sổ Excel, chọn menu Tools\Macro\Macros để hiển thị hộp thoại Macro Gõ tên hàm Phepcong vào ô

Macro name, rồi bấm Options để mở tiếp hộp thoại Macro Options, gõ nội dung mô tả

Trang 2

hàm vào ô Description, bấm OK để đóng hộp thoại Macro Options, cuối cùng bấm Cancel để đóng hộp thoại Macro.

Bước 2 Lưu Book1 vào máy với tên file, ví dụ MyFunctions.xla; Bạn lưu file này

đúng vị trí để mỗi lần MS Excel khởi động sẽ mặc định đưa ham vào thư viện chung,

để sẵn sàng sử dụng.

Ví dụ: Thư mục C:\Documents and Settings\Administrator\Application Data\

Microsoft\AddIns đối với MS 2003.

Đóng MS Excel mà không cần ghi lại các thay đổi trên Book1.

Bước 3 Dùng Windows Explorer để thêm mô tả cho Add-in bằng cách bấm chuột

phải trên tên tập tin MyFunctions.xla, chọn mục Properties để mở hộp thoại

Properties, chọn mục Summary để gõ mô tả vào ô Comments, gõ tên của Add-in vào ô Title Chọn nút OK để chấp nhận các thông tin.

Bước 4 Khởi động lại MS Excel, cài đặt add-in vừa tạo cho Excel bằng cách chọn menu Tools\Add-Ins để mở hộp thoại Add-Ins, chọn tên Add-in của ta trong danh sách Add-Ins available, rồi bấm chuột vào nút OK.

Từ đây trở về sau, mỗi lần mở MS Excel, mặc định bạn có thể dùng được hàm

Phepcong trong Add-in MyFunctions.xla.

3 Lưu ý một số khái niệm

a) Thuộc tính RANGE

Thuộc tính Range trả về một đối tượng, có thể là một cell đơn lẻ hoặc một dãy gồm nhiều cell Trong lệnh gán giá trị của cell A1 vào cell A5 đưới đây, Range trả về giá trị chỉ gồm 1 cell:

Worksheets("Sheet1").Range("A5").Value =

Worksheets("Sheet1").Range("A1").Value

Khi dùng với kiểu không xác định, Range trả về một dãy cell trên Sheet đang hoạt động Để tránh nhầm lẫn kiểu "Râu ông nọ cắm cằm bà kia", ta kích hoạt một bảng tính bằng phương pháp Activate trước khi dùng thuộc tính Range mà không cần chỉ ra giới hạn cụ thể Sau đây là cách điền vào vùng A1:H8 các số ngẫu nhiên bằng cách đặt công thức cho mỗi ô trong dãy mà trước đó Sheet1 đã được kích hoạt:

Trang 3

Range("A1:H8").Formula = "=rand()"

Chúng ta có thể đặt tên cho dãy cell và chỉ cho VBA tham chiếu đến tên này Ví

dụ, để ra lệnh xóa nội dung của một dãy có tên "Criteria" chúng ta viết:

Worksheets(1).Range("criteria").ClearContents

Nếu ta sử dụng một đối số (argument) mà đối số đó là địa chỉ dãy cell, thì phải định rõ địa chỉ đó theo kiểu A1 (nếu dùng kiểu R1C1 máy sẽ báo lỗi).

b) Thuộc tính Cells

Thuộc tính Cells sử dụng cú pháp Cells(row,column), với row là chỉ số hàng và column là chỉ số cột, để trả về một cell đơn lẻ Chẳng hạn, chúng ta có thể gán giá trị

24 cho cell A1 bằng lệnh:

Worksheets(1).Cells(1, 1).Value = 24

Và gán một công thức cho cell A2:

ActiveSheet.Cells(2, 1).Formula = "=sum(b1:b5)"

Cho dù chúng ta có thể dùng công thức Range("A1") để trả về cell A1 (không hề sai!), nhưng dùng thuộc tính Cells thì tiện lợi hơn bởi bạn có thể sử dụng một biến số đại diện cho hàng hoặc cột phục vụ yêu cầu lập trình Hãy tham khảo ví dụ tạo tiêu đề cột và hàng trên Sheet1 sau đây, lưu ý sau khi bảng tính đã được kích hoạt, thuộc tính Cells có thể được sử dụng thoải mái mà không cần khai báo một sheet cụ thể nào vì nó trả về một cell trên sheet hoạt động.

Sub SetUpTable()

Worksheets("sheet1").Activate

For theYear = 1 To 5

Cells(1, theYear + 1).Value = 1990 + theYear

Next theYear

For theQuarter = 1 To 4

Cells(theQuarter + 1, 1).Value = "Q" & theQuarter

Next theQuarter

End Sub

Trang 4

Mặc dù bạn có thể sử dụng những hàm xử lý chuỗi của Visual Basic để thay đổi tham chiếu kiểu A1, nhưng để dễ hiểu hơn và rèn luyện kỹ năng lập trình của mình, bạn nên sử dụng kiểu Cells(1, 1).

Nếu bạn sử dụng cú pháp expression.Cells(row,column), với expression là một biểu thức trả về một đối tượng Range, và row và column là vị trí tương đối so với góc trên trái của dãy cell thì kết quả trả về là một bộ phận của dãy Trong ví dụ dưới đây, VBA chỉ đến Cell(1,1) tức là cell C5 trên bảng tính:

Worksheets(1).Range("c5:c10").Cells(1, 1).Formula = "=rand()

c) Kết hợp Range and Cells

Phối hợp Range và Cells để tham chiếu đến một dãy cell, bạn hãy sử dụng cú pháp Range(cell 1, cell 2), với cell 1 và cell 2 là cell bắt đầu và cell kết thúc của dãy.

Để đặt kiểu đường viền cho các cell bạn dùng lệnh sau:

With Worksheets(1)

.Range(.Cells(1, 1), Cells(10, 10)).Borders.LineStyle = xlThick End With

Ở đây cần lưu ý đến dấu chấm đằng trước thuộc tính Cells Dấu chấm này quy định Worksheets(1) mà With đã nêu trước đó được áp dụng cho thuộc tính Cells để tiết kiệm chỗ và làm cho câu lệnh gọn hơn (nếu không có dấu chấm, thuộc tính Cells trả về các cell trên sheet hoạt động).

4 Một số ví dụ

Sau đây là một số ví dụ xử lý chuỗi và số trong trường học.

Option Explicit

Dim k As Long

Public luachon As Byte

Public newValue As Double

Public actCell As Range

Public formu As String

Public ass As String

Public first As Boolean

Function SoTCchuadat(Dayheso As Range, Daydiemthi As Range) As

Integer

' Xac dinh Co tin chi Chua dat (co Diem <=0.5)

Dim i As Integer

Trang 5

SoTCchuadat = 0.5

For i = 1 To Daydiemthi.Columns.Count

If (Daydiemthi.Columns.Cells(1, i) <= 0.5) Then SoTCchuadat = SoTCchuadat + Dayheso.Columns.Cells(i) End If

Next i

End Function

Function SoTCTL(Dayheso As Range, Daydiemthi As Range,

TrueORflase As Boolean) As Integer

Dim i As Integer

' Neu TrueORflase=true thi tra ve so Tin chi tich luy

' Neu TrueORflase=flase thi tra ve so Tin chi diem 0

SoTCTL = 0.5

If TrueORflase Then

For i = 1 To Daydiemthi.Columns.Count

If (Daydiemthi.Columns.Cells(1, i) > 0.5) Then SoTCTL = SoTCTL + Dayheso.Columns.Cells(i) End If

Next i Else

For i = 1 To Daydiemthi.Columns.Count

If (Daydiemthi.Columns.Cells(1, i) = 0.5) Then SoTCTL = SoTCTL + Dayheso.Columns.Cells(i) End If

Next i

End If

End Function

Public Function Loc(diem As String) As Byte

Dim lan1 As Byte

Dim lan2 As Byte

Dim s As String

If Not KiemtraDiem(diem) Then

Trang 6

MsgBox " Diem khong hop le"

Loc = 0

Exit Function

End If

For i = 1 To Len(diem)

If Mid(diem, i, 1) <> " " Then s = s & Mid(diem, i, 1)

Next i

diem = s

If KiemtraDiem(diem) Then

If Len(diem) = 4 Then

If Mid(diem, 1, 1) = "(" And Mid(diem, 3, 1) = ")" Then lan1 = Val(Mid(diem, 2, 1))

lan2 = Val(Mid(diem, 4, 1)) End If

If Mid(diem, 2, 1) = "(" And Mid(diem, 4, 1) = ")" Then lan1 = Val(Mid(diem, 1, 1))

lan2 = Val(Mid(diem, 3, 1)) End If

If lan1 > lan2 Then Loc = lan1 Else

Loc = lan2 End If

End If

If Len(diem) = 1 Then Loc = Val(diem)

If diem = "10" Then Loc = 10

If Len(diem) = 5 Then Loc = 10

End If

End Function

Public Function Tinh_TBC(Dayheso As Range, Daydiemthi As Range)

As Double

' Tinh diem Trung binh chung (TBC)

Dim Tongheso As Integer

Dim tam As Double

Dim i As Integer

Dim Nomon As Boolean

Dim tam2 As String

tam = 0

Tongheso = 0

Nomon = False

For i = 1 To Dayheso.Count

If Loc(Daydiemthi.Item(i).Value) < 5 Or

Loc(Daydiemthi.Item(i).Value) > 10 Then

Nomon = True End If

Tongheso = Tongheso + Dayheso.Item(i).Value

Trang 7

tam = tam + Dayheso.Item(i).Value *

Loc(Daydiemthi.Item(i).Value)

Next i

If Tongheso = 0 Then Tongheso = 1

Tinh_TBC = Round(tam / Tongheso, 2)

tam2 = Mid(Str(Tinh_TBC), 1, 5)

Tinh_TBC = Val(tam2)

End Function

Public Function Tinh_TBC_XLLop(Dayheso As Range, Daydiemthi As Range) As Double

' Tinh diem TBC va Xet len lop

Dim Tongheso As Integer

Dim tam As Double

Dim i As Integer

Dim Nomon As Boolean

Dim tam2 As String

tam = 0

Tongheso = 0

Nomon = False

For i = 1 To Dayheso.Count

Tongheso = Tongheso + Dayheso.Item(i).Value

tam = tam + Dayheso.Item(i).Value *

Loc(Daydiemthi.Item(i).Value)

Next i

If Tongheso = 0 Then Tongheso = 1

Tinh_TBC_XLLop = Round(tam / Tongheso, 2)

tam2 = Mid(Str(Tinh_TBC_XLLop), 1, 5)

Tinh_TBC_XLLop = Val(tam2)

End Function

Public Function doidiemTC(Diemso As Double) As String

' Chuyen Thang diem 10 sang Thang diem 4

If Diemso <= 1.9 Then doidiemTC = "0"

If 2 <= Diemso And Diemso <= 3.9 Then doidiemTC = "0.5"

If 4 <= Diemso And Diemso <= 4.4 Then doidiemTC = "1"

If 4.5 <= Diemso And Diemso <= 5.4 Then doidiemTC = "1.5"

If 5.5 <= Diemso And Diemso <= 6.9 Then doidiemTC = "2"

If 7 <= Diemso And Diemso <= 8.4 Then doidiemTC = "3"

If 8.5 <= Diemso And Diemso <= 10 Then doidiemTC = "4"

End Function

Public Function doidiemChu(Diemso As Double) As String

' Doi diem so sang Diem chu

Trang 8

If Diemso < 1.9 Then doidiemChu = "F"

If 2 <= Diemso And Diemso <= 3.9 Then doidiemChu = "F+"

If 4 <= Diemso And Diemso <= 4.4 Then doidiemChu = "D"

If 4.5 <= Diemso And Diemso <= 5.4 Then doidiemChu = "D+"

If 5.5 <= Diemso And Diemso <= 6.9 Then doidiemChu = "C"

If 7 <= Diemso And Diemso <= 8.4 Then doidiemChu = "B"

If 8.5 <= Diemso And Diemso <= 10 Then doidiemChu = "A"

End Function

Public Function Xeploai(TBC As Double) As String

' Xep loai

If TBC < 5 Then Xeploai = "Khong Dat"

If 5 <= TBC And TBC < 6 Then Xeploai = "Trung binh"

If 6 <= TBC And TBC < 7 Then Xeploai = "Trung binh kha"

If 7 <= TBC And TBC < 8 Then Xeploai = " Kha"

If 8 <= TBC And TBC < 9 Then Xeploai = " Gioi"

If 9 <= TBC And TBC <= 10 Then Xeploai = " Xuat sac"

End Function

Public Function XeploaiTCDiem4(TBC As Double) As String

If TBC < 2 Then TBC = "Khong Dat"

If 2 <= TBC And TBC <= 2.49 Then XeploaiTCDiem4 = "Trung binh"

If 2.5 <= TBC And TBC <= 3.19 Then XeploaiTCDiem4 = "Kha"

If 3.2 <= TBC And TBC <= 3.59 Then XeploaiTCDiem4 = "Gioi"

If 3.6 <= TBC And TBC <= 4 Then XeploaiTCDiem4 = "Xuat sac"

End Function

Public Function Xetlenlop(Sonamdahoc As Byte, DayhesoNam As

Range, DaydiemthiNam As Range, DayhesoKhoa As Range, DaydiemthiKhoa

As Range) As String

' Xet len lop

Dim TBC_Khoa As Double

Dim TBC_Nam As Double

Dim Tongso_DVHT_thieu As Byte

TBC_Nam = Tinh_TBC_XLLop(DayhesoNam, DaydiemthiNam)

TBC_Khoa = Tinh_TBC_XLLop(DayhesoKhoa, DaydiemthiKhoa)

So_DVHT_thieu = 0

For i = 1 To DaydiemthiKhoa.Count

If Loc(DaydiemthiKhoa.Item(i).Value) < 5 Or

Loc(DaydiemthiKhoa.Item(i).Value) > 10 Then

So_DVHT_thieu = So_DVHT_thieu + DayhesoKhoa.Item(i).Value

End If

Trang 9

Next i

Tongso_DVHT_thieu = So_DVHT_thieu

If Tongso_DVHT_thieu <= 25 And TBC_Nam >= 5 Then

Xetlenlop = "Lªn líp"

Else

If ((Tongso_DVHT_thieu > 25) Or (TBC_Nam < 5)) And ((TBC_Nam

< 3.5) Or (Sonamdahoc = 2 And TBC_Khoa < 4) Or (Sonamdahoc = 3 And TBC_Khoa < 4.5) Or (Sonamdahoc = 4 And TBC_Khoa < 4.8)) Then

Xetlenlop = "Th"i häc"

Else

Xetlenlop = "T¹m ngõng häc"

End If

End If

Xetlenlop = Xetlenlop & "; " & TBC_Nam & "; " & TBC_Khoa

& "; " & Tongso_DVHT_thieu

End Function

Public Function TachKetqua(Ketqua As String) As String

t = Ketqua

If Len(Ketqua) < 10 Then

TachKetqua = "'"

Else

For i = 1 To Len(Ketqua)

If Mid(t, i, 1) = ";" Then TachKetqua = Mid(t, 1, i - 1) Exit For

End If

Next i

End If

End Function

Public Function TachTBCKhoa(Ketqua As String) As String

If Len(Ketqua) < 10 Then

TachTBCKhoa = ""

Else

For i = 1 To Len(Ketqua)

For j = i + 1 To Len(Ketqua)

If Mid(Ketqua, i, 1) = ";" And Mid(Ketqua, j, 1) =

";" Then

TachTBCKhoa = Mid(Ketqua, i + 1, j - i - 1) Exit For

End If Next j Next i

End If

End Function

Trang 10

Public Function TachTBCNam(Ketqua As String) As String

If Len(Ketqua) < 10 Then

TachTBCNam = ""

Else

For i = 1 To Len(Ketqua)

If Mid(Ketqua, i, 1) = ";" Then Exit For

Next i

For j = i + 1 To Len(Ketqua)

If Mid(Ketqua, j, 1) = ";" Then Exit For Next j

TachTBCNam = Mid(Ketqua, i + 1, j - i - 1)

End If

End Function

Public Function TachSoDVHTthieu(Ketqua As String) As String

If Len(Ketqua) < 10 Then

TachSoDVHTthieu = ""

Else

For i = 1 To Len(Ketqua)

If Mid(Ketqua, i, 1) = ";" Then j = i

Next i

TachSoDVHTthieu = Mid(Ketqua, j + 1, Len(Ketqua) - j + 1) End If

End Function

Public Function KiemtraDiem(diem As String) As Boolean

Dim s As String

For i = 1 To Len(diem)

If Mid(diem, i, 1) <> " " Then s = s & Mid(diem, i, 1)

Next i

diem = s

KiemtraDiem = False

For i = 0 To 10

If diem = i Then

KiemtraDiem = True Exit Function End If

Next i

For i = 0 To 10

For j = 0 To 10

If diem = "(" & i & ")" & j Then KiemtraDiem = True

Exit Function End If

Next j

Trang 11

Next i

For i = 0 To 10

For j = 0 To 10

If diem = i & "(" & j & ")" Then KiemtraDiem = True

Exit Function End If

Next j Next i

End Function

Public Function Tach_Ten(Hoten As String) As String

On Error Resume Next

Dim dai As Byte

Dim tam As String

Hoten = Trim(Hoten)

dai = Len(Hoten)

i = dai

Do

If Mid(Hoten, i, 1) = " " Then Exit Do

i = i - 1

Loop Until i = 1

Tach_Ten = Trim(Mid(Hoten, i, dai - i + 1))

End Function

Public Function Tach_Ho(Hoten As String) As String

On Error Resume Next

Dim dai As Byte

Dim tam As String

Hoten = Trim(Hoten)

dai = Len(Hoten)

i = dai

Do

If Mid(Hoten, i, 1) = " " Then Exit Do

i = i - 1

Loop Until i = 1

Tach_Ho = Trim(Mid(Hoten, 1, i - 1))

End Function

Public Function Xet_TC_DuThi(Daydiemthi As Range) As String

Dim Nomon As Boolean

Xet_TC_DuThi = "Ko no mon"

Nomon = False

For i = 1 To Daydiemthi.Count

If Loc(Daydiemthi.Item(i).Value) < 5 Or

Loc(Daydiemthi.Item(i).Value) > 10 Then

Nomon = True

Ngày đăng: 01/02/2015, 14:00

TỪ KHÓA LIÊN QUAN

w