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.
Bạn đang xem nội dung tài liệu Hướng dẫn sử dụng VBA trong Excel, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Lê Thế Vinh, Phòng Đào tạo, Trường ĐHSP Kỹ thuật Vinh
Nghệ An, 5/2013 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ả
Lê Thế Vinh, Phòng Đào tạo, Trường ĐHSP Kỹ thuật Vinh
Nghệ An, 5/2013 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:
Lê Thế Vinh, Phòng Đào tạo, Trường ĐHSP Kỹ thuật Vinh
Nghệ An, 5/2013 3
Worksheets("sheet1").Activate
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
Lê Thế Vinh, Phòng Đào tạo, Trường ĐHSP Kỹ thuật Vinh
Nghệ An, 5/2013 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
Lê Thế Vinh, Phòng Đào tạo, Trường ĐHSP Kỹ thuật Vinh
Nghệ An, 5/2013 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
Lê Thế Vinh, Phòng Đào tạo, Trường ĐHSP Kỹ thuật Vinh
Nghệ An, 5/2013 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
Lê Thế Vinh, Phòng Đào tạo, Trường ĐHSP Kỹ thuật Vinh
Nghệ An, 5/2013 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
Lê Thế Vinh, Phòng Đào tạo, Trường ĐHSP Kỹ thuật Vinh
Nghệ An, 5/2013 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
Lê Thế Vinh, Phòng Đào tạo, Trường ĐHSP Kỹ thuật Vinh
Nghệ An, 5/2013 9
Next i
Tongso_DVHT_thieu = So_DVHT_thieu
If Tongso_DVHT_thieu = 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
Lê Thế Vinh, Phòng Đào tạo, Trường ĐHSP Kỹ thuật Vinh
Nghệ An, 5/2013 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
Lê Thế Vinh, Phòng Đào tạo, Trường ĐHSP Kỹ thuật Vinh
Nghệ An, 5/2013 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
Lê Thế Vinh, Phòng Đào tạo, Trường ĐHSP Kỹ thuật Vinh
Nghệ An, 5/2013 12
End If
Next i
If Nomon Then Xet_TC_DuThi = " * No mon *"
End Function
Public Function Tach_Ngay(Ngay As String) As String
On Error Resume Next
Dim dai As Byte
Dim tam As String
Ngay = Trim(Ngay)
dai = Len(Ngay)
i = 1
Do
If Mid(Ngay, i, 1) = "/" Then Exit Do
i = i + 1
Loop Until i = dai
Tach_Ngay = Trim(Mid(Ngay, 1, i + 1))
End Function
Public Function Tinh_TBC_Xet_HocBong(Dayheso As Range, Daydiemthi
As Range, diemRenLuyen As Double) As Double
Dim Tongheso As Integer
Dim tam As Double
Dim tamRL As Double
Dim i As Integer
Dim Nomon As Boolean
Dim tam2 As String
tamRL = diemRenLuyen
tam = 0
Tongheso = 0
Nomon = False
For i = 1 To Dayheso.Count
If Loc_DiemLan1(Daydiemthi.Item(i).Value) < 5 Or
Loc_DiemLan1(Daydiemthi.Item(i).Value) > 10 Then
Nomon = True
End If
Tongheso = Tongheso + Dayheso.Item(i).Value
tam = tam + Dayheso.Item(i).Value *
Loc_DiemLan1(Daydiemthi.Item(i).Value)
Next i
'If Nomon Then MsgBox "Cã sinh viªn: nî häc phÇn hoÆc ®iÓm
kh"ng hîp lÖ", vbCritical
If Tongheso = 0 Then Tongheso = 1
Tinh_TBC_Xet_HocBong = Round(tam / Tongheso, 2)
tam2 = Mid(Str(Tinh_TBC_Xet_HocBong), 1, 5)
Tinh_TBC_Xet_HocBong = Val(tam2) + tamRL
End Function
Lê Thế Vinh, Phòng Đào tạo, Trường ĐHSP Kỹ thuật Vinh
Nghệ An, 5/2013 13
Public Function Loc_DiemLan1(diem As String) As Byte
Dim lan1 As Byte
Dim lan2 As Byte
Dim s As String
If Not KiemtraDiem(diem) Then
'MsgBox " Diem khong hop le"
Loc_DiemLan1 = 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
Loc_DiemLan1 = lan1
End If
If Len(diem) = 1 Then Loc_DiemLan1 = Val(diem)
If diem = "10" Then Loc_DiemLan1 = 10
If Len(diem) = 5 Then Loc_DiemLan1 = 10
End If
End Function
Function MySumx(X As Range) As Double
Dim YY, z, zz As String
z = 0
Dim xzz
For Each YY In X
zz = YY
z = z + abc(zz)
Next YY
MySumx = z
End Function
Function abc(a As String) As String
Dim b, c
b = Pos(a, ")") + 1
c = Mid(a, b, Len(a))
Lê Thế Vinh, Phòng Đào tạo, Trường ĐHSP Kỹ thuật Vinh
Nghệ An, 5/2013 14
abc = c
End Function
Private Function Pos(st As String, substr As String) As Long
Dim a, b, c
a = Len(substr)
b = 0
For c = 1 To Len(st) - a + 1
If Mid(st, c, a) = substr Then
b = c
End If
Next c
Pos = b
End Function
Function MySum(Heso As Range, diem As Range, Optional
GiaTriThayThe As Double = 0) As Double
Dim Y As Range, z, zz
z = 0
zz = 0
Dim xzz As String, zxx As Double
For Each Y In diem
zz = zz + 1
xzz = abc(Y.Value)
zxx = Val(xzz)
If (zxx = 0) And (xzz "0") Then
zxx = GiaTriThayThe
End If
z = z + zxx * Heso(, zz)
Next Y
MySum = z
End Function
Function MyAverage(Heso As Range, Giatri As Range, Optional BoQua
As Boolean = False) As Double
Dim Y, z, zz, zzz, zxx, xzz
z = 0
zz = 0
zzz = 0
For Each Y In Heso
zz = zz + 1
xzz = abc(Giatri(, zz))
zxx = Val(xzz)
If Not (BoQua And (zxx = 0) And (xzz "0")) Then
zzz = zzz + Y
z = z + zxx * Y
End If
Next Y
Lê Thế Vinh, Phòng Đào tạo, Trường ĐHSP Kỹ thuật Vinh
Nghệ An, 5/2013 15
MyAverage = z / zzz
End Function
Function SoTC0(Dayheso As Range, Daydiemthi As Range) As Integer
'Xac dinh Tong so Tin chi cua cac hoc phan co Diem =0.
Dim i As Integer
SoTC0 = 0
For i = 1 To Daydiemthi.Columns.Count
If (Daydiemthi.Columns.Cells(1, i) = 0) Then
SoTC0 = SoTC0 + Dayheso.Columns.Cells(i)
End If
Next i
End Function
Function TBCTL4(Dayheso As Range, Daydiemthi As Range) As Double
'Ham tinh diem TBCTL thang 4, doi voi cac hoc phan co Diem>=1.0
Dim i As Integer
Dim soTC, tsoTC As Integer
TBCTL4 = 0#
tsoTC = 0
soTC = 0
For i = 1 To Daydiemthi.Columns.Count
If (Daydiemthi.Columns.Cells(1, i) >= 1#) Then
soTC = Dayheso.Columns.Cells(1, i)
TBCTL4 = TBCTL4 + Daydiemthi.Columns.Cells(1, i) *
soTC
tsoTC = tsoTC + soTC
End If
Next i
TBCTL4 = TBCTL4 / tsoTC
End Function
Chúc các bạn thành công!
Tài liệu tham khảo: Bản hướng dẫn này có sử dụng một số tài liệu từ Internet.
Các file đính kèm theo tài liệu này:
- hd_su_dung_vba_trong_excel_154.pdf