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


         

Эта функция осуществляет те же


Public Function IsMedianaForAll(Cand As Variant, ParamArray M() As Variant) As Integer
' Эта функция осуществляет те же вычисления, что и функция IsMediana
'Важное отличие состоит в том, что аргумент M может быть задан сложным объектом
'Range как объединение массивов.
Dim i As Integer, j As Integer
Dim Pos As Integer, Neg As Integer
Pos = 0: Neg = 0
Dim Elem As Variant
'Теперь M - это массив параметров, а Elem - его элемент.
For Each Elem In M
'Анализ типа параметра Elem
If TypeName(Elem) = "Range" Then
For i = 1 To Elem.Rows.Count
For j = 1 To Elem.Columns.Count
If Elem.Cells(i, j) > Cand Then
Pos = Pos + 1
ElseIf Elem.Cells(i, j) < Cand Then
Neg = Neg + 1
End If
Next j
Next i
ElseIf TypeName(Elem) = "Variant()" Then
'TypeName is "Variant()"
'Это массив, но не совсем настоящий, для него не определены,
'например, функции границ: LBound, UBound.
Dim Val As Variant
For Each Val In Elem
If Val > Cand Then
Pos = Pos + 1
ElseIf Val < Cand Then
Neg = Neg + 1
End If
Next Val
ElseIf TypeName(Elem) = "Integer()" Then
'Это настоящий массив целых VBA, для которого
'определены функции границ.
For i = LBound(Elem) To UBound(Elem)
If Elem(i) > Cand Then
Pos = Pos + 1
ElseIf Elem(i) < Cand Then
Neg = Neg + 1
End If
Next i
Else
MsgBox ("При вызове IsMedianaForAll один из аргументов" _
& "не является массивом или объектом Range!")
End If
Next Elem
IsMedianaForAll = Pos - Neg
End Function

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