Основы офисного программирования и язык VBA


       умная кормушка для собак |   

M As Variant, Cand As


Public Function IsMediana( M As Variant, Cand As Variant) As Integer
'Дан массив M и элемент Cand. В качестве результата возвращается
'разность между числом элементов массива M, больших и меньших Cand.
Dim i As Integer, j As Integer
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
ElseIf TypeName(M) = "Integer()" Then
'Это настоящий массив целых VBA, для которого
'определены функции границ.
For i = LBound(M) To UBound(M)
If M(i) > Cand Then
Pos = Pos + 1
ElseIf M(i) < Cand Then
Neg = Neg + 1
End If
Next i
IsMediana = Pos - Neg
Else
MsgBox ("При вызове функции:IsMediana(M,Cand)" _
& "- M не является массивом или объектом Range!")
End If
End Function

Содержание  Назад  Вперед