hungpecc1
Thành viên gắn bó



- Tham gia
- 24/8/12
- Bài viết
- 1,709
- Được thích
- 2,304
- Giới tính
- Nam
em viết 1 hàm cho excel ,,
em viết dưới dạng sub thì chạy mà function lại không chạy ,các pác giúp em tìm nguyên nhân ^^
sub này thì chạy !
còn function thì không chạy :?
cụ thể file đính kèm của e như sau :
em viết dưới dạng sub thì chạy mà function lại không chạy ,các pác giúp em tìm nguyên nhân ^^
sub này thì chạy !
Mã:
Public Sub ktra()
Dim arr() As Single
AX = Range("E1:E31")
M22 = Range("D1:D31")
M33 = Range("F1:F31")
ReDim arr(1 To UBound(M22, 1), 1 To 3)
' tim max m22+m33
For irow = 1 To UBound(M22, 1)
If M22(irow, 1) <> "" And IsNumeric(M22(irow, 1)) Then
i = i + 1
arr(i, 1) = M22(irow, 1)
arr(i, 2) = M33(irow, 1)
End If
If AX(irow, 1) <> "" And IsNumeric(AX(irow, 1)) And M22(irow, 1) = "" Then
j = j + 1
arr(j, 3) = AX(irow, 1)
End If
Next
Debug.Print j
Nmin = arr(1, 3)
For i = 1 To j
k = k + 1
If arr(i, 3) < Nmin Then
Nmin = arr(i, 3)
Exit For
End If
Next
If k Mod 2 = 0 Then
M1 = Abs(arr(k - 1, 1)) + Abs(arr(k - 1, 2))
M2 = Abs(arr(k, 1)) + Abs(arr(k, 2))
If M1 > M2 Then
Debug.Print Nmin & " / " & M1
Else
Debug.Print Nmin & " / " & M2
End If
Else
M1 = Abs(arr(k, 1)) + Abs(arr(k, 2))
M2 = Abs(arr(k + 1, 1)) + Abs(arr(k + 1, 2))
If M1 > M2 Then
Debug.Print Nmin & " / " & M1
Else
Debug.Print Nmin & " / " & M2
End If
End If
End Sub
Mã:
Public Function Nmin_Mtu(v2 As Range, v3 As Range, v4 As Range) As String
Dim irow As Integer, j As Integer, i As Integer, k As Integer
Dim vt1 As Long, vt2 As Long
Dim Nmax As Single, M1 As Single, M2 As Single
Dim rng As Range
Dim arr() As Single
Dim moment, M22, M33, AX
vt1 = 1
vt2 = 31
' xu ly mang
M22 = v2.Resize(vt2 - vt1 + 1).Offset(vt1 - 1)
AX = v3.Resize(vt2 - vt1 + 1).Offset(vt1 - 1)
M33 = v4.Resize(vt2 - vt1 + 1).Offset(vt1 - 1)
ReDim arr(1 To UBound(M22, 1), 1 To 3)
' tim max m22+m33
For irow = 1 To UBound(M22, 1)
If M22(irow, 1) <> "" And IsNumeric(M22(irow, 1)) Then
i = i + 1
arr(i, 1) = M22(irow, 1)
arr(i, 2) = M33(irow, 1)
End If
If AX(irow, 1) <> "" And IsNumeric(AX(irow, 1)) And M22(irow, 1) = "" Then
j = j + 1
arr(j, 3) = AX(irow, 1)
End If
Next
Nmin = arr(1, 3)
For i = 1 To j
k = k + 1
If arr(i, 3) < Nmin Then
Nmin = arr(i, 3)
Exit For
End If
Next
If k Mod 2 = 0 Then
M1 = Abs(arr(k - 1, 1)) + Abs(arr(k - 1, 2))
M2 = Abs(arr(k, 1)) + Abs(arr(k, 2))
If M1 > M2 Then
Nin_Mtu = Nmin & " / " & M1
Else
Nmin_Mtu = Nmin & " / " & M2
End If
Else
M1 = Abs(arr(k, 1)) + Abs(arr(k, 2))
M2 = Abs(arr(k + 1, 1)) + Abs(arr(k + 1, 2))
If M1 > M2 Then
Nmin_Mtu = Nmin & " / " & M1
Else
Nmin_Mtu = Nmin & " / " & M2
End If
End If
End Function