Giúp em chỉ ra vị trí của số nhỏ nhất!

Liên hệ QC

Duong_VBA

Thành viên chính thức
Tham gia
10/11/07
Bài viết
89
Được thích
26
Đây là hàm tìm Min của 1 mảng, các bác giúp em sửa lại để hàm trả về giá trị nhỏ nhất và vị trí của giá trị nhỏ nhất ấy trong mảng:
'------------------
Function MinOfList(ParamArray varValues()) As Variant
Dim i, T As Integer 'Loop controller.
Dim varMin As Variant 'Smallest value found so far.
varMin = Null 'Initialize to null
For i = LBound(varValues) To UBound(varValues)
If IsNumeric(varValues(i)) Or IsDate(varValues(i)) Then
If varMin <= varValues(i) Then
'do nothing
Else
varMin = varValues(i)
End If
End If
Next
MinOfList = varMin
' MsgBox LBound(varValues)
End Function
'--------------------

Thank!
 
Đây là hàm tìm Min của 1 mảng, các bác giúp em sửa lại để hàm trả về giá trị nhỏ nhất và vị trí của giá trị nhỏ nhất ấy trong mảng

Oh, đúng nghĩa hàm thì:
+ Hàm chỉ trả về 1 giá trị và một mà thôi

+ Vì thế bạn hỏi "hàm trả về giá trị nhỏ nhất và vị trí của giá trị nhỏ nhất" thì là ko thể - trừ phi biến chúng thành text và ghép vào nhau

+ Để tìm vị trí min -> bạn dùng thêm 1 biến iv để lưu vị trí của nó - ứng với varMin > varValues(i) thì gán min và đồng thời gán iv=i thế là ta có vị trí cần tim

.
 
Upvote 0
Đây là hàm tìm Min của 1 mảng, các bác giúp em sửa lại để hàm trả về giá trị nhỏ nhất và vị trí của giá trị nhỏ nhất ấy trong mảng:
'------------------
Mã:
Function MinOfList(ParamArray varValues()) As Variant
    Dim i, T As Integer         'Loop controller.
    Dim varMin As Variant 'Smallest value found so far.
    varMin = Null         'Initialize to null
    For i = LBound(varValues) To UBound(varValues)
        If IsNumeric(varValues(i)) Or IsDate(varValues(i)) Then
            If varMin <= varValues(i) Then
                'do nothing
            Else
                varMin = varValues(i)
            End If
        End If
    Next
    MinOfList = varMin
   ' MsgBox LBound(varValues)
End Function
'--------------------
Nguyên tắc là khai báo 1 biến kiểu Double (hay Single theo dữ liệu). Gán cho nó số cực lớn có thể;
Tiếp sau là duyệt hết các phần tử trong mảng; hễ phần tử nào nhỏ hơn biến thì gán biến có gia trị mới này
Duyệt hết, mệt nghỉ!
* To Tiger^2: Hàm tự tạo hay hàm của excel có khi trả về mảng giá trị đó nha!

Chúc xuân vui vẽ!!
 
Lần chỉnh sửa cuối:
Upvote 0
SA_DQ đã viết:
* To Tiger^2: Hàm tự tạo hay hàm của excel có khi trả về mảng giá trị đó nha!

Nhưng khi đó thành công thức mảng (vd hàm TRANSPOSE) phải k bác -> người ta hạn chế dùng lém bác ah
.
 
Upvote 0
tigertiger đã viết:
Nhưng khi đó thành công thức mảng (vd hàm TRANSPOSE) phải k bác -> người ta hạn chế dùng lém bác ah
.

Cái này thì tùy vào nhu cầu thôi bác ạ. Khi cần kết quả trả về 1 mảng thì ta phải dùng nó thôi, không khác được.

Thân!
 
Upvote 0
Theo gợi ý của bác tigertiger em đã OK-Cảm ơn bác! (Hàm này em dùng trong Access)
Em hỏi thêm:
1. Trong trường hợp mảng có >= 2 phần tử bằng nhau thì làm sao tìm được vị trí thứ 2
2. Có cách nào tìm giá trị và vị trí số lớn hơn ngay sát số nhỏ nhất (Tức là số nhỏ nhất lớn hơn số nhỏ nhất)

 
Upvote 0
Thường nếu tìm theo kiểu bạn nói thì trong Excel có hàm SMALL(Array,k) với Array là mãng chứa số, k có thể hiểu nôm na là: NHỎ THỨ BAO NHIÊU (Mặc định k = 1 là tìm số nhỏ nhất, tương đương với MIN)
Còn trong VBA chã biết có hàm tương tự ko... nhưng nếu ko có thể bạn vẫn có thể gọi hàm Excel mà...
Mến
ANH TUẤN
 
Upvote 0
Web KT

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

Back
Top Bottom