Bài 7.3. Hàm về Toán học (1 người xem)

  • Thread starter Thread starter befaint
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

befaint

|||||||||||||
Tham gia
6/1/11
Bài viết
14,581
Được thích
19,782
(Danh mục các hàm trong VBA)

3. Hàm về Toán học

3.1. ABS
PHP:
Abs(Number) 'As Double'
Trả về giá trị tuyệt đối của một số.
PHP:
Sub ABS_Fn()
    Dim mValue As Double
    mValue = Abs(-2.3)
    MsgBox mValue
End Sub
3.2. ATN
PHP:
Atn(Number As Double) 'As Double'
Trả về giá trị của phép tính ATAN trong Toán, từ -Pi/2 tới Pi/2.
PHP:
Sub ANT_Fn()
    Dim mValue As Double
    mValue = Atn(90)
End Sub
3.3. COS
PHP:
Cos(Number As Double) 'As Double'
Trả về giá trị của phép tính Cosine của một góc trong Toán (-1 tới 1).
PHP:
Sub COS_Fn()
    Dim mValue As Double
    mValue = Cos(0)
End Sub
3.4. EXP
PHP:
Exp(Number As Double) 'As Double'
Trả về giá trị lũy thừa của cơ số e (e là hằng số toán học, xấp xỉ 2.718).
PHP:
Sub EXP_Fn()
    Dim mValue As Double
    mValue = Exp(1)
    MsgBox mValue
End Sub
3.5. FIX
PHP:
Fix(Number)
Trả về phần số nguyên của một số.
Nếu Number là số âm, Fix trả về số nguyên âm đầu tiên lớn hơn hoặc bằng Number.
Ví dụ: Fix(-5.2) = -5
PHP:
Sub FIX_Fn()
Dim mValue As Double
mValue = Fix(254821.564)
MsgBox mValue
End Sub
3.6. FORMAT NUMBERS
PHP:
Format (Expression, [Format ]) 'As String'
Định dạng một số dưới dạng chuỗi.
Expression: Giá trị cần định dạng
Format: Tùy chọn định dạng đưa vào. Gồm:
03.png
PHP:
Sub FORMAT_Fn()
    Dim mValue As String
    mValue = Format(0.994, "Percent")
    MsgBox mValue  'Result: 99.40% '
End Sub
3.7. INT
PHP:
Int(Number) 'As Double'
Trả về phần số nguyên của một số.
Nếu Number số là âm, hàm Int trả về số nguyên âm đầu tiên nhỏ hơn hoặc bằng Number.
Ví dụ: Int(-5.2) = -6
PHP:
Sub INT_Fn()
    Dim mValue As Double
    mValue = Int(100.62)
    MsgBox mValue  'Result: 100 '
End Sub
3.8. LOG
PHP:
Log(Number As Double) 'As Double'
Trả về giá trị của phép tính Logarit tự nhiên của một số (Log cơ số e hay Ln(x)).
PHP:
Sub LOG_Fn()
    Dim mValue As Double
    mValue = Log(Exp(1))
    MsgBox mValue   'Result: 1 '
End Sub
3.9. RANDOMIZE
PHP:
Randomize([Number])
Được sử dụng để thay đổi giá trị nguồn được sử dụng bởi máy tạo số ngẫu nhiên cho hàm RND.
Không bắt buộc. Là một số sẽ được sử dụng bởi hàm RND để tạo ra một số ngẫu nhiên.
PHP:
Sub RANDOMIZE_Fn()
    Dim LRandomNumber As Integer
    Randomize
    LRandomNumber = Int(Rnd * 50 + 20)
    MsgBox LRandomNumber
End Sub
3.10. RND
PHP:
RND
Để tạo ra một số ngẫu nhiên giữa 0-1
PHP:
Sub RND_Fn()
    Dim i As Long
    For i = 1 To 5
        MsgBox Rnd
    Next i
End Sub
Tạo số ngẫu nhiên giữa 2 số nguyên:
Int ((upperbound - lowerbound + 1) * Rnd + lowerbound)
PHP:
Sub Vidu()
    Dim LRandomNumber
    LRandomNumber = Int((10 - 1 + 1) * Rnd + 1)
    'Tao so ngau nhien tu 1-10
End Sub
3.11. ROUND
PHP:
Round(Number, [NumDigitsAfterDecimail As Long]) 'As Double
Làm tròn một số đưa vào.
Number: Số cần làm tròn.
NumDigitsAfterDecimail: Không bắt buộc. Là số chữ số cần lấy ở phần thập phân. Nếu bỏ qua tham số này thì kết quả trả về một số nguyên.
PHP:
Sub ROUND_Fn() 'Note: Hàm Round() trong VBA luôn làm tròn lên '
    Dim mValue As Double
    mValue = Round(90.665, 2)   '90.66 '
    mValue = Round(90.6651, 2)   '90.67 '
    mValue = Round(90.665, 1)   '90.7 '
    mValue = Round(90.665)   '91 '
End Sub
Lưu ý: Hàm Round trong VBA hoạt động khác với hàm Round trên bảng tính (WorksheetFunction).
Tham khảo thêm các bài sau: Bài #8 và #10

3.12. SGN
PHP:
Sgn(Number) 'As Integer'
Trả về dấu của một số
Nếu Number >0 thì kết quả =1
Nếu Number =0 thì kết quả =0
Nếu Number <0 thì kết quả =-1
PHP:
Sub SGN_Fn()
    Dim mValue As Integer
    mValue = Sgn(-2)
    MsgBox mValue  'Result: -1 '
End Sub
3.13. SIN
PHP:
Sin(Number As Double) 'As Double'
Trả về giá trị của phép tính Sine của một góc trong Toán, từ -1 tới 1.
PHP:
Sub SIN_Fn()
    Dim mValue As Double
    mValue = Sin(0)
    MsgBox mValue
End Sub
3.14. SQR
PHP:
Sqr(Number As Double) 'As Double'
Trả về kết quả của phép toán căn bậc 2 của số cần tính.
Number: Số cần tính căn bậc 2, với điều kiện >=0
PHP:
Sub SQR_Fn()
    Dim mValue As Double
    mValue = Sqr(16)
    MsgBox mValue  'Result: 4 '
End Sub
3.15. TAN
PHP:
Tan(Number As Double) 'As Double'
Trả về giá trị của phép tính Tan của một góc trong Toán.
PHP:
Sub TAN_Fn()
    Dim mValue As Double
    mValue = Tan(5)
    MsgBox mValue
End Sub
 
Lần chỉnh sửa cuối:
1. Hàm Sgn, Int, Fix, và Abs có ứng dụng đặc biệt của chúng. Bạn có thể nêu ra.

2. Cần thêm chi tiết về cặp Randomize và Rnd. Ở diễn đàn này có nhiều bài ứng dụng, tốt hơn hết bạn tìm một vài bài tiêu biểu dễ hiểu và cho link vào.

3. Hàm Round có điểm cần lưu ý. Cũng nên nêu rõ điểm ấy ra.
 
Upvote 0
Xin góp 1 chút ý kiến với chủ Topic về hàm Round.

Trong phần hướng dẫn hàm Round chủ Topic có chú thích
Sub ROUND_Fn() 'Note: Hàm Round() trong VBA luôn làm tròn lên '
Chú thích này bạn nên xem lại.
Theo hướng dẫn tại:
https://msdn.microsoft.com/en-us/li...aspx?cs-save-lang=1&cs-lang=vb#code-snippet-5

Thì hàm Round này sẽ làm tròn tới số chẵn gần nhất, tức là Round(6.65,1) => 6.6 chứ không phải là làm tròn lên 6.7

Trường hợp này tôi đã gặp nhiều khi viết một số ứng dụng liên quan tới xử lý số liệu đặc biệt là liên quan tới tài chính, nó sẽ xảy ra sự sai khác khiến người sử dụng không biết sai tại chỗ nào.
 
Upvote 0
Xin góp 1 chút ý kiến với chủ Topic về hàm Round.

Trong phần hướng dẫn hàm Round chủ Topic có chú thích

Chú thích này bạn nên xem lại.
Theo hướng dẫn tại:
https://msdn.microsoft.com/en-us/li...aspx?cs-save-lang=1&cs-lang=vb#code-snippet-5

Thì hàm Round này sẽ làm tròn tới số chẵn gần nhất, tức là Round(6.65,1) => 6.6 chứ không phải là làm tròn lên 6.7

Trường hợp này tôi đã gặp nhiều khi viết một số ứng dụng liên quan tới xử lý số liệu đặc biệt là liên quan tới tài chính, nó sẽ xảy ra sự sai khác khiến người sử dụng không biết sai tại chỗ nào.

Hàm Round của VBA là hàm của Access. Nó hoạt động như thế chính là vì lý do tài chính. Điều này tôi đã từng giải thích cặn kẽ ở diễn đàn này rồi.
Nếu muốn hoạt động giống toán thì phải dùng hàm của worksheet (chập và tiền tố Worksheetfunction)
 
Upvote 0
Thì hàm Round này sẽ làm tròn tới số chẵn gần nhất, tức là Round(6.65,1) => 6.6 chứ không phải là làm tròn lên 6.7
Đưa tài liệu tham khảo thì đã đọc chưa?
"MidpointRounding.AwayFromZero"

Hàm Round() anh VetMini có bài giải thích rồi...
Trường hợp này tôi đã gặp nhiều khi viết một số ứng dụng liên quan tới xử lý số liệu đặc biệt là liên quan tới tài chính, nó sẽ xảy ra sự sai khác khiến người sử dụng không biết sai tại chỗ nào.
Không biết sao dám dùng???
 
Upvote 0
Đưa tài liệu tham khảo thì đã đọc chưa?
"MidpointRounding.AwayFromZero"

Hàm Round() anh VetMini có bài giải thích rồi...

Không biết sao dám dùng???
Có vẻ như bạn quá tự tin vào mình, tự tin tới mức cấu trúc ngữ pháp cơ bản của Việt Nam mà cũng áp dụng không đúng.
Mã:
Chủ ngữ + vị ngữ

Trên quan điểm góp ý và đưa ý kiến để cùng phát triển, còn nếu bạn không muốn nghe thì đó là quyền của bạn. Việc dám dùng hay không dám dùng là quyền của tôi. Vậy nhé!

Chúc bạn thành công!
 
Upvote 0
1. Hàm Sgn, Int, Fix, và Abs có ứng dụng đặc biệt của chúng. Bạn có thể nêu ra.

2. Cần thêm chi tiết về cặp Randomize và Rnd. Ở diễn đàn này có nhiều bài ứng dụng, tốt hơn hết bạn tìm một vài bài tiêu biểu dễ hiểu và cho link vào.

3. Hàm Round có điểm cần lưu ý. Cũng nên nêu rõ điểm ấy ra.
Mục 3: Em đã bổ sung ở trên bài đầu.
Mục 2: Em tìm trong bài "Tạo dẫy số ngẫu nhiên không trùng" (bài #20), có thấy áp dụng kết hợp Rnd với Randomize.

Anh chỉ thêm mục 1-2 cho em với.
 
Upvote 0
Rnd là hàm lấy số ngẫu nhiên. Con số ngẫu nhiên nó trả về là một số thực có giá trị khoảng 0 -> 1
Tuy nhiên, hàm lấy số ngẫu nhiên là mọt hàm ứng dụng lý thuyết chuỗi (Taylor) cho nên nó cần có một hạt giống (seed) để bắt đầu.
Theo luật chung của các ngôn ngữ, hạt giống này được mặc định trong hệ thống.
Nếu ta chỉ dùng hàm Rnd thuần tuý thì hạt giống mặc định sẽ cho ra dãy số ngẫu nhiên mặc định. Tức là hôm nay bạn chạy hàm Rnd 3 lần, được 3 số x1, x2, x3 thì ngày mai, chạy lại bạn cũng được đúng 3 số x1, x2, x3 như thế.
Để có thể lấy dãy số ngẫu nhiên khác, bạn phải buộc nó dùng hạt giống khác. và đó là nhiệm vụ của hàm Randomize. Một khi bạn gọi hàm này thì hạt giống Rnd sẽ đổi.

vd code:
sub abc()
' hạt giống mặc định
x1 = Rnd
x2 = Rnd
x3 = Rnd
msgbox x1 & "," & x2 & "," x3
' dùng hàm randomize để đổi hạt giống
Randomize
x1 = Rnd
x2 = Rnd
x3 = Rnd
msgbox x1 & "," & x2 & "," x3
End Sub

Bạn chạy code này và ghi lại trị lần thứ nhất và lần thứ hai.
Xong bạn tắt VBA và Excel. Mở ra trở lại và so sánh kết quả.
Cú mỗi lần mở lại, bạn sẽ thấy trị đợt đầu in hệt nhau, nhưng đợt sau thì thay đổi. Lý do là đợt đầu Rnd dùng hạt giống mặc định, và đợt sau thì Randomize đã buộc nó sang hạt giống khác.
 
Upvote 0
Anh chỉ thêm mục 1-2 cho em với.
Ứng dụng đặc biệt của Sgn, Fix, Abs:

Tiêu đề của thớt này có từ "toán học". Vì vậy tôi dẫn 1 vài ứng dụng điển hình toán học của các hàm này.

Trong toán, hàm Sgn cũng có thể dùng để đổi 1 số thành số dương.
x * Sgn(x) = Abs(x)
Ứng dụng điển hình nhất của hàm Sgn là xét xem 2 số có cùng dấu
Sgn(x) = Sgn(y) -> x,y cùng âm hoặc cùng dương hoặc cùng 0
Sgn(x) = Sgn(Abs(x)) -> x >= 0
Việc xét cùng dấu này là một điều kiện quan trọng trong các phép giải phưong trình.

Trong toán số thực, hàm Fix là hàm cổ điển dùng để "chặt khúc đuôi của số". Nói nôm na là "lấy phần nguyên, bỏ phần lẻ"
Fix(x) luôn luôn trả về phần nguyên của số, bất luận điều kiện gì (khác với Int, trả về tuỳ theo phần lẻ và tuỳ theo dấu)

Cũng trong toán số thực, như tôi đã nhắc nhở nhiều lần, một số thực khong thể đảm bảo độ chính xác 100%. Ngay cả số hữu tỷ, máy tính thông thường không thể đảm bảo chứa được chính xác số n/m.
x = n/m
x * m = n : chưa chắc !!!
bạn chỉ đảm bảo được khi chấp nhận một sai số
x * m = n (+-)e; với e <= E, sai số chấp nhận
Vì vậy, trong toán số thực, để so sánh 2 số, ngừoi ta luôn luôn áp dụng sai số:
x = y phải chấp nhận là
x = y (+-)e
x - y = (+-)e
Để có thể thực hiện dấu (+-)e, ta cần áp dụng hàm Abs
Abs(x-y) <= E
Biểu thức này là biểu thức căn bản không thể thiếu khi làm toán số thực. Một chương trình luôn luôn đặt con số giới hạn E = 10 ^ -n (n tuỳ thích) trước

Lưu ý từ "cổ điển" bên trên. Tôi dùng chúng để nhấn mạnh rằng hầu hết các ngôn ngữ, các hệ thống đều đồng ý với nhau về quy luật này.
Toán số thực phát triển từ ngôn ngữ FORTRAN do IBM đưa ra thời máy tính mới ra đời. Một số căn bản vẫn còn giữ cho đến ngày nay
 
Upvote 0
Ứng dụng đặc biệt của Sgn, Fix, Abs:

Tiêu đề của thớt này có từ "toán học". Vì vậy tôi dẫn 1 vài ứng dụng điển hình toán học của các hàm này.

Trong toán, hàm Sgn cũng có thể dùng để đổi 1 số thành số dương.
x * Sgn(x) = Abs(x)
Ứng dụng điển hình nhất của hàm Sgn là xét xem 2 số có cùng dấu
Sgn(x) = Sgn(y) -> x,y cùng âm hoặc cùng dương hoặc cùng 0
Sgn(x) = Sgn(Abs(x)) -> x >= 0
Việc xét cùng dấu này là một điều kiện quan trọng trong các phép giải phưong trình.

Trong toán số thực, hàm Fix là hàm cổ điển dùng để "chặt khúc đuôi của số". Nói nôm na là "lấy phần nguyên, bỏ phần lẻ"
Fix(x) luôn luôn trả về phần nguyên của số, bất luận điều kiện gì (khác với Int, trả về tuỳ theo phần lẻ và tuỳ theo dấu)

Cũng trong toán số thực, như tôi đã nhắc nhở nhiều lần, một số thực khong thể đảm bảo độ chính xác 100%. Ngay cả số hữu tỷ, máy tính thông thường không thể đảm bảo chứa được chính xác số n/m.
x = n/m
x * m = n : chưa chắc !!!
bạn chỉ đảm bảo được khi chấp nhận một sai số
x * m = n (+-)e; với e <= E, sai số chấp nhận
Vì vậy, trong toán số thực, để so sánh 2 số, ngừoi ta luôn luôn áp dụng sai số:
x = y phải chấp nhận là
x = y (+-)e
x - y = (+-)e
Để có thể thực hiện dấu (+-)e, ta cần áp dụng hàm Abs
Abs(x-y) <= E
Biểu thức này là biểu thức căn bản không thể thiếu khi làm toán số thực. Một chương trình luôn luôn đặt con số giới hạn E = 10 ^ -n (n tuỳ thích) trước

Lưu ý từ "cổ điển" bên trên. Tôi dùng chúng để nhấn mạnh rằng hầu hết các ngôn ngữ, các hệ thống đều đồng ý với nhau về quy luật này.
Toán số thực phát triển từ ngôn ngữ FORTRAN do IBM đưa ra thời máy tính mới ra đời. Một số căn bản vẫn còn giữ cho đến ngày nay
Kiến thức của bạn về tin học quá tuyệt, giới thiệu cho mình các sách bạn viết để mình học hỏi thêm /-*+/
 
Upvote 0
................................
Để có thể thực hiện dấu (+-)e, ta cần áp dụng hàm Abs
Abs(x-y) <= E
Biểu thức này là biểu thức căn bản không thể thiếu khi làm toán số thực. Một chương trình luôn luôn đặt con số giới hạn E = 10 ^ -n (n tuỳ thích) trước

Lưu ý từ "cổ điển" bên trên. Tôi dùng chúng để nhấn mạnh rằng hầu hết các ngôn ngữ, các hệ thống đều đồng ý với nhau về quy luật này.
Toán số thực phát triển từ ngôn ngữ FORTRAN do IBM đưa ra thời máy tính mới ra đời. Một số căn bản vẫn còn giữ cho đến ngày nay
Cái này hình như định nghĩa theo kiểu exsilon phải không bác Vẹt ?
 
Upvote 0
Web KT

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

Back
Top Bottom