Return to Snippet

Revision: 27928
at June 27, 2010 03:06 by makeev


Updated Code
Public Function IsMediana(M As Variant, Cand As Variant) As Integer

Dim Pos As Integer, Neg As Integer
Pos = 0: Neg = 0
If TypeName(M) = "Range" Then
For i = 1 To M.Rows.Count
For j = 1 To M.Columns.Count
If M.Cells(i, j) > Cand Then
Pos = Pos + 1
ElseIf M.Cells(i, j) < Cand Then
Neg = Neg + 1
End If
Next j
Next i
IsMediana = Pos - Neg

ElseIf TypeName(M) = "Variant()" Then
'TypeName is "Variant()"
Dim Val As Variant
For Each Val In M
If Val > Cand Then
Pos = Pos + 1
ElseIf Val < Cand Then
Neg = Neg + 1
End If
Next Val
IsMediana = Pos - Neg
Else
MsgBox ("")
End If

End Function

Revision: 27927
at June 27, 2010 02:57 by makeev


Updated Code
Public Function IsMediana(M As Variant, Cand As Variant) As Integer
'�ан ма��ив M и �лемен� Cand. � ка�е��ве �ез�л��а�а возв�а�ае���
'�азно��� межд� �и�лом �лемен�ов ма��ива M, бол��и� и мен��и� Cand.
'Тем �ам�м можно оп�едели�� близо��� Cand к медиане ма��ива M.
Dim Pos As Integer, Neg As Integer
Pos = 0: Neg = 0
'�нализ �ипа па�аме��а M
If TypeName(M) = "Range" Then
For i = 1 To M.Rows.Count
For j = 1 To M.Columns.Count
If M.Cells(i, j) > Cand Then
Pos = Pos + 1
ElseIf M.Cells(i, j) < Cand Then
Neg = Neg + 1
End If
Next j
Next i
IsMediana = Pos - Neg

ElseIf TypeName(M) = "Variant()" Then
'TypeName is "Variant()"
'Э�о ма��ив, но не �ов�ем на��о��ий, дл� него не оп�еделен�,
'нап�име�, ��нк�ии г�ани�: LBound, UBound.
Dim Val As Variant
For Each Val In M
If Val > Cand Then
Pos = Pos + 1
ElseIf Val < Cand Then
Neg = Neg + 1
End If
Next Val
IsMediana = Pos - Neg
Else
MsgBox ("��и в�зове ��нк�ии: IsMediana(M,Cand)" & _
vbCrLf & "M не �вл�е��� ма��ивом или об�ек�ом Range!")
End If

End Function

Revision: 27926
at June 27, 2010 02:56 by makeev


Initial Code
Public Function IsMediana(M As Variant, Cand As Variant) As Integer
'Дан массив M и элемент Cand. В качестве результата возвращается
'разность между числом элементов массива M, больших и меньших Cand.
'Тем самым можно определить близость Cand к медиане массива M.
Dim Pos As Integer, Neg As Integer
Pos = 0: Neg = 0
'Анализ типа параметра M
If TypeName(M) = "Range" Then
For i = 1 To M.Rows.Count
For j = 1 To M.Columns.Count
If M.Cells(i, j) > Cand Then
Pos = Pos + 1
ElseIf M.Cells(i, j) < Cand Then
Neg = Neg + 1
End If
Next j
Next i
IsMediana = Pos - Neg

ElseIf TypeName(M) = "Variant()" Then
'TypeName is "Variant()"
'Это массив, но не совсем настоящий, для него не определены,
'например, функции границ: LBound, UBound.
Dim Val As Variant
For Each Val In M
If Val > Cand Then
Pos = Pos + 1
ElseIf Val < Cand Then
Neg = Neg + 1
End If
Next Val
IsMediana = Pos - Neg
Else
MsgBox ("При вызове функции: IsMediana(M,Cand)" & _
vbCrLf & "M не является массивом или объектом Range!")
End If

End Function

Initial URL
http://www.intuit.ru/department/office/vbaexcel/2/vbaexcel_2.html

Initial Description
Создание процедуры с переменным числом параметров и обработка этих параметров

Initial Title
Параметры в VBA

Initial Tags
array

Initial Language
Visual Basic