Xin giới thiệu các hàm thường gặp trong VBA

Liên hệ QC

anhtuan1066

Thành viên gạo cội
Tham gia
10/3/07
Bài viết
5,802
Được thích
6,912
Chào các bạn!
Trên GPE tôi thấy có giới thiệu các hàm thông dụng cũng như cách sử dụng... Vậy xin các cao thủ nhín chút thời gian giới thiệu về các hàm thông dụng nhất trong VBA (tôi gọi nó là hàm vì ko biết phải gọi như thế nào mới đúng)...
Lấy ví dụ: Hàm MOD của công thức Excel sẽ tương đương với cái gì trong VBA? Cách dùng như thế nào? vân vân và vân vân...
Những người mới học lập trình như tôi thường rất lúng túng.. làm bằng công thức Excel thì dc, nhưng chuyển sang VBA lại ko biết viết tương đương như thế nào, đành phải dùng lệnh gọi hàm, như thế có vẽ ko chuyên nghiệp lắm
Có thể chỉ thêm cái nào có trong công thức Excel lại ko có trong VBA và ngược lại... vân vân...
(Tôi nghĩ khoảng vài ba ngày giới thiệu 1 hàm... ta có trong tay khoảng độ từ 20 đến 50 hàm là có thể tung hoàng ngang dọc rồi)
Vô cùng cảm ơn!
ANH TUẤN
 
Chị HanDung107 có một bài hay lắm nè anh:
Hàm VBA & các thủ tục thông dụng về File, Workbook, Worksheet

w015.gif
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi đã có xem qua, nhưng nói chung là mấy cái đó chỉ giúp dc cho người khá rành về VBA rồi.. chứ như tôi nhìn vào như trời 30...
Tôi cần những cái thực tế hơn... Tôi lấy ví dụ nhé:
1> Hàm COUNT viết trong VBA như thế nào?
2> Hàm MOD......?
3> Hàm DATE....?
4> MONTH...?
5> DAY...?
6> YEAR...?
7> INT...?
Nói chung là những cái tôi thường xử dụng hàng ngày trong công thức Excel, giờ nếu viết bằng VBA thì tương đương là cái gì?
Mong các cao thủ quan tâm giùm 1 chút... Cứ mỗi lần viết code, đụng đến hàm nào đó lý ra viết rất dễ dàng bằng công thức, nhưng giờ lại chẳng biết diển giãi thế nào trong VBA, đành phải hỏi lung tung...
Ko biết các bạn có hiểu tôi nói ko nhỉ? (vì ko biết giãi thích thế nào ý tưởng của mình... đang kém về VBA mà)
Mến
ANH TUẤN
 
Upvote 0
Em nghĩ viết bằng cái gì chẳng được, anh cứ viết bằng công thức miễn là giải quyết được bài toán thôi. Riêng em hơi dốt về Excel nên không biết so sánh giữa công thức và VBA thế nào nữa, xin liệt kê một số hàm về Date and time nhé:
Now() = current system date and time
Date() = current date, integral date part
Time() = current time, fractional date part
Timer() = number of seconds since midnight, with fractional seconds
Day(#12/25/02#) = 25, the day as Integer
Month(#12/25/02#) = 12, the month as Integer
Year(#12/25/02#) = 2002, the year as Integer
Weekday(#12/25/02#) = 4 (Sunday = 1)
Hour(35656.52) = 12 (Time 12:28:48)
...
 
Upvote 0
Bác ANHTUAN ơi!
Bác chỉ cần right-click vào VBA, rồi chọn cái Object Browser là ra ngay á mà.

Cái này nè:

011.jpg


Có một cái, gồm rất nhiều hàm tương tự cách xài ngoài Excel: WorkSheetFunction

012.jpg


w015.gif
 
Lần chỉnh sửa cuối:
Upvote 0
Hàm trong VBA, những vấn đề chung

Tìm kho chứa các hàm của VBA:
Tại trang tính đang mở ta có thể đến cửa sổ (CS) Microsoft Visual Basic (MVB) ít nhất bằng 2 cách sau:
* Bấm tổ hợp ALT +{F11}
* Phải chuột vô ô trái nhất trên thanh menu & chọn dòng cuối (View Code )
Tại CS MVB ta vô tiếp menu View -> Object Browser; Kết quả là CS Object Browser xuất hiện
Chúng ta có thể dùng sự trợ giúp của CS này để tìm hiểu các hàm của VBA giống như chúng ta tìm hiểu các hàm trong excel;

Ví dụ để tìm họ các hàm về thời gian, chúng ta tìm trong ngăn Classes dòng Date Time
Lúc đó bên ngăn Members of 'Date Time' sẽ liệt kê toàn bộ các hàm, về thời gian; Hơn nữa, phía dưới trái nhất của CS sẽ giới thiệu ngắn gọn về 1 hàm mà dòng này đang được kích hoạt
( Kết quả của chúng ta thu được là 14 hàm;)
Trong đó có rất nhiều hàm gần giống với hàm trong excel;

Một cách khác, một khi ta biết chắc là ai đó dùng hàm của VBA mà ta chưa rõ & muốn tìm hiểu về nó. VD ta cần tìm hiểu về hàm InStr;
Dưới từ VBA mà ta chọn ban nãy, ta nhập cụm từ InStr
Liền lập tức CS Search Results sẽ đưa ra các lựa cho cho ta tùy nghi sử dụng;
Theo tôi, mỗi ngày hay mỗi tuần một ít, tích góp chúng ta sẽ có ít vốn tích lũy lâu dài sẽ dùng đến!
. . . .
Điều cuối cùng mình muốn nói là hàm nào chúng ta hay xài trong excel, thì thử tìm hiểu hàm tương tự trong VBA!;
Tuy nhiên sẽ khó có những hàm chỉ số dòng hay số cột trong trang tính; lúc đó ta lại phải dùng cú pháp sử dụng hàm excel trong VBA

Chúc vui!
 
Lần chỉnh sửa cuối:
Upvote 0
Int(x) trả về phần nguyên của X

MOD,DIV: Không có hàm mod và div
nhưng có phép toán MOD, và div (\) đó là phép toán chia dư, và chia nguyên
vd:
8 mod 3 cho kQ: 2
11 \ 3 cho kQ: 3 (không viết DIV)

ADDRESS, COLUM, ROW,... trong VBA nó là các thuộc tính của các đối tượng RANGE, SHEET,... -> Muốn dùng ta dùng đối tượng này rồi thêm dấu chấm (.) VBA sẽ liệt kê các thuộc tính của nó lun rất trực quan , VD như:

Range("C4").Column -> kết quả là 3
Range("C4").Row -> kết quả là 4
 
Lần chỉnh sửa cuối:
Upvote 0
Có 2 cách dùng công thức trong VBA:

+ Application.WorksheetFunction

Ví dụ: Application.WorksheetFunction.DcountA
Cách này chỉ dùng với một số hàm nhất định

+ ActiveCell.FormulaR1C1

Ví dụ: ActiveCell.FormulaR1C1 = "=SUM(R[-2]C:R[-2]C[4])"

Cách này đựoc với mọi công thức mà bác hay dùng trong bảng tính, tuy nhiên nhiên nếu dữ liệu lớn thì sẽ rất nặng và tốc độ xử lý của bảng tính rất chậm. Do đó nêu trong trường hợp dữ liệu lên đến hàng nghìn dòng thì bác cần Copy dữ liệu sau khi điền công thức sau đó Paste lại bằng phương thức: PasteSpecial (xlPasteValues). VD: ActiveCell.PasteSpecial (xlPasteValues)
 
Upvote 0
Cái này là mình bị rồi mới biết:
Hàm replace() của VBA không giống replace() của Excel mà giống y substitute(): replace(string, oldstring, newstring).
Chủ đề này rất hay vì khi biết các hàm tương đương của VBA tương ứng với hàm nào của Excel, mình xách function VBA trong Excel đi xài trong Access được. Mong các bạn nối tiếp.
 
Upvote 0
Để hàm Replace() có nhiều tùy chọn hơn

Macro sau sẽ thay toàn bộ danh sách tại cột B (từ B2) những từ lỡ nhập
Nguyễn T. An => Nguyễn Thị An
Lê V. Thanh => Lê Văn Thanh
Trần t. Nu => Trần thị Nu

PHP:
Option Explicit
Sub ThayDem()
 Dim Rng As Range, iJ As Long, lRow As Long, bVTri As Byte
 ' Dòng cuối cột "B" : '
 lRow = Cells(65432, 2).End(xlUp).Row 
 
 For iJ = 2 To lRow
    Set Rng = Cells(iJ, 2)
    bVTri = InStr(Rng, ".")
    If bVTri > 0 Then
7 '       Rng.Offset(, 1) = ThayChu(Rng, bVTri) '
8        Rng.Offset(, 1) = Replace(Rng, ".", ChuCai(Mid(Rng, bVTri - 1, 1)))
    End If
 Next iJ
End Sub
PHP:
Function ChuCai(StrC As String) As String
 ChuCai = UCase$(ChuCai)
 If StrC = "T" Then
    ChuCai = "h?"
 ElseIf StrC = "V" Then
    ChuCai = "?n"
 Else
    ChuCai = ""
 End If
End Function

Bạn nào thử viết hàm ThayChu() (Tại dòng lệnh 7)
để có thể thay thế cho dòng lệnh 8 dùm nha!
 
Lần chỉnh sửa cuối:
Upvote 0
Coi như bài tập, tớ giải thử, bạn xem giúp nhé
Mã:
Sub ThayDem() 
Dim Rng As Range, iJ As Long, lRow As Long, bVTri As Byte
 Dim Tat(1 To 3), The(1 To 3) As String
 lRow = Cells(65432, 2).End(xlUp).Row
Tat(1) = "T." 
The(1) = "Thi"  
Tat(2) = "H."  
The(2) = "Huu"  
Tat(3) = "V."  
The(3) = "Van" 
For iJ = 2 To lRow 
   Set Rng = Cells(iJ, 2)  
  bVTri = InStr(Rng, ".")  
  For iK = 1 To 3     
   If Mid(Rng, bVTri - 1, 2) = Tat(ik) Then          
     Rng.Offset(, 1) = Replace(Rng, Tat(ik), The(ik))      
    End If 
   Next iK
 Next iJ
End Sub
Bạn xem giúp: Tại sao nếu không có If, kết quả chỉ thay 1 trong số 3 giá trị của Tat() bằng The() ? Thí dụ chỉ thay V. bằng Van, các chữ khác không thay?
 
Lần chỉnh sửa cuối:
Upvote 0
. . . xem giúp: Tại sao nếu không có
Mã:
 If Mid(Rng, bVTri - 1, 2) = Tat(ik) Then      
    
 End If
thì kết quả chỉ thay 1 trong số 3 giá trị của Tat() bằng The() ? Thí dụ chỉ thay V. bằng Van, các chữ khác không thay?
Bạn thử thêm câu lệnh sau, để kiểm tra các biến í mà!
Mã:
 MsgBox Tat(iK) , , iK
 
Upvote 0
Hiểu rồi, thank bạn. Là do Replace thay đủ 3 lần, chữ "Van" là phần tử thứ 3 thay sau chót nên còn giữ kq, các phần tử khác thay xong lại bị thay bằng thứ khác, không có thứ khác thì để nguyên.
 
Upvote 0
Hoặc thêm 1 biến tạm Newvalue:
Mã:
 ' Phần code chính
For iJ = 2 To lRow
   Set Rng = Cells(iJ, 2)
  bVTri = InStr(Rng, ".")
  Newvalue = Rng
  For iK = 1 To 3
  Newvalue = Replace(Newvalue, Tat(iK), The(iK))
   Next iK  
   Rng.Offset(, 1) = Newvalue
 Next iJ
 
Lần chỉnh sửa cuối:
Upvote 0
em được học là hàm trong excel và trong VBA là khác nhau. Trong VBA muốn sử dụng hàm trong excel thì dùng thuộc tính worksheetFunction, còn muốn biết các hàm trong VBA sử dụng như thế nào thì vào xem help: F1/Microsoft Visual Basic Documentation/Visual Basic Language Reference/Functions (tất cả các hàm trong VBA đều có hết)
 
Upvote 0
Ai có thể cho mình biết đoạn chương trình này làm gì vây? mong lắm những dòng hồi âm


Private Sub SwapQuestions()
Dim i As Integer
Dim ran As Integer
Dim arr() As Integer
ReDim arr(intTotalQues)

For i = 1 To intTotalQues
arr(i) = i
Next i

For i = 1 To intTotalQues
Randomize
ran = Int(UBound(arr) * Rnd + 1)
arrSTT(i) = arr(ran)
DeleteArrayElement arr, ran
Next i
'MsgBox "zzz"

End Sub
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom