Nhờ các bạn kiểm tra hộ đoạn code sau (lập hàm maxif) (1 người xem)

Liên hệ QC

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

focus_hero

Thành viên mới
Tham gia
5/5/08
Bài viết
3
Được thích
0
Mình đang có 1 bài toán: tương ứng với mỗi 1 giá trị frame text có 1 tập hợp các giá trị M3. Trong bảng dự liệu có rất nhiều giá trị frame text. Mục đích bây giờ của mình là lọc ra giá trị M3 max tương ứng với mỗi frame text. Cách giải của mình là viết ra 1 hàm maxif với cú pháp
= maxif(MTtim,doituong,MTKQ)
MTtim là cột chứa các giá trị frame text
doituong là giá trị frame text cần tìm max tương ứng
MTKQ là cột chứa các giá trị M3.

Đoạn code mình viết là:

Function Maxif(MTtim(), doituong, MTKQ())
Dim MTtim() As Double
Dim doituong As Double
Dim MTKQ() As Double
Dim i As Integer
Maxif = 0
For i = 0 To UBound(MTtim())
If MTtim(i) = doituong Then
If Maxif < MTKQ(i) Then Maxif = MTKQ(i) Else Maxif = Maxif
End If
End If
Next
End Function

Nhưng kết quả lại không được như ý muốn, bạn nào giúp mình kiểm tra lỗi code dùm (mình mới tập toẹ viết code nên còn nhiều điều chưa biết). Mục đích của bài toán là phải giải bằng VBA ko dùng các hàm excel, vì giải bằng hàm excel mình cũng đã giải được rồi.
 

File đính kèm

Mình đang có 1 bài toán: tương ứng với mỗi 1 giá trị frame text có 1 tập hợp các giá trị M3. Trong bảng dự liệu có rất nhiều giá trị frame text. Mục đích bây giờ của mình là lọc ra giá trị M3 max tương ứng với mỗi frame text. Cách giải của mình là viết ra 1 hàm maxif với cú pháp
= maxif(MTtim,doituong,MTKQ)
MTtim là cột chứa các giá trị frame text
doituong là giá trị frame text cần tìm max tương ứng
MTKQ là cột chứa các giá trị M3.
Đoạn code mình viết là:
PHP:
Function Maxif(MTtim(), doituong, MTKQ())
'Dim MTtim() As Double '
'Dim doituong As Double'
'Dim MTKQ() As Double'
Dim i As Integer
Maxif = 0   '?? Nếu trong cột cần tìm có toàn số âm thì sai chắc!'
 For i = 0 To UBound(MTtim())
      If MTtim(i) = doituong Then
           If Maxif < MTKQ(i) Then Maxif = MTKQ(i) Else Maxif = Maxif
      End If
'End If '
Next
End Function
Bạn thử đối chiếu với hàm này:

PHP:
Option Explicit
Function MaxIIf(Col As Range, Frame As Double, M3 As Range) As Double
 Dim Clls As Range, Temp As Double
 
 MaxIIf = Application.WorksheetFunction.Min(M3)
 For Each Clls In Col
   Temp = Cells(Clls.Row, M3.Column).Value
   If Clls.Value = Frame And Temp > MaxIIf Then MaxIIf = Temp
 Next Clls
End Function
 
Upvote 0
Mình thấy hàm của ChanhTQ cũng cho kết quả khá hay. Nhưng mình thấy nên hạn chế 1 số đối số và làm cho hàm dễ hiểu, sử dụng.
Mình hiệu chỉnh để cú pháp hàm đơn giản hơn.

=MaxIf(A4:K531,P4)

Mã:
Function Maxif(Rg As Range, Tc As String)
Maxif = Application.WorksheetFunction.Min(Rg.Columns(Rg.Columns.Count))
For Each Cll In Rg.Columns(1).Cells
If Trim(Str(Cll.Value)) = Tc And Cll.Offset(, Rg.Columns.Count - 1).Value > Maxif _
Then Maxif = Cll.Offset(, Rg.Columns.Count - 1)
Next
End Function
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom