- Tham gia
- 17/8/08
- Bài viết
- 8,662
- Được thích
- 16,725
- Giới tính
- Nam
Tách
Hình như bạn hỏi bài, cần được giúp đỡ, hướng dẫn hơn là bạn đưa ra một bài tập mà bạn đã có sẳn đáp án.
Thôi thì tôi giúp cho bạn luôn đây!
Với cách làm trên của bạn, kể cả của tôi không thể ra được số lớn nhất nếu nó âm đâu, bởi lúc đầu tôi chỉ đưa thuật toán lên vì tôi nghĩ bạn đã có lời giải rồi.
Chúng ta bắt đầu suy luận nhé!
Nói đến hàm Max thì cho dù nó là số nguyên hay nó là số thực ta phải thừa nhận. Tôi nghĩ số cần tìm thuộc kiểu dữ liệu DOUBLE (Double Type). Xét đến double thì ta phải xét đến số nhỏ nhất của nó, đó chính là: -1.79769313486231E+308
Từ đây ta đã dễ dàng lắp ghép vào thủ tục:
Và như thế, ta phát triển nó thành hàm tự tạo như sau:
Bạn không còn gì thắc mắc nữa chứ!?
Chúc các bạn ngày càng tiến bộ!
VBA - để hình dung được thuật toán là khó nhất, cách học thuật toán của mình đó là tưởng tượng mình làm bằng tay như thế nào thì mô tả lại như thế, ví dụ thế này :
Có phải làm bằng tay thì thế này không?PHP:Sub timMax() Dim i As Long, maxV As Long Dim Rng As Range Set Rng = Range("A2:A14") maxV = Cells(2, 1).Value For i = 3 To 14 If Cells(i, 1).Value > maxV Then maxV = Cells(i, 1).Value Next MsgBox maxV End Sub
Đầu tiên sẽ nhìn dòng đầu tiên của vùng dữ liệu đó coi giá trị đó là lớn nhất- ghi giá trị đó vào giấy nháp, sau đó đi dò các dòng tiếp theo sau, cứ em nào lớn hơn thì ghi tiếp nó ra giấy nháp, cứ như thế dò cho đến hết vùng dữ liệu đó ta sẽ được giá trị cuối cùng chính là giá trị max.
Mình làm đúng như thế đó. Thực ra theo mình mới học VBA thì làm những ví dụ đơn giản mà ngắn ngắn thôi, chứ dài ngoằng chỉ mỗi việc ngồi theo dõi thuật toán thôi cũng đủ KHÓC rồi.
Hình như bạn hỏi bài, cần được giúp đỡ, hướng dẫn hơn là bạn đưa ra một bài tập mà bạn đã có sẳn đáp án.
Thôi thì tôi giúp cho bạn luôn đây!
Với cách làm trên của bạn, kể cả của tôi không thể ra được số lớn nhất nếu nó âm đâu, bởi lúc đầu tôi chỉ đưa thuật toán lên vì tôi nghĩ bạn đã có lời giải rồi.
Chúng ta bắt đầu suy luận nhé!
Nói đến hàm Max thì cho dù nó là số nguyên hay nó là số thực ta phải thừa nhận. Tôi nghĩ số cần tìm thuộc kiểu dữ liệu DOUBLE (Double Type). Xét đến double thì ta phải xét đến số nhỏ nhất của nó, đó chính là: -1.79769313486231E+308
Từ đây ta đã dễ dàng lắp ghép vào thủ tục:
PHP:
Sub RangeMax()
Dim n As Double, cel As Range, m As Long
n = -1.79769313486231E+308
For Each cel In Sheet1.Range("A2:A14")
If cel <> "" And IsNumeric(cel) Then
m = m + 1
If cel >= n Then n = cel
End If
Next
If m Then MsgBox n
End Sub
Và như thế, ta phát triển nó thành hàm tự tạo như sau:
PHP:
Function udfMax(ByVal MyRange As Variant) As Double
Dim sArray As Variant, itm As Variant, n As Double, m As Long
n = -1.79769313486231E+308
sArray = MyRange
For Each itm In sArray
If itm <> "" And IsNumeric(itm) Then
m = m + 1
If itm >= n Then n = itm
End If
Next
If m Then udfMax = n
End Function
Bạn không còn gì thắc mắc nữa chứ!?
Chúc các bạn ngày càng tiến bộ!
Lần chỉnh sửa cuối: