Ngồi buồn ngứa tay, viết thử cái hàm MAX không dùng vòng lặp (ngôn ngữ khác có vài cách, nhưng riêng VBA, tôi chưa tìm ra cách nào khác ngoài đệ quy để thay thế vòng lặp)
Mã:
Function RgMax(ByVal rg As Range) As Double
' hàm tính max của một range. Hàm này gọi hàm con để duyệt range theo đệ quy
If rg.Count < 1 Then
RgMax = -9E+20
Else
RgMax = RgMaxRecur(rg, 1, rg.Count)
End If
End Function
Private Function RgMaxRecur(rg As Range, ByVal cur As Integer, ByVal last As Integer) As Double
' hàm duyệt một range và lấy max
' hàm này không phải là hàm giao diện cho nên nó không có chỗ xét lỗi vượt phạm vi. Hàm gọi nó phải tự xét.
Dim mx as Double
If cur >= last Then
RgMaxRecur = rg.Cells(last)
Else
mx = RgMaxRecur(rg, cur + 1, last)
RgMaxRecur = IIf(mx > rg.Cells(cur), mx, rg.Cells(cur))
End If
End Function